X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_ShapeFile.h;h=b546bd235a5123a713ea2826bd283d930db6d19a;hb=c16caee6b6e61dffbc739dce6639215b24a459d3;hp=29a2790a49887a3454257121bce8999de3c4e847;hpb=914d3c8044ea08613f24ce41a94ecf067e0e750f;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_ShapeFile.h b/src/HYDROData/HYDROData_ShapeFile.h index 29a2790a..b546bd23 100644 --- a/src/HYDROData/HYDROData_ShapeFile.h +++ b/src/HYDROData/HYDROData_ShapeFile.h @@ -1,8 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// Copyright (C) 2014-2015 EDF-R&D // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either @@ -23,66 +19,159 @@ #ifndef HYDRODATA_SHAPEFILE_H #define HYDRODATA_SHAPEFILE_H -#include +#include "HYDROData.h" + #include + +#include + #include -#include "HYDROData.h" + +#include + //extern "C" { #include //}; class gp_XYZ; -class Handle_HYDROData_PolylineXY; -class Handle_HYDROData_Polyline3D; -class Handle(HYDROData_Document); -class TopTools_SequenceOfShape; +class HYDROData_PolylineXY; +class HYDROData_Polyline3D; +class HYDROData_Document; class TopoDS_Face; -class Handle_HYDROData_Entity; -class Handle_HYDROData_LandCoverMap; +class TopoDS_Shape; +class HYDROData_Entity; +class HYDROData_LandCoverMap; class HYDROData_ShapeFile { +public: + enum ShapeType { ShapeType_Polyline, ShapeType_Polygon }; +enum DBF_FieldType +{ + DBF_FieldType_None, + DBF_FieldType_String, + DBF_FieldType_Integer, + DBF_FieldType_Double, + DBF_FieldType_Invalid +}; + +enum ImportShapeType +{ + ImportShapeType_Polyline, + ImportShapeType_Polyline3D, + ImportShapeType_Polygon, + ImportShapeType_All +}; + +struct DBF_AttrValue +{ + DBF_AttrValue() + { + myIntVal = -1; + myDoubleVal = -1.0; + myIsNull = true; + myFieldType = DBF_FieldType_None; + } + QString myStrVal; + int myIntVal; + double myDoubleVal; + std::string myRawValue; + DBF_FieldType myFieldType; + bool myIsNull; +}; + public: HYDRODATA_EXPORT HYDROData_ShapeFile( ); virtual HYDRODATA_EXPORT ~HYDROData_ShapeFile(); //Export operation - HYDRODATA_EXPORT void Export(const QString& aFileName, - NCollection_Sequence aPolyXYSeq, - NCollection_Sequence aPoly3DSeq, - const Handle_HYDROData_LandCoverMap& aLCSeq, + HYDRODATA_EXPORT void Export(Handle(HYDROData_Document) theDocument, + const QString& aFileName, + NCollection_Sequence aPolyXYSeq, + NCollection_Sequence aPoly3DSeq, QStringList& aNonExpList); - int WriteObjectPolyXY(SHPHandle theShpHandle, Handle_HYDROData_PolylineXY thePoly ); - int WriteObjectPoly3D(SHPHandle theShpHandle, Handle_HYDROData_Polyline3D thePoly ); - //TODO:int WriteObjectLC(SHPHandle theShpHandle, Handle_HYDROData_LandCover theLC ); + + HYDRODATA_EXPORT void Export(Handle(HYDROData_Document) theDocument, + const QString& aFileName, + const Handle(HYDROData_LandCoverMap)& aLCM, + QStringList& aNonExpList, + bool bCheckLinear = true, + bool bUseDiscr = false, + double theDefl = 0.1); + + int WriteObjectPolyXY(Handle(HYDROData_Document) theDocument, SHPHandle theShpHandle, + Handle(HYDROData_PolylineXY) thePoly ); + + int WriteObjectPoly3D(Handle(HYDROData_Document) theDocument, SHPHandle theShpHandle, + Handle(HYDROData_Polyline3D) thePoly ); + + int WriteObjectPolygon(Handle(HYDROData_Document) theDocument, SHPHandle theShpHandle, + const TopoDS_Shape& theInputShape, bool bUseDiscr, double theDefl ); //Import bool Parse(SHPHandle theHandle, ShapeType theType, int& theShapeTypeOfFile); //Import Landcover - void ReadSHPPolygon(SHPObject* anObj, int i, TopoDS_Face& F); - HYDRODATA_EXPORT int ImportLandCovers(const QString theFileName, QStringList& thePolygonsList, TopTools_SequenceOfShape& theFaces, int& theShapeTypeOfFile); + void ReadSHPPolygon(Handle(HYDROData_Document) theDocument, SHPObject* anObj, int i, TopoDS_Face& F); + + HYDRODATA_EXPORT int ImportPolygons(Handle(HYDROData_Document) theDocument, + const QString theFileName, + QStringList& thePolygonsList, + TopTools_SequenceOfShape& theFaces, + int& theShapeTypeOfFile); + HYDRODATA_EXPORT void Free(); + //Import Polyline void ReadSHPPolyXY(Handle(HYDROData_Document) theDocument, SHPObject* anObj, QString theFileName, - int theInd, NCollection_Sequence& theEntities); + int theInd, NCollection_Sequence& theEntities, + bool bReadAsPolylin = false); + void ReadSHPPoly3D(Handle(HYDROData_Document) theDocument, SHPObject* anObj, QString theFileName, - int theInd, NCollection_Sequence& theEntities); + int theInd, NCollection_Sequence& theEntities); + HYDRODATA_EXPORT int ImportPolylines(Handle(HYDROData_Document) theDocument, const QString& theFileName, - NCollection_Sequence& theEntities, int& theShapeTypeOfFile); + NCollection_Sequence& theEntities, int& theShapeTypeOfFile, + ImportShapeType theShapeTypesToImport); + HYDRODATA_EXPORT QString GetShapeTypeName(int theType); + + //DBF I/O Methods + HYDRODATA_EXPORT bool CheckDBFFileExisting(const QString& theSHPFilePath, QString& thePathToDBFFile); + HYDRODATA_EXPORT bool DBF_OpenDBF(const QString& thePathToDBFFile); + HYDRODATA_EXPORT int DBF_GetNbFields(); + HYDRODATA_EXPORT QStringList DBF_GetFieldList(); + HYDRODATA_EXPORT void DBF_GetFieldTypeList(std::vector& FTVect); + HYDRODATA_EXPORT int DBF_GetNbRecords(); + HYDRODATA_EXPORT void DBF_CloseDBF(); + HYDRODATA_EXPORT void DBF_GetAttributeList(int theIndexOfField, std::vector& theAttrV); + HYDRODATA_EXPORT bool DBF_WriteFieldAndValues(const QString& theFileName, const QString& theFieldName, DBF_FieldType theType, const std::vector& theAttrV, bool bUseStrValue); + private: - void ProcessFace(TopoDS_Face theFace, SHPHandle theShpHandle); + + void ProcessFace(Handle(HYDROData_Document) theDocument, + const TopoDS_Face& theFace, SHPHandle theShpHandle, + bool bUseDiscr, double theDefl); + + bool CheckLinear(const TopoDS_Shape& theInpShape); + int TryOpenShapeFile(QString theFileName); + + void GetFreeIndices(std::vector& theAllowedIndexes, QString strName, size_t theObjsSize, + QStringList theExistingNames, QString theBaseFileName); + private: std::vector mySHPObjects; SHPHandle myHSHP; + DBFHandle myHDBF; + + friend class test_HYDROData_ShapeFile; }; #endif