From 4f5d7b65a526bf636329537433751f63d4eb46fd Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 5 Dec 2025 15:29:23 +0100 Subject: [PATCH] #13258 Add support for more surface file type in Import ensemble surface --- .../RicImportEnsembleSurfaceFeature.cpp | 17 +++--- .../Commands/RicRecursiveFileSearchDialog.cpp | 35 ++++++------ .../Commands/RicRecursiveFileSearchDialog.h | 4 +- .../Surfaces/RimEnsembleSurface.cpp | 10 +++- .../Surfaces/RimEnsembleSurface.h | 1 + .../Surfaces/RimSurfaceCollection.cpp | 57 +++++++++++-------- .../Surfaces/RimSurfaceCollection.h | 2 + 7 files changed, 72 insertions(+), 54 deletions(-) diff --git a/ApplicationLibCode/Commands/RicImportEnsembleSurfaceFeature.cpp b/ApplicationLibCode/Commands/RicImportEnsembleSurfaceFeature.cpp index ff5532fc2f..cb1c3f6758 100644 --- a/ApplicationLibCode/Commands/RicImportEnsembleSurfaceFeature.cpp +++ b/ApplicationLibCode/Commands/RicImportEnsembleSurfaceFeature.cpp @@ -109,10 +109,10 @@ void RicImportEnsembleSurfaceFeature::importSingleEnsembleSurfaceFromFiles( cons std::map keyFileComponentsForAllFiles = RiaFilePathTools::keyPathComponentsForEachFilePath( layerFileNames ); - std::vector surfaces; + std::vector surfaces; for ( int i = 0; i < layerFileNames.size(); i++ ) { - surfaces.push_back( new RimFileSurface ); + surfaces.push_back( RimSurfaceCollection::createSurfaceFromFile( layerFileNames[i] ) ); } auto fileCount = static_cast( layerFileNames.size() ); @@ -121,23 +121,22 @@ void RicImportEnsembleSurfaceFeature::importSingleEnsembleSurfaceFromFiles( cons { auto fileName = layerFileNames[i]; - auto fileSurface = surfaces[i]; - fileSurface->setSurfaceFilePath( fileName ); + auto surface = surfaces[i]; auto shortName = RiaEnsembleNameTools::uniqueShortNameFromComponents( fileName, keyFileComponentsForAllFiles, ensembleName ); - fileSurface->setUserDescription( shortName ); + surface->setUserDescription( shortName ); - auto isOk = fileSurface->onLoadData(); + auto isOk = surface->onLoadData(); if ( !isOk ) { - delete fileSurface; + delete surface; surfaces[i] = nullptr; } } { // Remove null pointers from vector of surfaces - std::vector tmp; + std::vector tmp; for ( auto s : surfaces ) { if ( s != nullptr ) tmp.push_back( s ); @@ -151,7 +150,7 @@ void RicImportEnsembleSurfaceFeature::importSingleEnsembleSurfaceFromFiles( cons auto ensemble = new RimEnsembleSurface; ensemble->setCollectionName( ensembleName ); for ( auto surface : surfaces ) - ensemble->addFileSurface( surface ); + ensemble->addSurface( surface ); ensemble->loadDataAndUpdate(); diff --git a/ApplicationLibCode/Commands/RicRecursiveFileSearchDialog.cpp b/ApplicationLibCode/Commands/RicRecursiveFileSearchDialog.cpp index f2759cbbec..278e3d0dbb 100644 --- a/ApplicationLibCode/Commands/RicRecursiveFileSearchDialog.cpp +++ b/ApplicationLibCode/Commands/RicRecursiveFileSearchDialog.cpp @@ -216,7 +216,9 @@ RicRecursiveFileSearchDialogResult RicRecursiveFileSearchDialog::runRecursiveSea for ( const auto& fileType : fileTypes ) { - QString item = QString( "%1 (%2)" ).arg( fileNameForType( fileType ) ).arg( fileExtensionForType( fileType ) ); + QStringList extensions = fileExtensionForType( fileType ); + QString extensionsText = extensions.join( " " ); + QString item = QString( "%1 (%2)" ).arg( fileNameForType( fileType ) ).arg( extensionsText ); dialog.m_fileTypeField->addItem( item, static_cast( fileType ) ); } @@ -237,7 +239,7 @@ RicRecursiveFileSearchDialogResult RicRecursiveFileSearchDialog::runRecursiveSea if ( !fileTypes.empty() ) { - dialog.m_fileExtensions = QStringList( fileExtensionForType( fileTypes.front() ) ); + dialog.m_fileExtensions = fileExtensionForType( fileTypes.front() ); dialog.m_fileType = fileTypes.front(); } @@ -876,10 +878,9 @@ void RicRecursiveFileSearchDialog::slotFileTypeChanged( int index ) { m_fileType = static_cast( m_fileTypeField->itemData( index ).toInt() ); - QString extension = fileExtensionForType( m_fileType ); - m_fileExtensions = QStringList( extension ); + m_fileExtensions = fileExtensionForType( m_fileType ); - m_fileExtensionField->setText( extension ); + m_fileExtensionField->setText( m_fileExtensions.join( " " ) ); updateEffectiveFilter(); } @@ -1183,32 +1184,32 @@ QStringList RicRecursiveFileSearchDialog::fileTypeToExtensionStrings( const std: //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RicRecursiveFileSearchDialog::fileExtensionForType( FileType fileType ) +QStringList RicRecursiveFileSearchDialog::fileExtensionForType( FileType fileType ) { switch ( fileType ) { case FileType::GRDECL: - return "GRDECL"; + return { "GRDECL" }; case FileType::EGRID: - return "EGRID"; + return { "EGRID" }; case FileType::GRID: - return "GRID"; + return { "GRID" }; case FileType::SMSPEC: - return "SMSPEC"; + return { "SMSPEC" }; case FileType::ESMRY: - return "ESMRY"; + return { "ESMRY" }; case FileType::STIMPLAN_FRACTURE: - return "XML"; + return { "XML" }; case FileType::LAS: - return "LAS"; + return { "LAS" }; case FileType::SURFACE: - return "TS"; + return { "TS", "PTL", "DAT", "XYZ", "VTU", "IRAP", "GRI", "PVD" }; case FileType::STIMPLAN_SUMMARY: - return "CSV"; + return { "CSV" }; case FileType::REVEAL_SUMMARY: - return "CSV"; + return { "CSV" }; default: - return "*"; + return { "*" }; } }; diff --git a/ApplicationLibCode/Commands/RicRecursiveFileSearchDialog.h b/ApplicationLibCode/Commands/RicRecursiveFileSearchDialog.h index 18b8608da8..bae7706a8c 100644 --- a/ApplicationLibCode/Commands/RicRecursiveFileSearchDialog.h +++ b/ApplicationLibCode/Commands/RicRecursiveFileSearchDialog.h @@ -78,8 +78,8 @@ public: const QString& fileNameFilter, const std::vector& fileTypes ); - static QString fileNameForType( FileType fileType ); - static QString fileExtensionForType( FileType fileType ); + static QString fileNameForType( FileType fileType ); + static QStringList fileExtensionForType( FileType fileType ); static RiaDefines::FileType mapSummaryFileType( RicRecursiveFileSearchDialog::FileType fileType ); diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.cpp b/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.cpp index cfc085f220..f33b4d1c16 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.cpp +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.cpp @@ -67,6 +67,14 @@ RimEnsembleSurface::RimEnsembleSurface() /// //-------------------------------------------------------------------------------------------------- void RimEnsembleSurface::addFileSurface( RimFileSurface* fileSurface ) +{ + addSurface( fileSurface ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEnsembleSurface::addSurface( RimSurface* surface ) { if ( !sourceFileSurfaceCollection() ) { @@ -75,7 +83,7 @@ void RimEnsembleSurface::addFileSurface( RimFileSurface* fileSurface ) addSubCollection( coll ); } - sourceFileSurfaceCollection()->addSurface( fileSurface ); + sourceFileSurfaceCollection()->addSurface( surface ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.h b/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.h index 9842a1b71e..e521b7a529 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.h +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.h @@ -45,6 +45,7 @@ public: RimEnsembleSurface(); void addFileSurface( RimFileSurface* fileSurface ); + void addSurface( RimSurface* surface ); void loadDataAndUpdate(); const RigSurface* statisticsSurface() const; diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.cpp b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.cpp index b697457ed5..fb2d6d44b4 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.cpp @@ -132,6 +132,37 @@ std::vector RimSurfaceCollection::ensembleSurfaces() const return descendantsIncludingThisOfType(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSurface* RimSurfaceCollection::createSurfaceFromFile( const QString& fileName ) +{ + RimSurface* newSurface = nullptr; + + auto extension = QFileInfo( fileName ).suffix().toLower(); + + if ( extension == "pvd" ) + { + RimFractureSurface* fractureSurface = new RimFractureSurface; + fractureSurface->setSurfaceFilePath( fileName ); + newSurface = fractureSurface; + } + else if ( extension == "irap" || extension == "gri" ) + { + auto regularFileSurface = new RimRegularFileSurface; + regularFileSurface->setFilePath( fileName ); + newSurface = regularFileSurface; + } + else + { + RimFileSurface* fileSurface = new RimFileSurface; + fileSurface->setSurfaceFilePath( fileName ); + newSurface = fileSurface; + } + + return newSurface; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -145,31 +176,7 @@ RimSurface* RimSurfaceCollection::importSurfacesFromFiles( const QStringList& fi for ( const QString& newFileName : fileNames ) { - RimSurface* newSurface = nullptr; - - auto extension = QFileInfo( newFileName ).suffix().toLower(); - - if ( extension == "pvd" ) - { - RimFractureSurface* fractureSurface = new RimFractureSurface; - fractureSurface->setSurfaceFilePath( newFileName ); - - newSurface = fractureSurface; - } - else if ( extension == "irap" || extension == "gri" ) - { - auto regularFileSurface = new RimRegularFileSurface; - regularFileSurface->setFilePath( newFileName ); - - newSurface = regularFileSurface; - } - else - { - RimFileSurface* fileSurface = new RimFileSurface; - - fileSurface->setSurfaceFilePath( newFileName ); - newSurface = fileSurface; - } + RimSurface* newSurface = createSurfaceFromFile( newFileName ); auto newColor = RiaColorTables::categoryPaletteColors().cycledColor3f( existingSurfCount + newSurfCount ); newSurface->setColor( newColor ); diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.h b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.h index d8c554f390..a9a3f6eb3d 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.h @@ -45,6 +45,8 @@ public: RimSurface* copySurfaces( std::vector surfaces ); RimSurface* addSurfacesAtIndex( int index, std::vector surfaces ); + static RimSurface* createSurfaceFromFile( const QString& fileName ); + void addSubCollection( RimSurfaceCollection* collection ); RimSurfaceCollection* getSubCollection( const QString& name ) const; void deleteSubCollection( const QString& name );