X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_DataModel.cxx;h=bfb64ec4535a95ce647f323b26071d8775a58850;hb=60c1b803621af637e863bf91a54f59251a28552c;hp=2f05232531bec83b84f4750bddb4b1630e78f606;hpb=e744ba34fd38d6744d11b54cd15b6f86350695b2;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_DataModel.cxx b/src/HYDROGUI/HYDROGUI_DataModel.cxx index 2f052325..bfb64ec4 100644 --- a/src/HYDROGUI/HYDROGUI_DataModel.cxx +++ b/src/HYDROGUI/HYDROGUI_DataModel.cxx @@ -21,6 +21,7 @@ #include "HYDROGUI_DataObject.h" #include "HYDROGUI_Module.h" #include "HYDROGUI_Tool.h" +#include "HYDROGUI_Tool2.h" #include "HYDROGUI_Zone.h" #include "HYDROGUI_Region.h" @@ -44,7 +45,8 @@ #include #include #include -#include +#include +#include #include #include @@ -58,6 +60,7 @@ #include #include #include +#include #include @@ -269,46 +272,57 @@ void HYDROGUI_DataModel::update( const int theStudyId ) // Create root objects: // IMAGES - LightApp_DataObject* anImageRootObj = createObject( aNewRootObj, tr( partitionName( KIND_IMAGE ).toAscii() ) ); + LightApp_DataObject* anImageRootObj = createObject( aNewRootObj, tr( partitionName( KIND_IMAGE ).toLatin1() ) ); // BATHYMETRY - LightApp_DataObject* aBathymetryRootObj = createObject( aNewRootObj, tr( partitionName( KIND_BATHYMETRY ).toAscii() ) ); + LightApp_DataObject* aBathymetryRootObj = createObject( aNewRootObj, tr( partitionName( KIND_BATHYMETRY ).toLatin1() ) ); - // ARTIFICIAL OBJECTS - LightApp_DataObject* anArtificialObjectsRootObj = createObject( aNewRootObj, tr( partitionName( KIND_ARTIFICIAL_OBJECT ).toAscii() ) ); + // POLYLINES + LightApp_DataObject* aPolylineRootObj = createObject( aNewRootObj, tr( partitionName( KIND_POLYLINEXY ).toLatin1() ) ); + + // PROFILES + LightApp_DataObject* aProfileRootObj = createObject( aNewRootObj, tr( partitionName( KIND_PROFILE ).toLatin1() ) ); + + // POLYLINES 3D + LightApp_DataObject* aPolyline3DRootObj = createObject( aNewRootObj, tr( partitionName( KIND_POLYLINE ).toLatin1() ) ); // NATURAL OBJECTS - LightApp_DataObject* aNaturalObjectsRootObj = createObject( aNewRootObj, tr( partitionName( KIND_NATURAL_OBJECT ).toAscii() ) ); + LightApp_DataObject* aNaturalObjectsRootObj = createObject( aNewRootObj, tr( partitionName( KIND_NATURAL_OBJECT ).toLatin1() ) ); + + // ARTIFICIAL OBJECTS + LightApp_DataObject* anArtificialObjectsRootObj = createObject( aNewRootObj, tr( partitionName( KIND_ARTIFICIAL_OBJECT ).toLatin1() ) ); // OBSTACLES - LightApp_DataObject* anObstaclesRootObj = createObject( aNewRootObj, tr( partitionName( KIND_OBSTACLE ).toAscii() ) ); + LightApp_DataObject* anObstaclesRootObj = createObject( aNewRootObj, tr( partitionName( KIND_OBSTACLE ).toLatin1() ) ); + + //BC Polygons + LightApp_DataObject* aBCPolygonRootObj = createObject( aNewRootObj, tr( partitionName( KIND_BC_POLYGON ).toLatin1() ) ); // STRICKLER TABLES - LightApp_DataObject* aStricklerTablesRootObj = createObject( aNewRootObj, tr( partitionName( KIND_STRICKLER_TABLE ).toAscii() ) ); + LightApp_DataObject* aStricklerTablesRootObj = createObject( aNewRootObj, tr( partitionName( KIND_STRICKLER_TABLE ).toLatin1() ) ); - // LAND COVERS - LightApp_DataObject* aLandCoversRootObj = createObject( aNewRootObj, tr( partitionName( KIND_LAND_COVER ).toAscii() ) ); + // LAND COVER MAPS + LightApp_DataObject* aLandCoversRootObj = createObject( aNewRootObj, tr( partitionName( KIND_LAND_COVER_MAP ).toLatin1() ) ); // CALCULATION CASES - LightApp_DataObject* aCalculRootObj = createObject( aNewRootObj, tr( partitionName( KIND_CALCULATION ).toAscii() ) ); - - // POLYLINES - LightApp_DataObject* aPolylineRootObj = createObject( aNewRootObj, tr( partitionName( KIND_POLYLINEXY ).toAscii() ) ); - - // POLYLINES - LightApp_DataObject* aPolyline3DRootObj = createObject( aNewRootObj, tr( partitionName( KIND_POLYLINE ).toAscii() ) ); - - // PROFILES - LightApp_DataObject* aProfileRootObj = createObject( aNewRootObj, tr( partitionName( KIND_PROFILE ).toAscii() ) ); + LightApp_DataObject* aCalculRootObj = createObject( aNewRootObj, tr( partitionName( KIND_CALCULATION ).toLatin1() ) ); // VISUAL STATES - LightApp_DataObject* aVisualStateRootObj = createObject( aNewRootObj, tr( partitionName( KIND_VISUAL_STATE ).toAscii() ) ); + LightApp_DataObject* aVisualStateRootObj = createObject( aNewRootObj, tr( partitionName( KIND_VISUAL_STATE ).toLatin1() ) ); + int aNoStricklerTableObj = 0; + HYDROData_Iterator anIterator( aDocument, KIND_UNKNOWN ); - for( ; anIterator.More(); anIterator.Next() ) { + std::vector ents; + + for( ; anIterator.More(); anIterator.Next() ) + ents.push_back(anIterator.Current()); + + for (int i = 0; i< ents.size();i++) + { LightApp_DataObject* obj = 0; - Handle(HYDROData_Entity) anObj = anIterator.Current(); + Handle(HYDROData_Entity) anObj = ents[i]; if ( !anObj.IsNull() ) { @@ -404,12 +418,12 @@ void HYDROGUI_DataModel::update( const int theStudyId ) break; } - case KIND_LAND_COVER: + case KIND_LAND_COVER_MAP: { - Handle(HYDROData_LandCover) aLandCoverObj = - Handle(HYDROData_LandCover)::DownCast( anObj ); - if( !aLandCoverObj.IsNull() ) { - obj = createObject( aLandCoversRootObj, aLandCoverObj ); + Handle(HYDROData_LandCoverMap) aLandCoverMapObj = + Handle(HYDROData_LandCoverMap)::DownCast( anObj ); + if( !aLandCoverMapObj.IsNull() ) { + obj = createObject( aLandCoversRootObj, aLandCoverMapObj ); } break; @@ -462,6 +476,16 @@ void HYDROGUI_DataModel::update( const int theStudyId ) obj = createObject( aVisualStateRootObj, aVisualStateObj ); } + break; + } + case KIND_BC_POLYGON: + { + Handle(HYDROData_BCPolygon) aBCPolygonObj = + Handle(HYDROData_BCPolygon)::DownCast( anObj ); + if( !aBCPolygonObj.IsNull() ) { + obj = createObject( aBCPolygonRootObj, aBCPolygonObj ); + } + break; } } @@ -478,8 +502,79 @@ void HYDROGUI_DataModel::update( const int theStudyId ) // anObjectBrowser->openLevels(); //} - HYDROGUI_DataModelSync aSync( aNewRootObj ); SUIT_DataObject* aRoot = root(); + + if (aRoot) + { + std::map entry2ObjNewRoot; + SUIT_DataObjectIterator::DetourType dt = SUIT_DataObjectIterator::DepthLeft; + for ( SUIT_DataObjectIterator it( aNewRootObj, dt ); it.current(); ++it ) + { + LightApp_DataObject* aCurObjN = dynamic_cast(it.current()); + if (aCurObjN) + entry2ObjNewRoot[aCurObjN->entry().toStdString()] = it.current(); + } + + for ( SUIT_DataObjectIterator it( aRoot, dt ); it.current(); ++it ) + { + LightApp_DataObject* aCurObjO = dynamic_cast(it.current()); + if (aCurObjO && aCurObjO->childCount() > 0) + { + std::string entry = aCurObjO->entry().toStdString(); + SUIT_DataObject* newNode = entry2ObjNewRoot[entry]; + if (newNode && aCurObjO->childCount() > 0) + { + DataObjectList newchildren; + newNode->children(newchildren); + //new root - remove children + std::map newNode2Entries; + for ( DataObjectList::const_iterator it = newchildren.begin(); it != newchildren.end(); ++it ) + { + SUIT_DataObject* cc = *it; + LightApp_DataObject* obj = dynamic_cast(cc); + newNode2Entries[obj->entry().toStdString()] = cc; + newNode->removeChild(cc); + } + // + std::set objtemp; + + DataObjectList oldchildren; + aCurObjO->children(oldchildren); + for ( DataObjectList::const_iterator it = oldchildren.begin(); it != oldchildren.end(); ++it ) + { + SUIT_DataObject* old_ch = *it; + std::string entr = dynamic_cast(old_ch)->entry().toStdString(); + if (newNode2Entries.count(entr) > 0) + { + SUIT_DataObject* obj = newNode2Entries[entr]; + newNode->appendChild(obj); + objtemp.insert(obj); + } + } + // + for ( DataObjectList::const_iterator it = newchildren.begin(); it != newchildren.end(); ++it ) + { + SUIT_DataObject* ch = *it; + if (objtemp.count(ch) == 0) + newNode->appendChild(ch); + } + { //IF DEBUG + //add. check + DataObjectList newchildren2; + newNode->children(newchildren2); + std::set entries2, entries1; + for ( DataObjectList::const_iterator it = newchildren2.begin(); it != newchildren2.end(); ++it ) + entries2.insert((dynamic_cast(*it))->entry().toStdString()); + for ( DataObjectList::const_iterator it = newchildren.begin(); it != newchildren.end(); ++it ) + entries1.insert((dynamic_cast(*it))->entry().toStdString()); + assert(entries1 == entries2); + } + } + } + } + } + + HYDROGUI_DataModelSync aSync( aNewRootObj ); bool isNewDoc = aRoot==0; if( isNewDoc ) aRoot = createRootModuleObject( aStudyRoot ); @@ -491,7 +586,8 @@ void HYDROGUI_DataModel::update( const int theStudyId ) if ( !myStates.isEmpty() ) { ob->updateTree(); - ob->setOpenStates( myStates, ENTRY_COLUMN ); + ob->setAutoOpenLevel( 1 ); + //ob->setOpenStates( myStates, ENTRY_COLUMN ); myStates.clear(); } } @@ -638,7 +734,7 @@ bool HYDROGUI_DataModel::canCopy() bool isChildObject = aKind == KIND_DUMMY_3D || aKind == KIND_ZONE || aKind == KIND_SHAPES_GROUP || - aKind == KIND_SPLITTED_GROUP; + aKind == KIND_SPLIT_GROUP; if ( isUnrecognized || isChildObject ) { isCanCopy = false; break; @@ -710,7 +806,9 @@ QString HYDROGUI_DataModel::partitionName( const ObjectKind theObjectKind ) case KIND_ARTIFICIAL_OBJECT: return "ARTIFICIAL_OBJECTS"; case KIND_NATURAL_OBJECT: return "NATURAL_OBJECTS"; case KIND_STRICKLER_TABLE: return "STRICKLER_TABLES"; - case KIND_LAND_COVER: return "LAND_COVERS"; + case KIND_LAND_COVER_MAP: return "LAND_COVER_MAPS"; + case KIND_REGION: return "REGIONS"; + case KIND_BC_POLYGON: return "BOUNDARY_POLYGONS"; default: break; } return QString(); @@ -731,10 +829,11 @@ LightApp_DataObject* HYDROGUI_DataModel::createObject( SUIT_DataObject* const ObjectKind aKind = theModelObject->GetKind(); bool visibility = aKind == KIND_IMAGE || aKind == KIND_POLYLINEXY || aKind == KIND_POLYLINE || - aKind == KIND_SHAPES_GROUP || aKind == KIND_SPLITTED_GROUP || aKind == KIND_ZONE || + aKind == KIND_SHAPES_GROUP || aKind == KIND_SPLIT_GROUP || aKind == KIND_ZONE || aKind == KIND_IMMERSIBLE_ZONE || aKind == KIND_REGION || aKind == KIND_BATHYMETRY || aKind == KIND_OBSTACLE || aKind == KIND_STREAM || aKind == KIND_CHANNEL || - aKind == KIND_DIGUE || aKind == KIND_DUMMY_3D || aKind == KIND_LAND_COVER; + aKind == KIND_DIGUE || aKind == KIND_DUMMY_3D || aKind == KIND_LAND_COVER_MAP || + aKind == KIND_BC_POLYGON; if ( !visibility ) { Handle(HYDROData_Profile) aProfObj = Handle(HYDROData_Profile)::DownCast( theModelObject ); @@ -963,10 +1062,10 @@ void HYDROGUI_DataModel::buildObjectTree( SUIT_DataObject* theParent, createObject( aPolylineSect, aPolyline, aGuiObj->entry(), false ); LightApp_DataObject* aCaseAOSect = - createObject( aGuiObj, tr( partitionName( KIND_ARTIFICIAL_OBJECT ).toAscii() ), + createObject( aGuiObj, tr( partitionName( KIND_ARTIFICIAL_OBJECT ).toLatin1() ), aGuiObj->entry() ); LightApp_DataObject* aCaseNOSect = - createObject( aGuiObj, tr( partitionName( KIND_NATURAL_OBJECT ).toAscii() ), + createObject( aGuiObj, tr( partitionName( KIND_NATURAL_OBJECT ).toLatin1() ), aGuiObj->entry() ); HYDROData_SequenceOfObjects aSeq = aCaseObj->GetGeometryObjects(); @@ -987,12 +1086,26 @@ void HYDROGUI_DataModel::buildObjectTree( SUIT_DataObject* theParent, aNObject = Handle(HYDROData_NaturalObject)::DownCast( anEntity ); if ( !aNObject.IsNull() ) createObject( aCaseNOSect, aNObject, aGuiObj->entry(), false ); - } + } } + + LightApp_DataObject* aBoundaryPolygonSect = + createObject( aGuiObj, tr( "CASE_BOUNDARY_POLYGONS" ), aGuiObj->entry() ); + HYDROData_SequenceOfObjects aBCPolygons = aCaseObj->GetBoundaryPolygons(); + for (int i = 1; i <= aBCPolygons.Size(); i++ ) + createObject( aBoundaryPolygonSect, aBCPolygons(i), aGuiObj->entry(), false ); + + LightApp_DataObject* aLandCoverMapSect = + createObject( aGuiObj, tr( "CASE_LAND_COVER_MAP" ), aGuiObj->entry() ); + + Handle(HYDROData_LandCoverMap) aLandCoverMap = aCaseObj->GetLandCoverMap(); + if ( !aLandCoverMap.IsNull() && !aLandCoverMap->IsRemoved() ) + createObject( aLandCoverMapSect, aLandCoverMap, aGuiObj->entry(), false ); + LightApp_DataObject* aCaseRegionsSect = createObject( aGuiObj, tr( "CASE_REGIONS" ), aGuiObj->entry() ); - HYDROData_SequenceOfObjects aCaseRegions = aCaseObj->GetRegions( false ); + HYDROData_SequenceOfObjects aCaseRegions = aCaseObj->GetRegions(); HYDROData_SequenceOfObjects::Iterator anIter( aCaseRegions ); for ( ; anIter.More(); anIter.Next() ) { @@ -1001,26 +1114,13 @@ void HYDROGUI_DataModel::buildObjectTree( SUIT_DataObject* theParent, if( !aCaseRegion.IsNull() && !aCaseRegion->IsRemoved() ) createRegion( aCaseRegionsSect, aCaseRegion, "", true, theIsInOperation ); } - - LightApp_DataObject* aCaseLandCoverRegionsSect = - createObject( aGuiObj, tr( "CASE_LAND_COVER_REGIONS" ), aGuiObj->entry() ); - - HYDROData_SequenceOfObjects aCaseLandCoverRegions = aCaseObj->GetRegions( true ); - anIter.Init( aCaseLandCoverRegions ); - for ( ; anIter.More(); anIter.Next() ) - { - Handle(HYDROData_Region) aCaseLCRegion = - Handle(HYDROData_Region)::DownCast( anIter.Value() ); - if( !aCaseLCRegion.IsNull() && !aCaseLCRegion->IsRemoved() ) - createRegion( aCaseLandCoverRegionsSect, aCaseLCRegion, "", true, theIsInOperation ); - } - + #ifdef DEB_GROUPS HYDROData_SequenceOfObjects aCalcGroups = aCaseObj->GetGeometryGroups(); buildObjectPartition( aGuiObj, aCalcGroups, tr( "OBJECT_GROUPS" ), false ); - HYDROData_SequenceOfObjects aCalcSplitGroups = aCaseObj->GetSplittedGroups(); - buildObjectPartition( aGuiObj, aCalcSplitGroups, tr( "CASE_SPLITTED_GROUPS" ), false ); + HYDROData_SequenceOfObjects aCalcSplitGroups = aCaseObj->GetSplitGroups(); + buildObjectPartition( aGuiObj, aCalcSplitGroups, tr( "CASE_SPLIT_GROUPS" ), false ); #endif } @@ -1085,19 +1185,34 @@ void HYDROGUI_DataModel::buildObjectTree( SUIT_DataObject* theParent, createObject( aGuiObj, aBottomPolyline, aGuiObj->entry(), false ); } } - else if ( anObjectKind == KIND_LAND_COVER ) + else if ( anObjectKind == KIND_LAND_COVER_MAP ) { - Handle(HYDROData_LandCover) aLandCoverObj = - Handle(HYDROData_LandCover)::DownCast( aDataObj ); + Handle(HYDROData_LandCoverMap) aLandCoverMapObj = + Handle(HYDROData_LandCoverMap)::DownCast( aDataObj ); - HYDROData_SequenceOfObjects aPolylines = aLandCoverObj->GetPolylines(); - buildObjectPartition( aGuiObj, aPolylines, tr( "LAND_COVER_POLYLINES" ), true ); + /*TODO: reference objects of the land cover map + HYDROData_SequenceOfObjects aPolylines = aLandCoverMapObj->GetPolylines(); + buildObjectPartition( aGuiObj, aPolylines, tr( "LAND_COVER_POLYLINES" ), true );*/ } + else if ( anObjectKind == KIND_BC_POLYGON ) + { + Handle(HYDROData_BCPolygon) aBCObj = + Handle(HYDROData_BCPolygon)::DownCast( aDataObj ); + + LightApp_DataObject* aPolylineSect = + createObject( aGuiObj, tr( "BC_POLYGON_POLYLINE" ), aGuiObj->entry() ); + + Handle(HYDROData_PolylineXY) aPolyline = aBCObj->GetPolyline(); + if ( !aPolyline.IsNull() && !aPolyline->IsRemoved() ) + createObject( aPolylineSect, aPolyline, aGuiObj->entry(), false ); + } + HYDROGUI_Module* aModule = dynamic_cast( module() ); + if( aModule ) + aModule->enableLCMActions(); } -void HYDROGUI_DataModel::buildCaseTree( SUIT_DataObject* theParent, Handle(HYDROData_CalculationCase) theCase, - const bool theLandCover ) +void HYDROGUI_DataModel::buildCaseTree( SUIT_DataObject* theParent, Handle(HYDROData_CalculationCase) theCase ) { if ( !theCase.IsNull() ) { @@ -1113,7 +1228,7 @@ void HYDROGUI_DataModel::buildCaseTree( SUIT_DataObject* theParent, Handle(HYDRO new HYDROGUI_DropTargetObject( theParent, tr( "NEW_REGION" ), "", true ); - HYDROData_SequenceOfObjects aCaseRegions = theCase->GetRegions( theLandCover ); + HYDROData_SequenceOfObjects aCaseRegions = theCase->GetRegions(); HYDROData_SequenceOfObjects::Iterator anIter( aCaseRegions ); for ( ; anIter.More(); anIter.Next() ) { @@ -1184,8 +1299,7 @@ SUIT_DataObject* HYDROGUI_DataModel::findChildByName( const SUIT_DataObject* the } bool HYDROGUI_DataModel::createNewRegion( Handle(HYDROData_CalculationCase) theCase, - const QList& theZonesList, - const bool theLandCover ) + const QList& theZonesList ) { bool isOk = !theCase.IsNull(); if ( isOk ) @@ -1199,7 +1313,7 @@ bool HYDROGUI_DataModel::createNewRegion( Handle(HYDROData_CalculationCase) theC { if ( aRegion.IsNull() ) { - aRegion = theCase->AddNewRegion( aZone, theLandCover ); + aRegion = theCase->AddNewRegion( aZone ); isOk = !aRegion.IsNull(); } else