#include <HYDROData_Object.h>
#include <HYDROData_PolylineXY.h>
#include <HYDROData_Tool.h>
+#include <HYDROData_ShapeFile.h>
#include <BOPAlgo_BOP.hxx>
#include <BOPAlgo_Builder.hxx>
myIterator = new TopoDS_Iterator( aShape );
theMap.myLab.FindChild( DataTag_Types ).FindAttribute( TDataStd_ExtStringArray::GetID(), myArray );
- myIndex = myArray->Lower();
+ if( myArray.IsNull() )
+ myIndex = -1;
+ else
+ myIndex = myArray->Lower();
}
/**
}
/**
- Import the land cover map from QGIS
- @param theFileName the name of file
- @return if the import is successful
+ Load attributes from DBF File
+///
*/
-bool HYDROData_LandCoverMap::ImportQGIS( const QString& theFileName )
-{
- //TODO
- return false;
+HYDROData_LandCoverMap::DBFStatus HYDROData_LandCoverMap::ImportDBF( const QString& theDBFFileName,
+ const QString& theFieldName,
+ const QStringList& theDBFValues,
+ const QStringList& theStricklerTypes,
+ const QList<int>& theIndices )
+{
+ if (theDBFValues.size() != theStricklerTypes.size())
+ return DBFStatus_DIFF_SIZE_ERROR;
+ HYDROData_ShapeFile aDBFImporter;
+ if (!aDBFImporter.DBF_OpenDBF(theDBFFileName))
+ return DBFStatus_OPEN_FILE_ERROR; //cant open file
+
+ QStringList FieldList = aDBFImporter.DBF_GetFieldList();
+ int FieldNameIndex = FieldList.indexOf(theFieldName);
+ if (FieldNameIndex == -1)
+ return DBFStatus_NO_SUCH_FIELD_ERROR; //no such field
+
+ std::vector<HYDROData_ShapeFile::DBF_AttrValue> theAttrV;
+ aDBFImporter.DBF_GetAttributeList(FieldNameIndex, theAttrV );
+
+ bool allOK = true;
+ Iterator anIt( *this );
+ for( ; anIt.More(); anIt.Next() )
+ {
+ int CurIndex = anIt.Index();
+ HYDROData_ShapeFile::DBF_AttrValue AValue = theAttrV[theIndices[CurIndex]];
+ int StricklerTypesInd = theDBFValues.indexOf(QString(AValue.myStrVal));
+ if ( StricklerTypesInd != -1)
+ anIt.SetStricklerType(theStricklerTypes[StricklerTypesInd]);
+ else
+ allOK = false;
+ }
+ if (allOK)
+ return DBFStatus_OK;
+ else
+ return DBFStatus_NO_DBFVALUES_CORRESPONDENCE_WARNING;
}
/**
- Export the land cover map to QGIS
- @param theFileName the name of file
- @return if the export is successful
+ Export attributes to DBF File
+///
*/
-bool HYDROData_LandCoverMap::ExportQGIS( const QString& theFileName ) const
+void HYDROData_LandCoverMap::ExportDBF( const QString& theDBFFileName,
+ const QString& theFieldName,
+ const QStringList& theDBFValues,
+ const QStringList& theStricklerTypes) const
{
- //TODO
- return false;
+ HYDROData_ShapeFile anExporter;
+ std::vector<HYDROData_ShapeFile::DBF_AttrValue> theAttrV;
+ Iterator anIt( *this );
+ for( ; anIt.More(); anIt.Next() )
+ {
+ QString CurST = anIt.StricklerType();
+ HYDROData_ShapeFile::DBF_AttrValue aCurAttrV;
+ aCurAttrV.myIsNull = false;
+ int StricklerTypesInd = theStricklerTypes.indexOf(CurST);
+ if (StricklerTypesInd != -1)
+ {
+ aCurAttrV.myStrVal = theDBFValues[StricklerTypesInd];
+ aCurAttrV.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String;
+ theAttrV.push_back(aCurAttrV);
+ }
+ else
+ aCurAttrV.myIsNull = true;
+ }
+
+ anExporter.DBF_WriteFieldAndValues(theDBFFileName, theFieldName, HYDROData_ShapeFile::DBF_FieldType_String, theAttrV, true);
+
}
int HashCode( const gp_Pnt& thePoint, const Standard_Integer theUpper )
BOPCol_ListOfShape aLC;
anIt.Initialize(theFaces);
for( ; anIt.More(); anIt.Next() )
+ {
+ if (anIt.Value().ShapeType() != TopAbs_FACE)
+ return TopoDS_Shape();
aLC.Append( anIt.Value() );
+ }
BOPAlgo_PaveFiller aPF;
aPF.SetArguments( aLC );
*/
void HYDROData_LandCoverMap::StoreLandCovers( const HYDROData_MapOfFaceToStricklerType& theMap )
{
- TopoDS_Compound aCompound;
- BRep_Builder aCompoundBuilder;
- aCompoundBuilder.MakeCompound( aCompound );
+ TopoDS_Shell aShell;
+ BRep_Builder aShellBuilder;
+ aShellBuilder.MakeShell( aShell );
+ aShell.Closed( Standard_False );
+ TopTools_ListOfShape aListOfFaces;
int n = theMap.Size();
Handle( TDataStd_ExtStringArray ) aTypes =
for( int i=0; aNFIt.More(); aNFIt.Next(), i++ )
{
TopoDS_Face aFace = aNFIt.Key();
+ if (aFace.IsNull())
+ continue;
QString aType = aNFIt.Value();
- aCompoundBuilder.Add( aCompound, aFace );
+ aShellBuilder.Add( aShell, aFace );
+ aListOfFaces.Append(aFace);
aTypes->SetValue( i, HYDROData_Tool::toExtString( aType ) );
}
+ TopoDS_Shape aMF = MergeFaces(aListOfFaces, false);
- SetShape( aCompound );
+ SetShape( aListOfFaces.Extent() < 2 ? aShell : MergeFaces(aListOfFaces, false));
}
/**
theType = "";
return TopoDS_Face();
}
+
+/**
+ Dump to Python
+ @param theTreatedObjects the map of treated objects
+*/
+QStringList HYDROData_LandCoverMap::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
+{
+ QStringList aResList = dumpObjectCreation( theTreatedObjects );
+ QString aName = GetObjPyName();
+
+ //Handle(HYDROData_PolylineXY) aHydAxis = GetHydraulicAxis();
+ //setPythonReferenceObject( theTreatedObjects, aResList, aHydAxis, "SetHydraulicAxis" );
+
+ //HYDROData_SequenceOfObjects aSeqOfProfiles = GetProfiles();
+ //for ( int i = 1, aNb = aSeqOfProfiles.Size(); i <= aNb; ++i )
+ //{
+ //const Handle(HYDROData_Entity) aProfile = aSeqOfProfiles.Value( i );
+ //setPythonReferenceObject( theTreatedObjects, aResList, aProfile, "AddProfile" );
+ //}
+
+ //TODO
+
+ return aResList;
+}