${CAS_INCLUDE_DIRS}
${QT_INCLUDES}
${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/../HYDROCurveCreator
# ${GUI_ROOT_DIR}/include/salome
${GUI_INCLUDE_DIRS}
)
add_library(HYDROData SHARED ${PROJECT_SOURCES} ${PROJECT_HEADERS})
-target_link_libraries(HYDROData HYDROCurveCreator ${CAS_OCAF} ${CAS_OCAFVIS} ${CAS_TKG3d} ${CAS_TKGeomBase} ${CAS_TKGeomAlgo} ${CAS_TKBrep} ${CAS_TKIGES} ${CAS_TKSTEP} ${CAS_TKTopAlgo} ${CAS_TKBO} ${QT_LIBRARIES} ${GUI_ImageComposer})
+target_link_libraries(HYDROData ${GEOM_GEOMUtils} ${CAS_OCAF} ${CAS_OCAFVIS} ${CAS_TKG3d} ${CAS_TKGeomBase} ${CAS_TKGeomAlgo} ${CAS_TKBrep} ${CAS_TKIGES} ${CAS_TKSTEP} ${CAS_TKTopAlgo} ${CAS_TKBO} ${QT_LIBRARIES} ${GUI_ImageComposer})
INSTALL(TARGETS HYDROData EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
set(PROJECT_LIBRARIES HYDROData)
#include "HYDROData_IPolyline.h"
-#include "HYDROData_Document.h"
+#include <gp_XY.hxx>
-#include <TDataStd_BooleanList.hxx>
-#include <TDataStd_ExtStringList.hxx>
-#include <TDataStd_Integer.hxx>
-#include <TDataStd_IntegerList.hxx>
#include <TDataStd_RealList.hxx>
IMPLEMENT_STANDARD_HANDLE(HYDROData_IPolyline, HYDROData_Entity)
IMPLEMENT_STANDARD_RTTIEXT(HYDROData_IPolyline, HYDROData_Entity)
HYDROData_IPolyline::HYDROData_IPolyline()
-: HYDROData_Entity(),
- myIsOperation( false )
+: HYDROData_Entity()
{
}
{
}
-int HYDROData_IPolyline::getNbUndo() const
+int HYDROData_IPolyline::NbPoints( const int theSectionIndex ) const
{
- return getNbOperations();
-}
-
-bool HYDROData_IPolyline::undo()
-{
- Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
- if ( aDocument.IsNull() )
- return false;
-
- if ( getNbUndo() < 1 )
- return false;
-
- aDocument->Undo();
-
- int aNbUndoedOperations = getNbUndoedOperations();
- setNbUndoedOperations( aNbUndoedOperations + 1 );
-
- return true;
-}
-
-int HYDROData_IPolyline::getNbRedo() const
-{
- return getNbUndoedOperations();
-}
-
-bool HYDROData_IPolyline::redo()
-{
- Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
- if ( aDocument.IsNull() )
- return false;
-
- if ( getNbRedo() < 1 )
- return false;
-
- aDocument->Redo();
-
- int aNbUndoedOperations = getNbUndoedOperations();
- setNbUndoedOperations( aNbUndoedOperations - 1 );
-
- return true;
-}
-
-CurveCreator::Dimension HYDROData_IPolyline::getDimension() const
-{
- return CurveCreator::Dim2d;
-}
-
-CurveCreator::Coordinates HYDROData_IPolyline::getPoint( const int theISection,
- const int theIPnt ) const
-{
- CurveCreator::Coordinates aResPoint;
- if ( theISection < 0 || theIPnt < 0 )
- return aResPoint;
-
- CurveCreator::Coordinates aSectPoints = getPoints( theISection );
- if ( theIPnt >= aSectPoints.size() )
- return aResPoint;
-
- CurveCreator::Coordinates::reverse_iterator anIt = aSectPoints.rbegin();
-
- aResPoint.push_back( *anIt++ );
- aResPoint.push_back( *anIt );
-
- return aResPoint;
-}
-
-
-int HYDROData_IPolyline::getNbPoints( const int theSectionIndex ) const
-{
- return getPoints( theSectionIndex ).size();
-}
-
-void HYDROData_IPolyline::startOperation()
-{
- if ( myIsOperation )
- return;
-
- Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
- if ( aDocument.IsNull() )
- return;
-
- aDocument->StartOperation();
-
- myIsOperation = true;
-}
-
-void HYDROData_IPolyline::commitOperation()
-{
- if ( !myIsOperation )
- return;
-
- Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
- if ( aDocument.IsNull() )
- return;
-
- int aNbOperations = getNbOperations();
- setNbOperations( aNbOperations + 1 );
-
- aDocument->CommitOperation();
-
- myIsOperation = false;
-}
-
-void HYDROData_IPolyline::abortOperation()
-{
- if ( !myIsOperation )
- return;
-
- Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
- if ( aDocument.IsNull() )
- return;
-
- aDocument->AbortOperation();
-
- myIsOperation = false;
-}
-
-void HYDROData_IPolyline::setNbOperations( const int theNb )
-{
- TDF_Label anOpLabel = myLab.FindChild( DataTag_Operations ).FindChild( OperationsTag_Commited );
- TDataStd_Integer::Set( anOpLabel, theNb );
-}
-
-int HYDROData_IPolyline::getNbOperations() const
-{
- TDF_Label aLabel = myLab.FindChild( DataTag_Operations, false );
- if ( aLabel.IsNull() )
- return 0;
-
- TDF_Label anOpLabel = aLabel.FindChild( OperationsTag_Commited, false );
- if ( anOpLabel.IsNull() )
- return 0;
-
- Handle(TDataStd_Integer) anOpCount;
- if ( !anOpLabel.FindAttribute( TDataStd_Integer::GetID(), anOpCount ) )
- return 0;
-
- return anOpCount->Get();
-}
-
-void HYDROData_IPolyline::setNbUndoedOperations( const int theNb )
-{
- TDF_Label anUndoedLabel = myLab.FindChild( DataTag_Operations ).FindChild( OperationsTag_Undoed );
- TDataStd_Integer::Set( anUndoedLabel, theNb );
-}
-
-int HYDROData_IPolyline::getNbUndoedOperations() const
-{
- TDF_Label aLabel = myLab.FindChild( DataTag_Operations, false );
- if ( aLabel.IsNull() )
- return 0;
-
- TDF_Label anUndoedLabel = aLabel.FindChild( OperationsTag_Undoed, false );
- if ( anUndoedLabel.IsNull() )
- return 0;
-
- Handle(TDataStd_Integer) anUndoedCount;
- if ( !anUndoedLabel.FindAttribute( TDataStd_Integer::GetID(), anUndoedCount ) )
- return 0;
-
- return anUndoedCount->Get();
-}
-
-void HYDROData_IPolyline::getSectionsLists( Handle(TDataStd_ExtStringList)& theNamesList,
- Handle(TDataStd_IntegerList)& theTypesList,
- Handle(TDataStd_BooleanList)& theClosuresList,
- const bool theIsCreate ) const
-{
- TDF_Label aSectsLabel = myLab.FindChild( DataTag_Sections, theIsCreate );
- if ( aSectsLabel.IsNull() )
- return;
-
- Handle(TDataStd_ExtStringList) aNamesList;
- if ( !aSectsLabel.FindAttribute( TDataStd_ExtStringList::GetID(), aNamesList ) && theIsCreate )
- aNamesList = TDataStd_ExtStringList::Set( aSectsLabel );
-
- Handle(TDataStd_IntegerList) aTypesList;
- if ( !aSectsLabel.FindAttribute( TDataStd_IntegerList::GetID(), aTypesList ) && theIsCreate )
- aTypesList = TDataStd_IntegerList::Set( aSectsLabel );
-
- Handle(TDataStd_BooleanList) aClosuresList;
- if ( !aSectsLabel.FindAttribute( TDataStd_BooleanList::GetID(), aClosuresList ) && theIsCreate )
- aClosuresList = TDataStd_BooleanList::Set( aSectsLabel );
-}
-
-void HYDROData_IPolyline::removeSectionsLists()
-{
- TDF_Label aSectsLabel = myLab.FindChild( DataTag_Sections, false );
- if ( !aSectsLabel.IsNull() )
- aSectsLabel.ForgetAllAttributes();
+ return GetPoints( theSectionIndex ).Length();
}
void HYDROData_IPolyline::getPointsLists( const int theSectionIndex,
}
}
-void HYDROData_IPolyline::removePointsLists( const int theSectionIndex )
+void HYDROData_IPolyline::removePointsLists( const int theSectionIndex ) const
{
TDF_Label aLabel = myLab.FindChild( DataTag_Points, false );
if ( aLabel.IsNull() )
return;
- if ( theSectionIndex == -1 )
- {
- aLabel.ForgetAllAttributes();
- }
- else
- {
- TDF_Label aSectLabel = aLabel.FindChild( theSectionIndex, false );
- if ( !aSectLabel.IsNull() )
- aSectLabel.ForgetAllAttributes();
- }
+ TDF_Label aSectLabel = aLabel.FindChild( theSectionIndex, false );
+ if ( !aSectLabel.IsNull() )
+ aSectLabel.ForgetAllAttributes();
}
#include "HYDROData_Entity.h"
-#include <CurveCreator.hxx>
-#include <CurveCreator_ICurve.hxx>
DEFINE_STANDARD_HANDLE(HYDROData_IPolyline, HYDROData_Entity)
+class gp_XY;
class TopoDS_Wire;
class Handle(TDataStd_RealList);
-class Handle(TDataStd_ExtStringList);
-class Handle(TDataStd_IntegerList);
-class Handle(TDataStd_BooleanList);
/**\class HYDROData_IPolyline
* \brief Base class that stores/retreives information about the 2D points.
*/
-class HYDROData_IPolyline : public HYDROData_Entity, public CurveCreator_ICurve
+class HYDROData_IPolyline : public HYDROData_Entity
{
+public:
+
+ typedef gp_XY Point;
+ typedef NCollection_Sequence<Point> PointsList;
protected:
/**
enum DataTag
{
DataTag_First = HYDROData_Entity::DataTag_First + 100, ///< first tag, to reserve
- DataTag_Sections,
DataTag_Points,
- DataTag_Operations
- };
-
- /**
- * Enumeration of tags corresponding to the operations child lable
- */
- enum OperationsTag
- {
- OperationsTag_Commited,
- OperationsTag_Undoed
};
public:
/**
* Returns the 3D presentation of all points.
*/
- HYDRODATA_EXPORT virtual ListAISObjects constructWire() const = 0;
+ HYDRODATA_EXPORT virtual TopoDS_Wire GetWire() const = 0;
-public:
+ /**
+ * Returns number of sections.
+ */
+ HYDRODATA_EXPORT virtual int NbSections() const = 0;
- // Implementation of ICurvePolyline interface
-
- /***********************************************/
- /*** Undo/Redo methods ***/
- /***********************************************/
+ /**
+ * Adds new one section.
+ * \param theIsClosed flag indicates type of polyline
+ */
+ HYDRODATA_EXPORT virtual void AddSection( const bool theIsClosed ) = 0;
- //! Get number of available undo operations
- HYDRODATA_EXPORT virtual int getNbUndo() const;
+ /**
+ * Returns true if section with given index is closed.
+ * \param theSectionIndex index of section
+ */
+ HYDRODATA_EXPORT virtual bool IsClosedSection( const int theSectionIndex ) const = 0;
- //! Undo previous operation
- HYDRODATA_EXPORT virtual bool undo();
+ /**
+ * Removes section with given index.
+ * \param theSectionIndex index of section
+ */
+ HYDRODATA_EXPORT virtual void RemoveSection( const int theSectionIndex ) = 0;
- //! Get number of available redo operations
- HYDRODATA_EXPORT virtual int getNbRedo() const;
+ /**
+ * Removes all sections.
+ */
+ HYDRODATA_EXPORT virtual void RemoveSections() = 0;
- //! Redo last previously "undone" operation
- HYDRODATA_EXPORT virtual bool redo();
+ /**
+ * Return number of profile points.
+ * \return number of points
+ */
+ HYDRODATA_EXPORT int NbPoints( const int theSectionIndex = -1 ) const;
- /***********************************************/
- /*** Point methods ***/
- /***********************************************/
+ /**
+ * Adds new point for section with index "theSectionIndex".
+ * \param theSectionIndex index of section
+ * \param thePoint point to add
+ * \param theBeforeIndex if not equal -1 then insert point before this index
+ */
+ HYDRODATA_EXPORT virtual void AddPoint( const int theSectionIndex,
+ const Point& thePoint,
+ const int theBeforeIndex = -1 ) = 0;
- //! Get the dimension.
- HYDRODATA_EXPORT virtual CurveCreator::Dimension getDimension() const;
+ /**
+ * Replaces point for section with index "theSectionIndex".
+ * \param theSectionIndex index of section
+ * \param thePointIndex index of point to replace
+ * \param thePoint new point
+ */
+ HYDRODATA_EXPORT virtual void SetPoint( const int theSectionIndex,
+ const int thePointIndex,
+ const Point& thePoint ) = 0;
+ /**
+ * Removes point from section with index "theSectionIndex".
+ * \param theSectionIndex index of section
+ * \param thePointIndex index of point
+ */
+ HYDRODATA_EXPORT virtual void RemovePoint( const int theSectionIndex,
+ const int thePointIndex ) = 0;
- //! Get coordinates of specified point
- HYDRODATA_EXPORT virtual CurveCreator::Coordinates getPoint( const int theISection,
- const int theIPnt ) const;
/**
- * Get number of points in specified section or (the total number of points
- * in Curve if theISection is equal to -1).
+ * Returns list of points.
+ * \param theSectionIndex if not equal -1 then list of points returned
+ * only for section with this index
+ * \return list of points
*/
- HYDRODATA_EXPORT virtual int getNbPoints( const int theISection = -1 ) const;
-
+ HYDRODATA_EXPORT virtual PointsList GetPoints( const int theSectionIndex = -1 ) const = 0;
protected:
- void startOperation();
-
- void commitOperation();
-
- void abortOperation();
-
-
- void setNbOperations( const int theNb );
-
- int getNbOperations() const;
-
-
- void setNbUndoedOperations( const int theNb );
-
- int getNbUndoedOperations() const;
-
-
- void getSectionsLists( Handle(TDataStd_ExtStringList)& theNamesList,
- Handle(TDataStd_IntegerList)& theTypesList,
- Handle(TDataStd_BooleanList)& theClosuresList,
- const bool theIsCreate = true ) const;
-
- void removeSectionsLists();
-
-
void getPointsLists( const int theSectionIndex,
Handle(TDataStd_RealList)& theListX,
Handle(TDataStd_RealList)& theListY,
const bool theIsCreate = true ) const;
- void removePointsLists( const int theSectionIndex = -1 );
+ void removePointsLists( const int theSectionIndex ) const;
protected:
* Creates new object in the internal data structure. Use higher level objects
* to create objects with real content.
*/
- HYDRODATA_EXPORT HYDROData_IPolyline();
+ HYDROData_IPolyline();
/**
* Destructs properties of the object and object itself, removes it from the document.
*/
- HYDRODATA_EXPORT ~HYDROData_IPolyline();
-
-protected:
-
- bool myIsOperation;
+ ~HYDROData_IPolyline();
};
#endif
#include "HYDROData_Tool.h"
-#include <NCollection_Map.hxx>
+#include <gp_XY.hxx>
-#include <TCollection_ExtendedString.hxx>
-
-#include <TDataStd_ListIteratorOfListOfByte.hxx>
-#include <TDataStd_ListIteratorOfListOfExtendedString.hxx>
-#include <TColStd_ListIteratorOfListOfInteger.hxx>
#include <TColStd_ListIteratorOfListOfReal.hxx>
-#include <TDataStd_BooleanList.hxx>
-#include <TDataStd_ExtStringList.hxx>
-#include <TDataStd_Integer.hxx>
-#include <TDataStd_IntegerList.hxx>
#include <TDataStd_RealList.hxx>
#include <TopoDS_Wire.hxx>
{
}
-CurveCreator_ICurve::ListAISObjects HYDROData_PolylineXY::constructWire() const
+TopoDS_Wire HYDROData_PolylineXY::GetWire() const
{
// TODO
- ListAISObjects aProfileObjects;
- return aProfileObjects;
-}
-
-bool HYDROData_PolylineXY::clear()
-{
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
-
- removeSectionsLists();
- removePointsLists();
-
- if ( !anIsOperation )
- commitOperation();
-
- return true;
-}
-
-bool HYDROData_PolylineXY::join( const int theISectionTo,
- const int theISectionFrom )
-{
- Handle(TDataStd_ExtStringList) aNamesList;
- Handle(TDataStd_IntegerList) aTypesList;
- Handle(TDataStd_BooleanList) aClosuresList;
- getSectionsLists( aNamesList, aTypesList, aClosuresList, false );
- if ( aNamesList.IsNull() || aNamesList->Extent() <= 1 )
- return false;
-
- bool anIsOperation = myIsOperation;
-
- if ( theISectionTo == -1 || theISectionFrom == -1 )
- {
- // Join all sections to one
- if ( !anIsOperation )
- startOperation();
-
- TCollection_ExtendedString aSectName = aNamesList->First();
- CurveCreator::SectionType aSectType = (CurveCreator::SectionType)aTypesList->First();
- bool anIsClosed = aClosuresList->First();
-
- aNamesList->Clear();
- aTypesList->Clear();
- aClosuresList->Clear();
-
- aNamesList->Append( aSectName );
- aTypesList->Append( aSectType );
- aClosuresList->Append( anIsClosed );
-
- CurveCreator::Coordinates anAllPoints = getPoints();
- removePointsLists();
-
- addPoints( anAllPoints, 0 );
- }
- else
- {
- // Join selected range of sections to one
- if ( theISectionFrom >= theISectionTo )
- return false;
-
- if ( !anIsOperation )
- startOperation();
-
- TDataStd_ListOfExtendedString anOldNamesList;
- anOldNamesList = aNamesList->List();
-
- TColStd_ListOfInteger anOldTypesList;
- anOldTypesList = aTypesList->List();
-
- TDataStd_ListOfByte anOldClosuresList;
- anOldClosuresList = aClosuresList->List();
-
- // Refill the existing lists
- aNamesList->Clear();
- aTypesList->Clear();
- aClosuresList->Clear();
-
- Handle(TDataStd_RealList) aJoinListX, aJoinListY;
-
- TDataStd_ListIteratorOfListOfExtendedString aNamesIter( anOldNamesList );
- TColStd_ListIteratorOfListOfInteger aTypesIter( anOldTypesList );
- TDataStd_ListIteratorOfListOfByte aClosuresIter( anOldClosuresList );
-
- int aNbSect = 0;
- for ( ; aNamesIter.More() && aTypesIter.More() && aClosuresIter.More();
- aNamesIter.Next(), aTypesIter.Next(), aClosuresIter.Next(), ++aNbSect )
- {
- if ( aNbSect < theISectionFrom || aNbSect > theISectionTo )
- {
- aNamesList->Append( aNamesIter.Value() );
- aTypesList->Append( aTypesIter.Value() );
- aClosuresList->Append( (bool)aClosuresIter.Value() );
- }
- else
- {
- if ( aNbSect == theISectionFrom )
- {
- aNamesList->Append( aNamesIter.Value() );
- aTypesList->Append( aTypesIter.Value() );
- aClosuresList->Append( (bool)aClosuresIter.Value() );
-
- getPointsLists( aNbSect, aJoinListX, aJoinListY );
- }
- else
- {
- Handle(TDataStd_RealList) aListX, aListY;
- getPointsLists( aNbSect, aListX, aListY );
-
- TColStd_ListIteratorOfListOfReal anIterX( aListX->List() );
- TColStd_ListIteratorOfListOfReal anIterY( aListY->List() );
- for ( ; anIterX.More() && anIterY.More(); anIterX.Next(), anIterY.Next() )
- {
- aJoinListX->Append( anIterX.Value() );
- aJoinListY->Append( anIterY.Value() );
- }
-
- removePointsLists( aNbSect );
- }
- }
-
- // Move the list which are after theISectionTo to correct place
- for ( int i = theISectionTo + 1, j = theISectionFrom + 1; i < aNbSect; ++i, j++ )
- {
- CurveCreator::Coordinates aPoints = getPoints( i );
- removePointsLists( i );
- addPoints( aPoints, j );
- }
- }
- }
-
- if ( !anIsOperation )
- commitOperation();
-
- return true;
-}
-
-int HYDROData_PolylineXY::getNbSections() const
-{
- Handle(TDataStd_ExtStringList) aNamesList;
- Handle(TDataStd_IntegerList) aTypesList;
- Handle(TDataStd_BooleanList) aClosuresList;
- getSectionsLists( aNamesList, aTypesList, aClosuresList, false );
-
- return aNamesList.IsNull() ? 0 : aNamesList->Extent();
-}
-
-TCollection_ExtendedString getUniqueSectionName( const Handle(TDataStd_ExtStringList)& theNamesList )
-{
- NCollection_Map<TCollection_ExtendedString> aNamesMap;
-
- TDataStd_ListIteratorOfListOfExtendedString aNamesIter( theNamesList->List() );
- for ( ; aNamesIter.More(); aNamesIter.Next() )
- aNamesMap.Add( aNamesIter.Value() );
-
- TCollection_ExtendedString aResName;
-
- int aPrefIdx = 1;
- do
- {
- aResName = "Section_" + aPrefIdx;
- ++aPrefIdx;
- }
- while ( aNamesMap.Contains( aResName ) );
-
- return aResName;
-}
-
-int HYDROData_PolylineXY::addSection( const std::string& theName,
- const CurveCreator::SectionType theType,
- const bool theIsClosed )
-{
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
-
- Handle(TDataStd_ExtStringList) aNamesList;
- Handle(TDataStd_IntegerList) aTypesList;
- Handle(TDataStd_BooleanList) aClosuresList;
- getSectionsLists( aNamesList, aTypesList, aClosuresList );
-
- TCollection_ExtendedString aSectName = theName.c_str();
- if ( aSectName.Length() <= 0 )
- aSectName = getUniqueSectionName( aNamesList );
-
- aNamesList->Append( aSectName );
- aTypesList->Append( theType );
- aClosuresList->Append( theIsClosed );
-
- int aSectId = aNamesList->Extent() - 1;
-
- // Just to create empty data
- Handle(TDataStd_RealList) aListX, aListY;
- getPointsLists( aSectId, aListX, aListY );
-
- if ( !anIsOperation )
- commitOperation();
-
- return aSectId;
-}
-
-bool HYDROData_PolylineXY::removeSection( const int theISection )
-{
- Handle(TDataStd_ExtStringList) aNamesList;
- Handle(TDataStd_IntegerList) aTypesList;
- Handle(TDataStd_BooleanList) aClosuresList;
- getSectionsLists( aNamesList, aTypesList, aClosuresList, false );
- if ( aNamesList.IsNull() || aNamesList->IsEmpty() )
- return false;
-
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
-
- if ( aNamesList->Extent() == 1 )
- {
- removeSectionsLists();
- removePointsLists();
- }
- else
- {
- TDataStd_ListOfExtendedString anOldNamesList;
- anOldNamesList = aNamesList->List();
-
- TColStd_ListOfInteger anOldTypesList;
- anOldTypesList = aTypesList->List();
-
- TDataStd_ListOfByte anOldClosuresList;
- anOldClosuresList = aClosuresList->List();
-
- // Refill the existing lists
- aNamesList->Clear();
- aTypesList->Clear();
- aClosuresList->Clear();
-
- TDataStd_ListIteratorOfListOfExtendedString aNamesIter( anOldNamesList );
- TColStd_ListIteratorOfListOfInteger aTypesIter( anOldTypesList );
- TDataStd_ListIteratorOfListOfByte aClosuresIter( anOldClosuresList );
- for ( int i = 0; aNamesIter.More() && aTypesIter.More() && aClosuresIter.More();
- aNamesIter.Next(), aTypesIter.Next(), aClosuresIter.Next(), ++i )
- {
- if ( i == theISection )
- continue; // skip index to remove
-
- aNamesList->Append( aNamesIter.Value() );
- aTypesList->Append( aTypesIter.Value() );
- aClosuresList->Append( (bool)aClosuresIter.Value() );
- }
-
- // Remove points that belong to removed section
- removePointsLists( theISection );
- }
-
- if ( !anIsOperation )
- commitOperation();
-
- return true;
-}
-
-bool HYDROData_PolylineXY::isClosed( const int theISection ) const
-{
- Handle(TDataStd_ExtStringList) aNamesList;
- Handle(TDataStd_IntegerList) aTypesList;
- Handle(TDataStd_BooleanList) aClosuresList;
- getSectionsLists( aNamesList, aTypesList, aClosuresList, false );
- if ( aNamesList.IsNull() || theISection >= aNamesList->Extent() )
- return false;
-
- TDataStd_ListIteratorOfListOfByte aClosuresIter( aClosuresList->List() );
- for ( int i = 0; aClosuresIter.More() && i != theISection; aClosuresIter.Next(), ++i );
-
- return aClosuresIter.More() ? (bool)aClosuresIter.Value() : false;
-}
-
-bool HYDROData_PolylineXY::setClosed( const int theISection,
- const bool theIsClosed )
-{
- Handle(TDataStd_ExtStringList) aNamesList;
- Handle(TDataStd_IntegerList) aTypesList;
- Handle(TDataStd_BooleanList) aClosuresList;
- getSectionsLists( aNamesList, aTypesList, aClosuresList, false );
- if ( aNamesList.IsNull() || theISection >= aNamesList->Extent() )
- return false;
-
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
-
- TDataStd_ListOfByte anOldClosuresList;
- anOldClosuresList = aClosuresList->List();
-
- // Refill the existing list
- aClosuresList->Clear();
-
- TDataStd_ListIteratorOfListOfByte aClosuresIter( anOldClosuresList );
- for ( int i = 0; aClosuresIter.More(); aClosuresIter.Next(), ++i )
- aClosuresList->Append( i == theISection ? theIsClosed : (bool)aClosuresIter.Value() );
-
- if ( !anIsOperation )
- commitOperation();
-
- return true;
+ return TopoDS_Wire();
}
-std::string HYDROData_PolylineXY::getSectionName( const int theISection ) const
+int HYDROData_PolylineXY::NbSections() const
{
- Handle(TDataStd_ExtStringList) aNamesList;
- Handle(TDataStd_IntegerList) aTypesList;
- Handle(TDataStd_BooleanList) aClosuresList;
- getSectionsLists( aNamesList, aTypesList, aClosuresList, false );
- if ( aNamesList.IsNull() || theISection >= aNamesList->Extent() )
- return "";
-
- TDataStd_ListIteratorOfListOfExtendedString aNamesIter( aNamesList->List() );
- for ( int i = 0; aNamesIter.More() && i != theISection; aNamesIter.Next(), ++i );
-
- TCollection_AsciiString aResName;
- if ( aNamesIter.More() )
- aResName = aNamesIter.Value();
-
- return aResName.ToCString();
+ return 1;
}
-bool HYDROData_PolylineXY::setSectionName( const int theISection,
- const std::string& theName )
+void HYDROData_PolylineXY::AddSection( const bool /*theIsClosed*/ )
{
- Handle(TDataStd_ExtStringList) aNamesList;
- Handle(TDataStd_IntegerList) aTypesList;
- Handle(TDataStd_BooleanList) aClosuresList;
- getSectionsLists( aNamesList, aTypesList, aClosuresList, false );
- if ( aNamesList.IsNull() || theISection >= aNamesList->Extent() )
- return false;
-
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
-
- TDataStd_ListOfExtendedString anOldNamesList;
- anOldNamesList = aNamesList->List();
-
- // Refill the existing list
- aNamesList->Clear();
-
- TDataStd_ListIteratorOfListOfExtendedString aNamesIter( aNamesList->List() );
- for ( int i = 0; aNamesIter.More(); aNamesIter.Next(), ++i )
- aNamesList->Append( i == theISection ? theName.c_str() : aNamesIter.Value() );
-
- if ( !anIsOperation )
- commitOperation();
-
- return true;
}
-CurveCreator::SectionType HYDROData_PolylineXY::getSectionType( const int theISection ) const
+bool HYDROData_PolylineXY::IsClosedSection( const int /*theSectionIndex*/ ) const
{
- Handle(TDataStd_ExtStringList) aNamesList;
- Handle(TDataStd_IntegerList) aTypesList;
- Handle(TDataStd_BooleanList) aClosuresList;
- getSectionsLists( aNamesList, aTypesList, aClosuresList, false );
- if ( aNamesList.IsNull() || theISection >= aNamesList->Extent() )
- return CurveCreator::Polyline;
-
- TColStd_ListIteratorOfListOfInteger aTypesIter( aTypesList->List() );
- for ( int i = 0; aTypesIter.More() && i != theISection; aTypesIter.Next(), ++i );
-
- return aTypesIter.More() ? (CurveCreator::SectionType)aTypesIter.Value() : CurveCreator::Polyline;
+ return false;
}
-bool HYDROData_PolylineXY::setSectionType( const int theISection,
- const CurveCreator::SectionType theType )
+void HYDROData_PolylineXY::RemoveSection( const int /*theSectionIndex*/ )
{
- Handle(TDataStd_ExtStringList) aNamesList;
- Handle(TDataStd_IntegerList) aTypesList;
- Handle(TDataStd_BooleanList) aClosuresList;
- getSectionsLists( aNamesList, aTypesList, aClosuresList, false );
- if ( aNamesList.IsNull() || theISection >= aNamesList->Extent() )
- return false;
-
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
-
- TColStd_ListOfInteger anOldTypesList;
- anOldTypesList = aTypesList->List();
-
- // Refill the existing list
- aTypesList->Clear();
-
- TColStd_ListIteratorOfListOfInteger aTypesIter( anOldTypesList );
- for ( int i = 0; aTypesIter.More(); aTypesIter.Next(), ++i )
- aTypesList->Append( i == theISection ? theType : aTypesIter.Value() );
-
- if ( !anIsOperation )
- commitOperation();
-
- return true;
+ RemoveSections();
}
-void addPointsToLists( const CurveCreator::Coordinates& theCoords,
- Handle(TDataStd_RealList)& theListX,
- Handle(TDataStd_RealList)& theListY,
- const bool theIsAppend )
+void HYDROData_PolylineXY::RemoveSections()
{
- CurveCreator::Coordinates::const_iterator aBegIter = theCoords.begin();
- CurveCreator::Coordinates::const_iterator anEndIter = theCoords.end();
- while ( aBegIter != anEndIter )
- {
- const CurveCreator::TypeCoord& aCoordX = *aBegIter++;
- if ( aBegIter == anEndIter )
- break;
-
- const CurveCreator::TypeCoord& aCoordY = *aBegIter++;
-
- if ( theIsAppend )
- {
- theListX->Append( aCoordX );
- theListY->Append( aCoordY );
- }
- else
- {
- theListX->Prepend( aCoordX );
- theListY->Prepend( aCoordY );
- }
- }
+ removePointsLists( 0 );
}
-bool HYDROData_PolylineXY::addPoints( const CurveCreator::Coordinates& theCoords,
- const int theISection,
- const int theIPnt )
+void HYDROData_PolylineXY::AddPoint( const int /*theSectionIndex*/,
+ const Point& thePoint,
+ const int thePointIndex )
{
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
+ double aNewCoordU = thePoint.X();
+ double aNewCoordZ = thePoint.Y();
- Handle(TDataStd_RealList) aListX, aListY;
- getPointsLists( theISection, aListX, aListY );
+ Handle(TDataStd_RealList) aListU, aListZ;
+ getPointsLists( 0, aListU, aListZ );
- if ( theIPnt < 0 || theIPnt >= aListX->Extent() )
+ if ( aListU->IsEmpty() || aNewCoordU > aListU->Last() )
{
- addPointsToLists( theCoords, aListX, aListY, true );
+ aListU->Append( aNewCoordU );
+ aListZ->Append( aNewCoordZ );
+ return;
}
- else
+ else if ( aNewCoordU < aListU->First() )
{
- TColStd_ListOfReal anOldListX;
- anOldListX = aListX->List();
-
- TColStd_ListOfReal anOldListY;
- anOldListY = aListY->List();
-
- // Refill the existing lists
- aListX->Clear();
- aListY->Clear();
-
- TColStd_ListIteratorOfListOfReal anIterX( anOldListX );
- TColStd_ListIteratorOfListOfReal anIterY( anOldListY );
- for ( int i = 0; anIterX.More() && anIterY.More(); anIterX.Next(), anIterY.Next(), ++i )
- {
- double aCoordX = anIterX.Value();
- double aCoordY = anIterY.Value();
-
- if ( i == theIPnt )
- {
- // Insert our new points
- addPointsToLists( theCoords, aListX, aListY, true );
- }
-
- aListX->Append( aCoordX );
- aListY->Append( aCoordY );
- }
+ aListU->Prepend( aNewCoordU );
+ aListZ->Prepend( aNewCoordZ );
+ return;
}
- if ( !anIsOperation )
- commitOperation();
+ TColStd_ListOfReal anOldListU;
+ anOldListU = aListU->List();
- return true;
-}
-
-bool HYDROData_PolylineXY::setPoint( const int theISection,
- const int theIPnt,
- const CurveCreator::Coordinates& theCoords )
-{
- if ( theCoords.size() < 2 )
- return false;
+ TColStd_ListOfReal anOldListZ;
+ anOldListZ = aListZ->List();
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
+ // Crsat new lists
+ removePointsLists( 0 );
+ getPointsLists( 0, aListU, aListZ );
- Handle(TDataStd_RealList) aListX, aListY;
- getPointsLists( theISection, aListX, aListY );
-
- if ( theIPnt < 0 )
- {
- addPointsToLists( theCoords, aListX, aListY, false );
- }
- else if ( theIPnt >= aListX->Extent() )
- {
- addPointsToLists( theCoords, aListX, aListY, true );
- }
- else
+ bool anIsInserted = false;
+ TColStd_ListIteratorOfListOfReal anIterU( anOldListU );
+ TColStd_ListIteratorOfListOfReal anIterZ( anOldListZ );
+ for ( ; anIterU.More() && anIterZ.More(); anIterU.Next(), anIterZ.Next() )
{
- CurveCreator::Coordinates::const_iterator aBegIter = theCoords.begin();
- const CurveCreator::TypeCoord& aNewCoordX = *aBegIter++;
- const CurveCreator::TypeCoord& aNewCoordY = *aBegIter++;
-
- TColStd_ListOfReal anOldListX;
- anOldListX = aListX->List();
-
- TColStd_ListOfReal anOldListY;
- anOldListY = aListY->List();
+ double aCoordU = anIterU.Value();
+ double aCoordZ = anIterZ.Value();
- // Refill the existing lists
- aListX->Clear();
- aListY->Clear();
-
- TColStd_ListIteratorOfListOfReal anIterX( anOldListX );
- TColStd_ListIteratorOfListOfReal anIterY( anOldListY );
- for ( int i = 0; anIterX.More() && anIterY.More(); anIterX.Next(), anIterY.Next(), ++i )
+ if ( !anIsInserted )
{
- double aCoordX = anIterX.Value();
- double aCoordY = anIterY.Value();
-
- if ( i == theIPnt )
+ if ( ValuesEquals( aNewCoordU, aCoordU ) )
{
- // Insert our new points instead of old one
- aCoordX = aNewCoordX;
- aCoordY = aNewCoordY;
+ // Just update Z value
+ aCoordZ = aNewCoordZ;
+ anIsInserted = true;
+ }
+ else if ( aNewCoordU < aCoordU )
+ {
+ // Insert new point
+ aListU->Append( aNewCoordU );
+ aListZ->Append( aNewCoordZ );
+ anIsInserted = true;
}
-
- aListX->Append( aCoordX );
- aListY->Append( aCoordY );
}
- }
-
- if ( !anIsOperation )
- commitOperation();
- return true;
+ aListU->Append( aCoordU );
+ aListZ->Append( aCoordZ );
+ }
}
-//! Set coordinates of specified points from different sections
-bool HYDROData_PolylineXY::setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords)
+void HYDROData_PolylineXY::SetPoint( const int theSectionIndex,
+ const int /*thePointIndex*/,
+ const Point& thePoint )
{
- return false;
+ AddPoint( theSectionIndex, thePoint );
}
-bool HYDROData_PolylineXY::removePoint( const int theISection,
- const int theIPnt )
+void HYDROData_PolylineXY::RemovePoint( const int /*theSectionIndex*/,
+ const int thePointIndex )
{
- Handle(TDataStd_RealList) aListX, aListY;
- getPointsLists( theISection, aListX, aListY, false );
- if ( aListX.IsNull() || aListY.IsNull() || aListX->IsEmpty() )
- return false;
-
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
+ Handle(TDataStd_RealList) aListU, aListZ;
+ getPointsLists( 0, aListU, aListZ, false );
+ if ( aListU.IsNull() || aListZ.IsNull() || aListU->IsEmpty() )
+ return;
- if ( aListX->Extent() == 1 )
- {
- removePointsLists( theISection );
- }
- else
- {
- TColStd_ListOfReal anOldListX;
- anOldListX = aListX->List();
+ TColStd_ListOfReal anOldListU;
+ anOldListU = aListU->List();
- TColStd_ListOfReal anOldListY;
- anOldListY = aListY->List();
+ TColStd_ListOfReal anOldListZ;
+ anOldListZ = aListZ->List();
- // Refill the existing lists
- aListX->Clear();
- aListY->Clear();
+ // Creat new lists
+ removePointsLists( 0 );
+ getPointsLists( 0, aListU, aListZ );
- TColStd_ListIteratorOfListOfReal anIterX( anOldListX );
- TColStd_ListIteratorOfListOfReal anIterY( anOldListY );
- for ( int i = 0; anIterX.More() && anIterY.More(); anIterX.Next(), anIterY.Next(), ++i )
- {
- if ( i == theIPnt )
- continue; // skip index to remove
+ bool anIsInserted = false;
+ TColStd_ListIteratorOfListOfReal anIterU( anOldListU );
+ TColStd_ListIteratorOfListOfReal anIterZ( anOldListZ );
+ for ( int i = 0; anIterU.More() && anIterZ.More(); anIterU.Next(), anIterZ.Next(), ++i )
+ {
+ if ( i == thePointIndex )
+ continue; // skip index to remove
- aListX->Append( anIterX.Value() );
- aListY->Append( anIterY.Value() );
- }
+ aListU->Append( anIterU.Value() );
+ aListZ->Append( anIterZ.Value() );
}
-
- if ( !anIsOperation )
- commitOperation();
-
- return true;
}
-//! Remove several points from different sections with given ids
-bool HYDROData_PolylineXY::removeSeveralPoints( const SectionToPointList &theSectionToPntIDs)
+HYDROData_PolylineXY::PointsList HYDROData_PolylineXY::GetPoints( const int /*theSectionIndex*/ ) const
{
- return false;
-}
+ PointsList aResList;
-CurveCreator::Coordinates HYDROData_PolylineXY::getPoints( const int theISection ) const
-{
- CurveCreator::Coordinates aResList;
+ Handle(TDataStd_RealList) aListU, aListZ;
+ getPointsLists( 0, aListU, aListZ, false );
+ if ( aListU.IsNull() || aListZ.IsNull() )
+ return aResList;
- if ( theISection < 0 )
- {
- int aNbSections = getNbSections();
- for ( int i = 0; i < aNbSections; ++i )
- {
- CurveCreator::Coordinates aSectCoords = getPoints( i );
- aResList.insert( aResList.end(), aSectCoords.begin(), aSectCoords.end());
- }
- }
- else
+ TColStd_ListIteratorOfListOfReal anIterU( aListU->List() );
+ TColStd_ListIteratorOfListOfReal anIterZ( aListZ->List() );
+ for ( ; anIterU.More() && anIterZ.More(); anIterU.Next(), anIterZ.Next() )
{
- Handle(TDataStd_RealList) aListX, aListY;
- getPointsLists( theISection, aListX, aListY, false );
- if ( !aListX.IsNull() && !aListY.IsNull() )
- {
- TColStd_ListIteratorOfListOfReal anIterX( aListX->List() );
- TColStd_ListIteratorOfListOfReal anIterY( aListY->List() );
- for ( ; anIterX.More() && anIterY.More(); anIterX.Next(), anIterY.Next() )
- {
- const double& aCoordX = anIterX.Value();
- const double& aCoordY = anIterY.Value();
-
- aResList.push_back( aCoordX );
- aResList.push_back( aCoordY );
- }
- }
+ Point aPoint( anIterU.Value(), anIterZ.Value() );
+ aResList.Append( aPoint );
}
return aResList;
public:
- // Implementation of IPolyline interface
-
/**
* Returns the 3D presentation of all points.
*/
- HYDRODATA_EXPORT virtual ListAISObjects constructWire() const;
-
-public:
-
- // Implementation of ICurve interface
-
-
- /***********************************************/
- /*** Section methods ***/
- /***********************************************/
+ HYDRODATA_EXPORT virtual TopoDS_Wire GetWire() const;
- //! Clear the polyline (remove all sections)
- HYDRODATA_EXPORT virtual bool clear();
-
- //! Join range of sections to one section (join all sections if -1 is passed in one of arguments)
- HYDRODATA_EXPORT virtual bool join( const int theISectionTo = -1,
- const int theISectionFrom = -1 );
-
- //! Get number of sections
- HYDRODATA_EXPORT virtual int getNbSections() const;
-
- //! Add a new section.
- HYDRODATA_EXPORT virtual int addSection( const std::string& theName,
- const CurveCreator::SectionType theType,
- const bool theIsClosed );
-
- //! Removes the given section.
- HYDRODATA_EXPORT virtual bool removeSection( const int theISection );
-
- //! Get "closed" flag of the specified section
- HYDRODATA_EXPORT virtual bool isClosed( const int theISection ) const;
/**
- * Set "closed" flag of the specified section (all sections if
- * \a theISection is -1).
+ * Returns number of sections.
*/
- HYDRODATA_EXPORT virtual bool setClosed( const int theISection,
- const bool theIsClosed );
-
- //! Returns specifyed section name
- HYDRODATA_EXPORT virtual std::string getSectionName( const int theISection ) const;
+ HYDRODATA_EXPORT virtual int NbSections() const;
- /** Set name of the specified section */
- HYDRODATA_EXPORT virtual bool setSectionName( const int theISection,
- const std::string& theName );
+ /**
+ * Adds new one section.
+ * \param theIsClosed flag indicates type of polyline
+ */
+ HYDRODATA_EXPORT virtual void AddSection( const bool theIsClosed );
- //! Get type of the specified section
- HYDRODATA_EXPORT virtual CurveCreator::SectionType getSectionType( const int theISection ) const;
+ /**
+ * Returns true if section with given index is closed.
+ * \param theSectionIndex index of section
+ */
+ HYDRODATA_EXPORT virtual bool IsClosedSection( const int theSectionIndex ) const;
/**
- * Set type of the specified section (or all sections
- * if \a theISection is -1).
+ * Removes section with given index.
+ * \param theSectionIndex index of section
*/
- HYDRODATA_EXPORT virtual bool setSectionType( const int theISection,
- const CurveCreator::SectionType theType );
+ HYDRODATA_EXPORT virtual void RemoveSection( const int theSectionIndex );
+ /**
+ * Removes all sections.
+ */
+ HYDRODATA_EXPORT virtual void RemoveSections();
- /***********************************************/
- /*** Point methods ***/
- /***********************************************/
/**
- * Insert one or several points to the specified section starting from the given theIPnt index
- * (or add these at the end of section points if \a theIPnt is -1).
+ * Adds new point for section with index "theSectionIndex".
+ * \param theSectionIndex index of section
+ * \param thePoint point to add
+ * \param theBeforeIndex if not equal -1 then insert point in this pos
*/
- HYDRODATA_EXPORT virtual bool addPoints( const CurveCreator::Coordinates& theCoords,
- const int theISection,
- const int theIPnt = -1 );
+ HYDRODATA_EXPORT virtual void AddPoint( const int theSectionIndex,
+ const Point& thePoint,
+ const int thePointIndex = -1 );
- //! Set coordinates of specified point
- HYDRODATA_EXPORT virtual bool setPoint( const int theISection,
- const int theIPnt,
- const CurveCreator::Coordinates& theCoords );
-
- //! Set coordinates of specified points from different sections
- HYDRODATA_EXPORT virtual bool setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords);
+ /**
+ * Replaces point for section with index "theSectionIndex".
+ * \param theSectionIndex index of section
+ * \param thePointIndex index of point to replace
+ * \param thePoint new point
+ */
+ HYDRODATA_EXPORT virtual void SetPoint( const int theSectionIndex,
+ const int thePointIndex,
+ const Point& thePoint );
- //! Remove point with given id
- HYDRODATA_EXPORT virtual bool removePoint( const int theISection, const int theIPnt = -1 );
+ /**
+ * Removes point from section with index "theSectionIndex".
+ * \param theSectionIndex index of section
+ * \param thePointIndex index of point
+ */
+ HYDRODATA_EXPORT virtual void RemovePoint( const int theSectionIndex,
+ const int thePointIndex );
- //! Remove several points from different sections with given ids
- HYDRODATA_EXPORT virtual bool removeSeveralPoints( const SectionToPointList &theSectionToPntIDs);
/**
- * Get points of a section (the total points in Curve if theISection is equal to -1)..
+ * Returns list of points.
+ * \param theSectionIndex if not equal -1 then list of points returned
+ * only for section with this index
+ * \return list of points
*/
- HYDRODATA_EXPORT virtual CurveCreator::Coordinates getPoints( const int theISection = -1 ) const;
+ HYDRODATA_EXPORT virtual PointsList GetPoints( const int theSectionIndex = -1 ) const;
protected:
int HYDROData_Profile::NbPoints() const
{
Handle(HYDROData_ProfileUZ) aProfileUZ = GetProfileUZ( false );
- return aProfileUZ.IsNull() ? 0 : aProfileUZ->getNbPoints();
+ return aProfileUZ.IsNull() ? 0 : aProfileUZ->NbPoints();
}
void HYDROData_Profile::RemovePoints()
{
Handle(HYDROData_ProfileUZ) aProfileUZ = GetProfileUZ( false );
if ( !aProfileUZ.IsNull() )
- aProfileUZ->clear();
+ aProfileUZ->RemoveSections();
}
-void HYDROData_Profile::SetParametricPoints( const CurveCreator::Coordinates& theCoords )
+void HYDROData_Profile::SetParametricPoints( const HYDROData_ProfileUZ::PointsList& thePoints )
{
RemovePoints();
Handle(HYDROData_ProfileUZ) aProfileUZ = GetProfileUZ();
-
- CurveCreator::Coordinates::const_iterator aBegIter = theCoords.begin();
- CurveCreator::Coordinates::const_iterator anEndIter = theCoords.end();
- while ( aBegIter != anEndIter )
+ for ( int i = 1, n = thePoints.Length(); i <= n ; ++i )
{
- const CurveCreator::TypeCoord& aCoordX = *aBegIter++;
- if ( aBegIter == anEndIter )
- break;
-
- const CurveCreator::TypeCoord& aCoordY = *aBegIter++;
-
- aProfileUZ->addPoint( aCoordX, aCoordY, 0 );
+ const HYDROData_ProfileUZ::Point& aPoint = thePoints.Value( i );
+ aProfileUZ->AddPoint( 0, aPoint );
}
}
-CurveCreator::Coordinates HYDROData_Profile::GetParametricPoints() const
+HYDROData_ProfileUZ::PointsList HYDROData_Profile::GetParametricPoints() const
{
Handle(HYDROData_ProfileUZ) aProfileUZ = GetProfileUZ( false );
- return aProfileUZ.IsNull() ? CurveCreator::Coordinates() : aProfileUZ->getPoints();
+ return aProfileUZ.IsNull() ? HYDROData_ProfileUZ::PointsList() : aProfileUZ->GetPoints();
}
void HYDROData_Profile::SetProfilePoints( const ProfilePoints& thePoints )
double aDistance = gp_Pnt2d( aFirstPoint ).Distance( aPointXY );
- aProfileUZ->addPoint( 0, aDistance, aPoint.Z() );
+ HYDROData_ProfileUZ::Point aParPoint( aDistance, aPoint.Z() );
+ aProfileUZ->AddPoint( 0, aParPoint );
}
SetFirstPoint( aFirstPoint );
if ( !GetFirstPoint( aFirstPoint ) || !GetLastPoint( aLastPoint ) )
return aResPoints;
- CurveCreator::Coordinates aParametricPoints = GetParametricPoints();
- if ( aParametricPoints.size() < 4 )
+ HYDROData_ProfileUZ::PointsList aParametricPoints = GetParametricPoints();
+ if ( aParametricPoints.Length() < 2 )
return aResPoints;
- CurveCreator::Coordinates::const_iterator aBegIter = aParametricPoints.begin();
- CurveCreator::Coordinates::const_iterator anEndIter = aParametricPoints.end()--;
-
- gp_Pnt2d aFirstParPoint( *aBegIter++, *aBegIter++ );
- gp_Pnt2d aLastParPoint( *anEndIter--, *anEndIter );
+ const HYDROData_ProfileUZ::Point& aFirstParPoint = aParametricPoints.First();
+ const HYDROData_ProfileUZ::Point& aLastParPoint = aParametricPoints.Last();
double aGeoDistance = gp_Pnt2d( aFirstPoint ).Distance( aLastPoint );
double aParCommonDist = gp_Pnt2d( aFirstParPoint.X(), 0 ).Distance( gp_Pnt2d( aLastParPoint.X(), 0 ) );
aResPoints.Append( ProfilePoint( aFirstPoint.X(), aFirstPoint.Y(), aFirstParPoint.Y() ) );
// Compute all other points
- while ( aBegIter != anEndIter )
+ for ( int i = 2, n = aParametricPoints.Length(); i < n ; ++i )
{
- const CurveCreator::TypeCoord& aCoordU = *aBegIter++;
- if ( aBegIter == anEndIter )
- break;
+ const HYDROData_ProfileUZ::Point& aParPoint = aParametricPoints.Value( i );
- double aParPointDist = gp_Pnt2d( aFirstParPoint.X(), 0 ).Distance( gp_Pnt2d( aCoordU, 0 ) );
+ double aParPointDist = gp_Pnt2d( aFirstParPoint.X(), 0 ).Distance( gp_Pnt2d( aParPoint.X(), 0 ) );
double aParLen = ( aParPointDist / aParCommonDist ) * aGeoDistance;
double aParX = ( aFirstPoint.X() + aRatio * aLastPoint.X() ) / ( 1 + aRatio );
double aParY = ( aFirstPoint.Y() + aRatio * aLastPoint.Y() ) / ( 1 + aRatio );
-
- const CurveCreator::TypeCoord& aCoordZ = *aBegIter++;
-
- ProfilePoint aCompPoint( aParX, aParY, aCoordZ );
+ ProfilePoint aCompPoint( aParX, aParY, aParPoint.Y() );
aResPoints.Append( aCompPoint );
}
bool anIsParametric = false;
bool anIsGeoref = false;
- CurveCreator::Coordinates aPointsUZ;
- ProfilePoints aPointsXYZ;
+ HYDROData_ProfileUZ::PointsList aPointsUZ;
+ ProfilePoints aPointsXYZ;
double aPrevVal = -DBL_MAX;
while ( !theFile.IsAtEnd() )
break;
}
- aPointsUZ.push_back( aCoordX );
- aPointsUZ.push_back( aCoordY );
+ HYDROData_ProfileUZ::Point aPoint( aCoordX, aCoordY );
+ aPointsUZ.Append( aPoint );
aPrevVal = aCoordX;
}
}
}
- aRes = aRes && ( anIsParametric && !aPointsUZ.empty() ||
+ aRes = aRes && ( anIsParametric && !aPointsUZ.IsEmpty() ||
anIsGeoref && !aPointsXYZ.IsEmpty() );
if ( aRes )
{
DEFINE_STANDARD_HANDLE(HYDROData_Profile, HYDROData_Object)
-class gp_XY;
class gp_XYZ;
class OSD_File;
class Handle(HYDROData_Document);
* Replace current profile parametric points by new one.
* \param thePoints the list with new points in parametric form
*/
- HYDRODATA_EXPORT void SetParametricPoints( const CurveCreator::Coordinates& theCoords );
+ HYDRODATA_EXPORT void SetParametricPoints( const HYDROData_ProfileUZ::PointsList& thePoints );
/**
* Returns profile points in parametric form.
* \return points list
*/
- HYDRODATA_EXPORT CurveCreator::Coordinates GetParametricPoints() const;
+ HYDRODATA_EXPORT HYDROData_ProfileUZ::PointsList GetParametricPoints() const;
/**
* Imports Profile data from parametric file.
*/
bool importParametricFile( OSD_File& theFile,
- CurveCreator::Coordinates& thePoints );
+ HYDROData_ProfileUZ::PointsList& thePoints );
/**
* Imports Profile data from Georeferenced file.
{
}
-CurveCreator_ICurve::ListAISObjects HYDROData_ProfileUZ::constructWire() const
+TopoDS_Wire HYDROData_ProfileUZ::GetWire() const
{
// TODO
- ListAISObjects aProfileObjects;
- return aProfileObjects;
+ return TopoDS_Wire();
}
-bool HYDROData_ProfileUZ::clear()
-{
- removePointsLists();
- return true;
-}
-
-bool HYDROData_ProfileUZ::join( const int theISectionTo,
- const int theISectionFrom )
-{
- return false;
-}
-
-int HYDROData_ProfileUZ::getNbSections() const
+int HYDROData_ProfileUZ::NbSections() const
{
return 1;
}
-int HYDROData_ProfileUZ::addSection( const std::string& theName,
- const CurveCreator::SectionType theType,
- const bool theIsClosed )
-{
- return 0;
-}
-
-bool HYDROData_ProfileUZ::removeSection( const int theISection )
+void HYDROData_ProfileUZ::AddSection( const bool /*theIsClosed*/ )
{
- return clear();
}
-bool HYDROData_ProfileUZ::isClosed( const int theISection ) const
+bool HYDROData_ProfileUZ::IsClosedSection( const int /*theSectionIndex*/ ) const
{
return false;
}
-bool HYDROData_ProfileUZ::setClosed( const int theISection,
- const bool theIsClosed )
+void HYDROData_ProfileUZ::RemoveSection( const int /*theSectionIndex*/ )
{
- return false;
+ RemoveSections();
}
-std::string HYDROData_ProfileUZ::getSectionName( const int theISection ) const
+void HYDROData_ProfileUZ::RemoveSections()
{
- return "Section_1";
+ removePointsLists( 0 );
}
-bool HYDROData_ProfileUZ::setSectionName( const int theISection,
- const std::string& theName )
+void HYDROData_ProfileUZ::AddPoint( const int /*theSectionIndex*/,
+ const Point& thePoint,
+ const int thePointIndex )
{
- return false;
-}
-
-CurveCreator::SectionType HYDROData_ProfileUZ::getSectionType( const int theISection ) const
-{
- return CurveCreator::Polyline;
-}
-
-bool HYDROData_ProfileUZ::setSectionType( const int theISection,
- const CurveCreator::SectionType theType )
-{
- return false;
-}
-
-bool HYDROData_ProfileUZ::addPoints( const CurveCreator::Coordinates& theCoords,
- const int theISection,
- const int theIPnt )
-{
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
-
- bool aRes = true;
-
- int anAfterPnt = theIPnt;
-
- CurveCreator::Coordinates::const_iterator aBegIter = theCoords.begin();
- CurveCreator::Coordinates::const_iterator anEndIter = theCoords.end();
- while ( aBegIter != anEndIter )
- {
- const CurveCreator::TypeCoord& aCoordX = *aBegIter++;
- if ( aBegIter == anEndIter )
- break;
-
- const CurveCreator::TypeCoord& aCoordY = *aBegIter++;
-
- aRes = addPoint( aCoordX, aCoordY, theISection, anAfterPnt ) && aRes;
-
- if ( anAfterPnt != -1 )
- ++anAfterPnt;
- }
-
- if ( !anIsOperation )
- commitOperation();
-
- return aRes;
-}
-
-bool HYDROData_ProfileUZ::addPoint( const CurveCreator::TypeCoord& theCoordX,
- const CurveCreator::TypeCoord& theCoordY,
- const int theISection,
- const int theIPnt )
-{
- CurveCreator::TypeCoord aNewCoordU = theCoordX;
- CurveCreator::TypeCoord aNewCoordZ = theCoordY;
+ double aNewCoordU = thePoint.X();
+ double aNewCoordZ = thePoint.Y();
Handle(TDataStd_RealList) aListU, aListZ;
getPointsLists( 0, aListU, aListZ );
{
aListU->Append( aNewCoordU );
aListZ->Append( aNewCoordZ );
+ return;
}
else if ( aNewCoordU < aListU->First() )
{
aListU->Prepend( aNewCoordU );
aListZ->Prepend( aNewCoordZ );
+ return;
}
- else
- {
- TColStd_ListOfReal anOldListU;
- anOldListU = aListU->List();
- TColStd_ListOfReal anOldListZ;
- anOldListZ = aListZ->List();
+ TColStd_ListOfReal anOldListU;
+ anOldListU = aListU->List();
- // Refill the existing lists
- aListU->Clear();
- aListZ->Clear();
+ TColStd_ListOfReal anOldListZ;
+ anOldListZ = aListZ->List();
- bool anIsInserted = false;
- TColStd_ListIteratorOfListOfReal anIterU( anOldListU );
- TColStd_ListIteratorOfListOfReal anIterZ( anOldListZ );
- for ( ; anIterU.More() && anIterZ.More(); anIterU.Next(), anIterZ.Next() )
- {
- double aCoordU = anIterU.Value();
- double aCoordZ = anIterZ.Value();
+ // Crsat new lists
+ removePointsLists( 0 );
+ getPointsLists( 0, aListU, aListZ );
+
+ bool anIsInserted = false;
+ TColStd_ListIteratorOfListOfReal anIterU( anOldListU );
+ TColStd_ListIteratorOfListOfReal anIterZ( anOldListZ );
+ for ( ; anIterU.More() && anIterZ.More(); anIterU.Next(), anIterZ.Next() )
+ {
+ double aCoordU = anIterU.Value();
+ double aCoordZ = anIterZ.Value();
- if ( !anIsInserted )
+ if ( !anIsInserted )
+ {
+ if ( ValuesEquals( aNewCoordU, aCoordU ) )
{
- if ( ValuesEquals( aNewCoordU, aCoordU ) )
- {
- // Just update Z value
- aCoordZ = aNewCoordZ;
- anIsInserted = true;
- }
- else if ( aNewCoordU < aCoordU )
- {
- // Insert new point
- aListU->Append( aNewCoordU );
- aListZ->Append( aNewCoordZ );
- anIsInserted = true;
- }
+ // Just update Z value
+ aCoordZ = aNewCoordZ;
+ anIsInserted = true;
+ }
+ else if ( aNewCoordU < aCoordU )
+ {
+ // Insert new point
+ aListU->Append( aNewCoordU );
+ aListZ->Append( aNewCoordZ );
+ anIsInserted = true;
}
-
- aListU->Append( aCoordU );
- aListZ->Append( aCoordZ );
}
+
+ aListU->Append( aCoordU );
+ aListZ->Append( aCoordZ );
}
+}
- return true;
+void HYDROData_ProfileUZ::SetPoint( const int theSectionIndex,
+ const int /*thePointIndex*/,
+ const Point& thePoint )
+{
+ AddPoint( theSectionIndex, thePoint );
}
-bool HYDROData_ProfileUZ::removePoint( const int /*theISection*/,
- const int theIPnt )
+void HYDROData_ProfileUZ::RemovePoint( const int /*theSectionIndex*/,
+ const int thePointIndex )
{
Handle(TDataStd_RealList) aListU, aListZ;
getPointsLists( 0, aListU, aListZ, false );
- if ( aListU.IsNull() || aListZ.IsNull() ||
- theIPnt < 0 || theIPnt >= aListU->Extent() )
- return false;
-
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
+ if ( aListU.IsNull() || aListZ.IsNull() || aListU->IsEmpty() )
+ return;
TColStd_ListOfReal anOldListU;
anOldListU = aListU->List();
TColStd_ListOfReal anOldListZ;
anOldListZ = aListZ->List();
- // Refill the existing lists
- aListU->Clear();
- aListZ->Clear();
+ // Creat new lists
+ removePointsLists( 0 );
+ getPointsLists( 0, aListU, aListZ );
+ bool anIsInserted = false;
TColStd_ListIteratorOfListOfReal anIterU( anOldListU );
TColStd_ListIteratorOfListOfReal anIterZ( anOldListZ );
for ( int i = 0; anIterU.More() && anIterZ.More(); anIterU.Next(), anIterZ.Next(), ++i )
{
- if ( i == theIPnt )
+ if ( i == thePointIndex )
continue; // skip index to remove
aListU->Append( anIterU.Value() );
aListZ->Append( anIterZ.Value() );
}
-
- if ( !anIsOperation )
- commitOperation();
-
- return true;
-}
-
-//! Remove several points from different sections with given ids
-bool HYDROData_ProfileUZ::removeSeveralPoints( const SectionToPointList &theSectionToPntIDs)
-{
- return false;
-}
-
-bool HYDROData_ProfileUZ::setPoint( const int /*theISection*/,
- const int theIPoint,
- const CurveCreator::Coordinates& theNewCoords )
-{
- bool anIsOperation = myIsOperation;
- if ( !anIsOperation )
- startOperation();
-
- // At first we remove point
- removePoint( 0, theIPoint );
-
- // And then we insert it to correct place
- bool aRes = addPoints( theNewCoords, 0 );
-
- if ( !anIsOperation )
- commitOperation();
-
- return aRes;
}
-//! Set coordinates of specified points from different sections
-bool HYDROData_ProfileUZ::setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords)
+HYDROData_ProfileUZ::PointsList HYDROData_ProfileUZ::GetPoints( const int /*theSectionIndex*/ ) const
{
- return false;
-}
-
-CurveCreator::Coordinates HYDROData_ProfileUZ::getPoints( const int /*theISection*/ ) const
-{
- CurveCreator::Coordinates aResList;
+ PointsList aResList;
Handle(TDataStd_RealList) aListU, aListZ;
getPointsLists( 0, aListU, aListZ, false );
TColStd_ListIteratorOfListOfReal anIterZ( aListZ->List() );
for ( ; anIterU.More() && anIterZ.More(); anIterU.Next(), anIterZ.Next() )
{
- const double& aCoordU = anIterU.Value();
- const double& aCoordZ = anIterZ.Value();
-
- aResList.push_back( aCoordU );
- aResList.push_back( aCoordZ );
+ Point aPoint( anIterU.Value(), anIterZ.Value() );
+ aResList.Append( aPoint );
}
return aResList;
*/
HYDRODATA_EXPORT virtual const ObjectKind GetKind() const {return KIND_PROFILEUZ;}
-
public:
- // Implementation of IPolyline interface
-
/**
* Returns the 3D presentation of all points.
*/
- HYDRODATA_EXPORT virtual ListAISObjects constructWire() const;
-
-public:
-
- // Implementation of ICurve interface
-
-
- /***********************************************/
- /*** Section methods ***/
- /***********************************************/
+ HYDRODATA_EXPORT virtual TopoDS_Wire GetWire() const;
- //! Clear the polyline (remove all sections)
- HYDRODATA_EXPORT virtual bool clear();
-
- //! Join range of sections to one section (join all sections if -1 is passed in one of arguments)
- HYDRODATA_EXPORT virtual bool join( const int theISectionTo = -1,
- const int theISectionFrom = -1 );
-
- //! Get number of sections
- HYDRODATA_EXPORT virtual int getNbSections() const;
-
- //! Add a new section.
- HYDRODATA_EXPORT virtual int addSection( const std::string& theName,
- const CurveCreator::SectionType theType,
- const bool theIsClosed );
-
- //! Removes the given sections.
- HYDRODATA_EXPORT virtual bool removeSection( const int theISection );
-
- //! Get "closed" flag of the specified section
- HYDRODATA_EXPORT virtual bool isClosed( const int theISection ) const;
/**
- * Set "closed" flag of the specified section (all sections if
- * \a theISection is -1).
+ * Returns number of sections.
*/
- HYDRODATA_EXPORT virtual bool setClosed( const int theISection,
- const bool theIsClosed );
-
- //! Returns specifyed section name
- HYDRODATA_EXPORT virtual std::string getSectionName( const int theISection ) const;
-
- /** Set name of the specified section */
- HYDRODATA_EXPORT virtual bool setSectionName( const int theISection,
- const std::string& theName );
-
- //! Get type of the specified section
- HYDRODATA_EXPORT virtual CurveCreator::SectionType getSectionType( const int theISection ) const;
+ HYDRODATA_EXPORT virtual int NbSections() const;
/**
- * Set type of the specified section (or all sections
- * if \a theISection is -1).
+ * Adds new one section.
+ * \param theIsClosed flag indicates type of polyline
*/
- HYDRODATA_EXPORT virtual bool setSectionType( const int theISection,
- const CurveCreator::SectionType theType );
-
+ HYDRODATA_EXPORT virtual void AddSection( const bool theIsClosed );
- /***********************************************/
- /*** Point methods ***/
- /***********************************************/
+ /**
+ * Returns true if section with given index is closed.
+ * \param theSectionIndex index of section
+ */
+ HYDRODATA_EXPORT virtual bool IsClosedSection( const int theSectionIndex ) const;
/**
- * Insert one or several points to the specified section starting from the given theIPnt index
- * (or add these at the end of section points if \a theIPnt is -1).
+ * Removes section with given index.
+ * \param theSectionIndex index of section
*/
- HYDRODATA_EXPORT virtual bool addPoints( const CurveCreator::Coordinates& theCoords,
- const int theISection,
- const int theIPnt = -1 );
+ HYDRODATA_EXPORT virtual void RemoveSection( const int theSectionIndex );
- //! Set coordinates of specified point
- HYDRODATA_EXPORT virtual bool setPoint( const int theISection,
- const int theIPnt,
- const CurveCreator::Coordinates& theCoords );
+ /**
+ * Removes all sections.
+ */
+ HYDRODATA_EXPORT virtual void RemoveSections();
- //! Set coordinates of specified points from different sections
- HYDRODATA_EXPORT virtual bool setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords);
- //! Remove point with given id
- HYDRODATA_EXPORT virtual bool removePoint( const int theISection, const int theIPnt = -1 );
+ /**
+ * Adds new point for section with index "theSectionIndex".
+ * \param theSectionIndex index of section
+ * \param thePoint point to add
+ * \param theBeforeIndex if not equal -1 then insert point in this pos
+ */
+ HYDRODATA_EXPORT virtual void AddPoint( const int theSectionIndex,
+ const Point& thePoint,
+ const int thePointIndex = -1 );
- //! Remove several points from different sections with given ids
- HYDRODATA_EXPORT virtual bool removeSeveralPoints( const SectionToPointList &theSectionToPntIDs);
+ /**
+ * Replaces point for section with index "theSectionIndex".
+ * \param theSectionIndex index of section
+ * \param thePointIndex index of point to replace
+ * \param thePoint new point
+ */
+ HYDRODATA_EXPORT virtual void SetPoint( const int theSectionIndex,
+ const int thePointIndex,
+ const Point& thePoint );
/**
- * Get points of a section (the total points in Curve if theISection is equal to -1)..
+ * Removes point from section with index "theSectionIndex".
+ * \param theSectionIndex index of section
+ * \param thePointIndex index of point
*/
- HYDRODATA_EXPORT virtual CurveCreator::Coordinates getPoints( const int theISection = -1 ) const;
+ HYDRODATA_EXPORT virtual void RemovePoint( const int theSectionIndex,
+ const int thePointIndex );
-protected:
/**
- * Insert point to the specified section after the given theIPnt index.
- * (or add these at the end of section points if \a theIPnt is -1).
+ * Returns list of points.
+ * \param theSectionIndex if not equal -1 then list of points returned
+ * only for section with this index
+ * \return list of points
*/
- HYDRODATA_EXPORT virtual bool addPoint(
- const CurveCreator::TypeCoord& theCoordX,
- const CurveCreator::TypeCoord& theCoordY,
- const int theISection,
- const int theIPnt = -1 );
+ HYDRODATA_EXPORT virtual PointsList GetPoints( const int theSectionIndex = -1 ) const;
protected:
- friend class HYDROData_Profile;
friend class HYDROData_Iterator;
/**