X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROCurveCreator%2FCurveCreator_Curve.hxx;h=adcfc87a8f6f8e21448d463583bfbcb14ae5597a;hb=4e1b53167581be7e084a3d71c075507bc6699c06;hp=656b312b06dc683e84287132a4f45c5f5e196588;hpb=66eed78107ad562c2846807c99978fe5a212cca4;p=modules%2Fhydro.git diff --git a/src/HYDROCurveCreator/CurveCreator_Curve.hxx b/src/HYDROCurveCreator/CurveCreator_Curve.hxx index 656b312b..adcfc87a 100644 --- a/src/HYDROCurveCreator/CurveCreator_Curve.hxx +++ b/src/HYDROCurveCreator/CurveCreator_Curve.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -30,20 +30,23 @@ #include "CurveCreator_Diff.hxx" #include +#include struct CurveCreator_Section; -class CurveCreator_Listener; +class CurveCreator_Displayer; +class AIS_Shape; +class Handle_AIS_InteractiveObject; /** * The CurveCreator_Curve object is represented as one or more sets of * connected points; thus CurveCreator_Curve object can contain several * not connected curves (polylines or b-splines), each such curve has two - * only ends � start and end points � in other words non-manifold curves + * only ends "start and end points" in other words non-manifold curves * are not supported. */ class CURVECREATOR_EXPORT CurveCreator_Curve : public CurveCreator_ICurve { -private: +protected: typedef std::list ListDiff; public: @@ -62,11 +65,14 @@ public: //! Return unique section name virtual std::string getUniqSectionName() const; - //! Set curve creator listener object - virtual void setListener( CurveCreator_Listener* theWatcher ); + //! Set curve creator Displayer object + virtual void setDisplayer( CurveCreator_Displayer* theDisplayer ); - //! Remove curve creator listener object - virtual void removeListener(); + //! Return curve creator Displayer object + CurveCreator_Displayer* getDisplayer(); + + //! Remove curve creator Displayer object + virtual void removeDisplayer(); /** Set depth of undo operations (unlimited if \a theDepth is -1 * or disabled if \a theDepth is 0) @@ -85,6 +91,13 @@ public: */ virtual int toICoord(const int theIPnt) const; + //! For internal use only! Undo/Redo are not used here. + virtual bool moveSectionInternal(const int theISection, + const int theNewIndex); + //! Move section to new position in list + virtual bool moveSection(const int theISection, + const int theNewIndex); + protected: /** This method updates all undo/redo information required to be updated * after curve modification operation. It returns false if undo/redo @@ -92,6 +105,10 @@ protected: */ virtual bool addEmptyDiff(); +public: // TODO: remove public + void getCoordinates( int theISection, int theIPoint, double& theX, double& theY, double& theZ ) const; +protected: // TODO: remove public + void redisplayCurve(); public: /************ Implementation of INTERFACE methods ************/ @@ -117,33 +134,47 @@ public: /*** Section methods ***/ /***********************************************/ + //! For internal use only! Undo/Redo are not used here. + virtual bool clearInternal(); //! Clear the polyline (remove all sections) virtual bool clear(); - //! Join range of sections to one section (join all sections if -1 is passed in one of arguments) - virtual bool join( const int theISectionTo = -1, - const int theISectionFrom = -1 ); + //! For internal use only! Undo/Redo are not used here. + virtual bool joinInternal( const std::list& theSections ); + + //! Join list of sections to one section (join all if the list is empty) + // The first section in the list is a leader, another sections are joined to it + virtual bool join( const std::list& theSections ); //! Get number of sections virtual int getNbSections() const; + //! For internal use only! Undo/Redo are not used here. + virtual int addSectionInternal( const std::string &theName, + const CurveCreator::SectionType theType, + const bool theIsClosed, + const CurveCreator::Coordinates &thePoints); //! Add a new section. virtual int addSection( const std::string &theName, const CurveCreator::SectionType theType, const bool theIsClosed ); - //! Add a new section. virtual int addSection( const std::string &theName, const CurveCreator::SectionType theType, const bool theIsClosed, const CurveCreator::Coordinates &thePoints); - + + //! For internal use only! Undo/Redo are not used here. + virtual bool removeSectionInternal( const int theISection ); //! Removes the given sections. virtual bool removeSection( const int theISection ); //! Get "closed" flag of the specified section virtual bool isClosed( const int theISection ) const; + //! For internal use only! Undo/Redo are not used here. + virtual bool setClosedInternal( const int theISection, + const bool theIsClosed ); /** * Set "closed" flag of the specified section (all sections if * \a theISection is -1). @@ -154,6 +185,9 @@ public: //! Returns specifyed section name virtual std::string getSectionName( const int theISection ) const; + //! For internal use only! Undo/Redo are not used here. + virtual bool setSectionNameInternal( const int theISection, + const std::string& theName ); /** Set name of the specified section */ virtual bool setSectionName( const int theISection, const std::string& theName ); @@ -161,6 +195,9 @@ public: //! Get type of the specified section virtual CurveCreator::SectionType getSectionType( const int theISection ) const; + //! For internal use only! Undo/Redo are not used here. + virtual bool setSectionTypeInternal( const int theISection, + const CurveCreator::SectionType theType ); /** * Set type of the specified section (or all sections * if \a theISection is -1). @@ -173,6 +210,8 @@ public: /*** Point methods ***/ /***********************************************/ + //! For internal use only! Undo/Redo are not used here. + virtual bool addPointsInternal( const CurveCreator::SectionsMap &theSectionsMap ); /** * Add one point to the specified section starting from the given theIPnt index * (or at the end of points if \a theIPnt is -1). @@ -181,14 +220,25 @@ public: const int theISection, const int theIPnt = -1 ); + //! For internal use only! Undo/Redo are not used here. + virtual bool setPointInternal( const CurveCreator::SectionsMap &theSectionsMap ); //! Set coordinates of specified point virtual bool setPoint( const int theISection, const int theIPnt, const CurveCreator::Coordinates& theNewCoords ); + //! Set coordinates of specified points from different sections + virtual bool setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords, + const bool theIsToSaveDiff = true ); + + //! For internal use only! Undo/Redo are not used here. + virtual bool removePointsInternal( const SectionToPointList &thePoints ); /** Remove point with given id */ virtual bool removePoint( const int theISection, const int theIPnt = -1 ); + //! Remove several points from different sections with given ids + virtual bool removeSeveralPoints( const SectionToPointList &theSectionToPntIDs); + //! Get coordinates of specified point virtual CurveCreator::Coordinates getPoint( const int theISection, const int theIPnt ) const; @@ -205,18 +255,64 @@ public: */ virtual int getNbPoints( const int theISection ) const; + /** + * Set skip sorting flag. If the flag is true - points sorting will be skipped. + */ + virtual void setSkipSorting( const bool theIsToSkip ); + + /** + * Indicates whether the points can be sorted. + */ + virtual bool canPointsBeSorted(); + + /** + * Saves points coordinates difference. + * \param theOldCoords the old points coordinates + */ + virtual void saveCoordDiff( const SectionToPointCoordsList &theOldCoords ); /***********************************************/ /*** Presentation methods ***/ /***********************************************/ -// virtual TopoDS_Wire constructWire() const; + /** + * Get the curve AIS object + */ + virtual Handle_AIS_InteractiveObject getAISObject( const bool theNeedToBuild = false ) const; -public: +protected: + /** + * Removes the points from the section. It sortes the points and remove them + * in the decreasing order + * \param theSectionId a section index + * \param thePointIds a list of section points + */ + bool removeSectionPoints( const int theSectionId, + const std::list& thePointIds ); + /** + * Converts the list of pairs of section to point into map of a section to list of points + * \param thePoints an source list + * \param theConvPoints a converted map + */ + void convert( const SectionToPointList &thePoints, + std::map > &theConvPoints ); +protected: + virtual void constructAISObject(); + /** + * Returns the section by the section index or NULL if the index is out of the section + * list range + * \param theSectionId the section index + */ + CurveCreator_Section* getSection( const int theSectionId ) const; + +protected: + bool mySkipSorting; + +public: bool myIsLocked; CurveCreator::Sections mySections; //!< curve data CurveCreator::Dimension myDimension; //!< curve dimension - CurveCreator_Listener* myListener; //!< listener + CurveCreator_Displayer* myDisplayer; //!< curve displayer private: @@ -226,6 +322,7 @@ private: ListDiff myListDiffs; int myUndoDepth; int myOpLevel; + AIS_Shape* myAISShape; //!< AIS shape }; #endif