#include <HYDROData_Tool.h>
#include <HYDROData_ShapeFile.h>
#include <HYDROData_Document.h>
+#include <HYDROData_StricklerTable.h>
#include <BOPAlgo_BOP.hxx>
#include <BOPAlgo_Builder.hxx>
#include <TopExp_Explorer.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
+#include <TopTools_SequenceOfShape.hxx>
#include <BOPAlgo_PaveFiller.hxx>
#include <BRepTools.hxx>
#include <TopExp_Explorer.hxx>
#include <BRepCheck_Shell.hxx>
#include <BRepCheck_ListOfStatus.hxx>
#include <TopTools_SequenceOfShape.hxx>
+#include <Handle_Geom_Curve.hxx>
+#include <Handle_Geom_Line.hxx>
+#include <Handle_Geom_TrimmedCurve.hxx>
+#include <Geom_TrimmedCurve.hxx>
#include <QFile>
@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;
for( ; anIt3.More(); anIt3.Next() )
{
QString aType = anIt3.Value().first;
+ double aCoeff = theTable->Get( aType, 0.0 );
QList<int> anEdgesIds = anIt3.Value().second;
- aStream << "\"" << aType << "\" ";
+ //aStream << "\"" << aType << "\" ";
+ aStream << QString::number( aCoeff, TELEMAC_FORMAT, TELEMAC_PRECISION ) << " ";
foreach( int anId, anEdgesIds )
aStream << anId << " ";
aStream << "\n";
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 );
}
*/
bool HYDROData_LandCoverMap::Split( const TopoDS_Shape& theShape )
{
- return LocalPartition( theShape, "" );
+ int aNbCL = GetLCCount();
+ bool aResult = LocalPartition( theShape, "" );
+ return aResult && aNbCL != GetLCCount();
}
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;
}
/**
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() );
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( aShpFileName );
Dump( "attr_values", anAttrValues, aResList );
Dump( "types", aTypes, aResList );
}
-bool HYDROData_LandCoverMap::ImportShp( const QString& theFileName,
+bool HYDROData_LandCoverMap::ImportSHP( const QString& theSHPFileName,
const QList<int>& 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;
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;
+}