diff --git a/ApplicationLibCode/Commands/SurfaceCommands/RicImportSurfacesFeature.cpp b/ApplicationLibCode/Commands/SurfaceCommands/RicImportSurfacesFeature.cpp index c1f8f17f67..21be79899a 100644 --- a/ApplicationLibCode/Commands/SurfaceCommands/RicImportSurfacesFeature.cpp +++ b/ApplicationLibCode/Commands/SurfaceCommands/RicImportSurfacesFeature.cpp @@ -45,7 +45,7 @@ void RicImportSurfacesFeature::onActionTriggered( bool isChecked ) QStringList fileNames = RiuFileDialogTools::getOpenFileNames( Riu3DMainWindowTools::mainWindowWidget(), "Import Surfaces", defaultDir, - "Surface files (*.ptl *.ts *.dat *.vtu *.xyz);;All Files (*.*)" ); + "Surface files (*.ptl *.ts *.dat *.vtu *.pvd *.xyz);;All Files (*.*)" ); if ( fileNames.isEmpty() ) return; diff --git a/ApplicationLibCode/FileInterface/RifVtkSurfaceImporter.cpp b/ApplicationLibCode/FileInterface/RifVtkSurfaceImporter.cpp index d44d5a986c..898e1261a0 100644 --- a/ApplicationLibCode/FileInterface/RifVtkSurfaceImporter.cpp +++ b/ApplicationLibCode/FileInterface/RifVtkSurfaceImporter.cpp @@ -237,7 +237,7 @@ std::vector parsePvdDatasets( const std::stri double timestep = std::stod( timestepStr ); std::string fullPath = std::filesystem::absolute( std::filesystem::path( baseDir ) / file ).string(); - datasets.push_back( { timestep, fullPath, {} } ); + datasets.push_back( { timestep, fullPath } ); } datasetElem = datasetElem->NextSiblingElement( "DataSet" ); diff --git a/ApplicationLibCode/FileInterface/RifVtkSurfaceImporter.h b/ApplicationLibCode/FileInterface/RifVtkSurfaceImporter.h index 9ae82a6631..1987a0013f 100644 --- a/ApplicationLibCode/FileInterface/RifVtkSurfaceImporter.h +++ b/ApplicationLibCode/FileInterface/RifVtkSurfaceImporter.h @@ -41,9 +41,8 @@ namespace RifVtkSurfaceImporter struct PvdDataset { - double timestep; - std::string filename; - std::map> properties; + double timestep; + std::string filename; }; bool importFromFile( std::string filename, RigGocadData* gocadData ); diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.cpp b/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.cpp index 735f41fd0d..27e2dda12c 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.cpp +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.cpp @@ -119,6 +119,12 @@ void RimFractureSurface::fieldChangedByUi( const caf::PdmFieldHandle* changedFie bool RimFractureSurface::updateSurfaceData() { bool result = true; + + if ( m_surfacePerTimeStep.empty() ) + { + loadDataFromFile(); + } + /* if ( m_vertices.empty() ) { @@ -157,6 +163,9 @@ bool RimFractureSurface::updateSurfaceData() //-------------------------------------------------------------------------------------------------- void RimFractureSurface::clearCachedNativeData() { + m_secondsSinceSimulationStart.clear(); + m_surfacePerTimeStep.clear(); + /* m_vertices.clear(); m_tringleIndices.clear(); @@ -168,6 +177,18 @@ void RimFractureSurface::clearCachedNativeData() //-------------------------------------------------------------------------------------------------- bool RimFractureSurface::loadDataFromFile() { + auto surfaceInfo = RifVtkSurfaceImporter::parsePvdDatasets( m_surfaceDefinitionFilePath().path().toStdString() ); + + for ( const auto& s : surfaceInfo ) + { + RigGocadData gocadData; + if ( RifVtkSurfaceImporter::importFromFile( s.filename, &gocadData ) ) + { + m_secondsSinceSimulationStart.push_back( s.timestep ); + m_surfacePerTimeStep.push_back( gocadData ); + } + } + return false; /* diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.h b/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.h index c79ef7a792..728039853f 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.h +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.h @@ -20,6 +20,11 @@ #include "RimSurface.h" +#include "cafPdmChildArrayField.h" + +class RimFileSurface; +class RigGocadData; + class RimFractureSurface : public RimSurface { CAF_PDM_HEADER_INIT; @@ -45,4 +50,7 @@ private: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; caf::PdmField m_surfaceDefinitionFilePath; + + std::vector m_secondsSinceSimulationStart; + std::vector m_surfacePerTimeStep; }; diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.cpp b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.cpp index 0e668da9b1..b81f689d98 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceCollection.cpp @@ -41,6 +41,7 @@ #include "cafPdmFieldScriptingCapability.h" #include "cafPdmObjectScriptingCapability.h" +#include "RimFractureSurface.h" #include #include @@ -142,14 +143,26 @@ RimSurface* RimSurfaceCollection::importSurfacesFromFiles( const QStringList& fi for ( const QString& newFileName : fileNames ) { - RimFileSurface* newSurface = new RimFileSurface; + RimSurface* newSurface = nullptr; + + if ( newFileName.endsWith( ".pvd" ) ) + { + RimFractureSurface* fractureSurface = new RimFractureSurface; + fractureSurface->setSurfaceFilePath( newFileName ); + + newSurface = fractureSurface; + } + else + { + RimFileSurface* fileSurface = new RimFileSurface; + + fileSurface->setSurfaceFilePath( newFileName ); + newSurface = fileSurface; + } auto newColor = RiaColorTables::categoryPaletteColors().cycledColor3f( existingSurfCount + newSurfCount ); - - newSurface->setSurfaceFilePath( newFileName ); - newSurface->setUserDescription( QFileInfo( newFileName ).fileName() ); - newSurface->setColor( newColor ); + newSurface->setUserDescription( QFileInfo( newFileName ).fileName() ); if ( !newSurface->onLoadData() ) {