X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_LandCoverMap.cxx;h=367f60488338e8b37d2fa308fc4373b5a70119d2;hb=9396f87db7f68625720d569c16d753afba97cdf1;hp=368fdc60e00852f1957ad4d74348e73d457c4e55;hpb=c49173e7ecf4f500c55ef5d692c6a0ca497bf997;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_LandCoverMap.cxx b/src/HYDROData/HYDROData_LandCoverMap.cxx index 368fdc60..367f6048 100644 --- a/src/HYDROData/HYDROData_LandCoverMap.cxx +++ b/src/HYDROData/HYDROData_LandCoverMap.cxx @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -41,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -53,11 +55,16 @@ #include #include #include +#include +#include +#include +#include #include #include #include +#include const char TELEMAC_FORMAT = 'f'; const int TELEMAC_PRECISION = 3; @@ -351,7 +358,9 @@ bool EdgeDiscretization( const TopoDS_Edge& theEdge, @param theFileName the name of file @return if the export is successful */ -bool HYDROData_LandCoverMap::ExportTelemac( const QString& theFileName, Standard_Real theDeflection ) const +bool HYDROData_LandCoverMap::ExportTelemac( const QString& theFileName, + double theDeflection, + const Handle(HYDROData_StricklerTable)& theTable ) const { TopoDS_Shape aLandCoverMapShape = GetShape(); TopTools_ListOfShape aListOfFaces; @@ -435,8 +444,10 @@ bool HYDROData_LandCoverMap::ExportTelemac( const QString& theFileName, Standard for( ; anIt3.More(); anIt3.Next() ) { QString aType = anIt3.Value().first; + double aCoeff = theTable->Get( aType, 0.0 ); QList anEdgesIds = anIt3.Value().second; - aStream << "\"" << aType << "\" "; + //aStream << "\"" << aType << "\" "; + aStream << QString::number( aCoeff, TELEMAC_FORMAT, TELEMAC_PRECISION ) << " "; foreach( int anId, anEdgesIds ) aStream << anId << " "; aStream << "\n"; @@ -459,10 +470,25 @@ bool HYDROData_LandCoverMap::Add( const Handle( HYDROData_Object )& theObject, c return false; TopoDS_Shape aShape = theObject->GetTopShape(); - if( aShape.ShapeType()!=TopAbs_FACE ) - return false; + TopoDS_Face aFace; - TopoDS_Face aFace = TopoDS::Face( aShape ); + if( aShape.ShapeType() ==TopAbs_FACE ) + { + aFace = TopoDS::Face(aShape); + } + else if ( aShape.ShapeType() ==TopAbs_COMPOUND ) + { + TopoDS_Iterator It(aShape); + for (; It.More(); It.Next()) + if (It.Value().ShapeType() == TopAbs_FACE) + { + aFace = TopoDS::Face(It.Value()); + break; + } + } + + if (aFace.IsNull()) + return false; return LocalPartition( aFace, theType ); } @@ -567,7 +593,9 @@ bool HYDROData_LandCoverMap::Split( const Handle( HYDROData_PolylineXY )& thePol */ bool HYDROData_LandCoverMap::Split( const TopoDS_Shape& theShape ) { - return LocalPartition( theShape, "" ); + int aNbCL = GetLCCount(); + bool aResult = LocalPartition( theShape, "" ); + return aResult && aNbCL != GetLCCount(); } @@ -580,16 +608,23 @@ bool HYDROData_LandCoverMap::Split( const TopoDS_Shape& theShape ) bool HYDROData_LandCoverMap::Merge( const TopTools_ListOfShape& theFaces, const QString& theType ) { // 1. to fuse the faces into the new face - TopoDS_Shape aMergedFace = MergeFaces( theFaces, true ); - if( !aMergedFace.IsNull() && aMergedFace.ShapeType()==TopAbs_FACE ) - { + TopoDS_Shape aMergedFace = MergeFaces( theFaces, true ); + bool aStat = true; + if( !aMergedFace.IsNull() ) + { // 2. to remove the merged faces from the current map Remove( theFaces ); - - // 3. to add the face into the map - return LocalPartition( TopoDS::Face( aMergedFace ), theType ); + TopExp_Explorer Exp(aMergedFace, TopAbs_FACE); + for( ; Exp.More(); Exp.Next() ) + { + const TopoDS_Face& aCF = TopoDS::Face(Exp.Current()); + // 3. to add the face into the map + aStat = aStat && LocalPartition( aCF, theType ); + } } - return false; + else + aStat = false; + return aStat; } /** @@ -822,6 +857,7 @@ bool HYDROData_LandCoverMap::LocalPartition( const TopoDS_Shape& theNewShape, co QString aSType = anIt.StricklerType(); //std::cout << "from " << anIt.Face() << ": " << anIt.StricklerType() << std::endl; TopTools_ListOfShape aModified = aBuilder.Modified( anIt.Face() ); + // if( aModified.Extent() == 0 ) aModified.Append( anIt.Face() ); @@ -928,24 +964,25 @@ QStringList HYDROData_LandCoverMap::DumpToPython( const QString& thePyScri QStringList aResList = dumpObjectCreation( theTreatedObjects ); QString aName = GetObjPyName(); - QString aShapeFileName = thePyScriptPath; - aShapeFileName.replace( ".py", ".shp" ); + QString aShpFileName = thePyScriptPath; + aShpFileName.replace( ".py", ".shp" ); QString aDbfFileName = thePyScriptPath; aDbfFileName.replace( ".py", ".dbf" ); - //TODO: export shape file + ExportSHP( aShpFileName, true, 0.1 ); QString anAttr = "CODE_06"; //TODO: some custom choice QStringList anAttrValues, aTypes; HYDROData_Document::Document( myLab )->CollectQGISValues( anAttr, anAttrValues, aTypes ); ExportDBF( aDbfFileName, anAttr, anAttrValues, aTypes ); - //TODO: insert command to import shape file + aResList << QString( "%1.ImportSHP( '%2' )" ). + arg( aName ).arg( QFileInfo( aShpFileName ).fileName() ); Dump( "attr_values", anAttrValues, aResList ); Dump( "types", aTypes, aResList ); aResList << QString( "%1.ImportDBF( '%2', '%3', attr_values, types )" ). - arg( aName ).arg( aDbfFileName ).arg( anAttr ); + arg( aName ).arg( QFileInfo( aDbfFileName ).fileName() ).arg( anAttr ); return aResList; } @@ -997,14 +1034,14 @@ double HYDROData_LandCoverMap::GetTransparency() const } -bool HYDROData_LandCoverMap::ImportShp( const QString& theFileName, +bool HYDROData_LandCoverMap::ImportSHP( const QString& theSHPFileName, const QList& theIndices ) { HYDROData_ShapeFile anImporter; QStringList aPolyList; TopTools_SequenceOfShape aFaces; int aSHapeType = -1; - int Stat = anImporter.ImportPolygons(theFileName, aPolyList, aFaces, aSHapeType); + int Stat = anImporter.ImportPolygons(theSHPFileName, aPolyList, aFaces, aSHapeType); // if (Stat != 1) return false; @@ -1041,14 +1078,39 @@ bool HYDROData_LandCoverMap::ImportShp( const QString& theFileName, return true; } -bool HYDROData_LandCoverMap::ExportShp( const QString& theFileName) const +bool HYDROData_LandCoverMap::ExportSHP( const QString& theSHPFileName, bool bUseDiscr, double theDefl) const { HYDROData_ShapeFile anExporter; QStringList aList; - anExporter.Export(theFileName, this, aList); + anExporter.Export(theSHPFileName, this, aList, bUseDiscr, theDefl ); if (aList.empty()) return true; else return false; } +bool HYDROData_LandCoverMap::CheckLinear() +{ + TopoDS_Shape InpShape = GetShape(); + TopExp_Explorer anEdgeEx(InpShape, TopAbs_EDGE); + for (; anEdgeEx.More(); anEdgeEx.Next()) + { + TopoDS_Edge E = TopoDS::Edge(anEdgeEx.Current()); + double aFP, aLP; + Handle_Geom_Curve aCur = BRep_Tool::Curve(E, aFP, aLP); + Handle(Geom_Line) aLine = Handle(Geom_Line)::DownCast(aCur); + if (aLine.IsNull()) + { + Handle(Geom_TrimmedCurve) aTC = Handle(Geom_TrimmedCurve)::DownCast(aCur); + if (!aTC.IsNull()) + { + Handle(Geom_Line) aLine = Handle(Geom_Line)::DownCast(aTC->BasisCurve()); + if (aLine.IsNull()) + return false; + } + else + return false; + } + } + return true; +}