mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-16 18:34:54 -06:00
* Better minimum width for well log tracks * Fix alignment of scrollbar in Well log plots * Better Well Log Plot export * Hide scroll bar before plotting * Better borders * Create plots through Python * #4817 Create WBS plots with Python * Rebase Summary and WellLogPlot on top of a new RimPlot * Also Python: Allow setting folder as a parameter to export_snapshots * #4832 Prepare for well path import command * Well Path import WIP * #4830 #4832 Import well paths and well log files from file using Python. * #4837 Implement import of formation names in Python * Fix debug build issue * Fix RiaLogging build issue * Fix warnings * Yet another RiaLogging.h import added * #4839 Import exporting of las and ascii files from well log plots
233 lines
9.5 KiB
C++
233 lines
9.5 KiB
C++
#include "RimFileWellPath.h"
|
|
#include "QDir"
|
|
#include "QFileInfo"
|
|
#include "RifWellPathImporter.h"
|
|
#include "RimTools.h"
|
|
#include "cafUtils.h"
|
|
|
|
CAF_PDM_SOURCE_INIT( RimFileWellPath, "WellPath" );
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
RimFileWellPath::RimFileWellPath()
|
|
{
|
|
CAF_PDM_InitObject( "File Well Path", ":/Well.png", "", "" );
|
|
|
|
CAF_PDM_InitFieldNoDefault( &id, "WellPathId", "Id", "", "", "" );
|
|
id.uiCapability()->setUiReadOnly( true );
|
|
id.xmlCapability()->disableIO();
|
|
CAF_PDM_InitFieldNoDefault( &sourceSystem, "SourceSystem", "Source System", "", "", "" );
|
|
sourceSystem.uiCapability()->setUiReadOnly( true );
|
|
sourceSystem.xmlCapability()->disableIO();
|
|
CAF_PDM_InitFieldNoDefault( &utmZone, "UTMZone", "UTM Zone", "", "", "" );
|
|
utmZone.uiCapability()->setUiReadOnly( true );
|
|
utmZone.xmlCapability()->disableIO();
|
|
CAF_PDM_InitFieldNoDefault( &updateDate, "WellPathUpdateDate", "Update Date", "", "", "" );
|
|
updateDate.uiCapability()->setUiReadOnly( true );
|
|
updateDate.xmlCapability()->disableIO();
|
|
CAF_PDM_InitFieldNoDefault( &updateUser, "WellPathUpdateUser", "Update User", "", "", "" );
|
|
updateUser.uiCapability()->setUiReadOnly( true );
|
|
updateUser.xmlCapability()->disableIO();
|
|
CAF_PDM_InitFieldNoDefault( &m_surveyType, "WellPathSurveyType", "Survey Type", "", "", "" );
|
|
m_surveyType.uiCapability()->setUiReadOnly( true );
|
|
m_surveyType.xmlCapability()->disableIO();
|
|
|
|
CAF_PDM_InitField( &m_filepath, "WellPathFilepath", QString( "" ), "File Path", "", "", "" );
|
|
m_filepath.uiCapability()->setUiReadOnly( true );
|
|
CAF_PDM_InitField( &m_wellPathIndexInFile, "WellPathNumberInFile", -1, "Well Number in File", "", "", "" );
|
|
m_wellPathIndexInFile.uiCapability()->setUiReadOnly( true );
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
RimFileWellPath::~RimFileWellPath() {}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
QString RimFileWellPath::filepath() const
|
|
{
|
|
return m_filepath();
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
void RimFileWellPath::setFilepath( const QString& path )
|
|
{
|
|
m_filepath = path;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
int RimFileWellPath::wellPathIndexInFile() const
|
|
{
|
|
return m_wellPathIndexInFile();
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
void RimFileWellPath::setWellPathIndexInFile( int index )
|
|
{
|
|
m_wellPathIndexInFile = index;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
void RimFileWellPath::setSurveyType( QString surveyType )
|
|
{
|
|
m_surveyType = surveyType;
|
|
if ( m_surveyType == "PLAN" )
|
|
setWellPathColor( cvf::Color3f( 0.999f, 0.333f, 0.0f ) );
|
|
else if ( m_surveyType == "PROTOTYPE" )
|
|
setWellPathColor( cvf::Color3f( 0.0f, 0.333f, 0.999f ) );
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
void RimFileWellPath::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
|
|
{
|
|
RimWellPath::defineUiOrdering( uiConfigName, uiOrdering );
|
|
|
|
caf::PdmUiGroup* fileInfoGroup = uiOrdering.createGroupBeforeGroup( "Simulation Well", "File" );
|
|
fileInfoGroup->add( &m_filepath );
|
|
fileInfoGroup->add( &m_wellPathIndexInFile );
|
|
|
|
if ( !id().isEmpty() ) uiOrdering.insertBeforeItem( m_datumElevation.uiCapability(), &id );
|
|
if ( !sourceSystem().isEmpty() ) uiOrdering.insertBeforeItem( m_datumElevation.uiCapability(), &sourceSystem );
|
|
if ( !utmZone().isEmpty() ) uiOrdering.insertBeforeItem( m_datumElevation.uiCapability(), &utmZone );
|
|
if ( !updateDate().isEmpty() ) uiOrdering.insertBeforeItem( m_datumElevation.uiCapability(), &updateDate );
|
|
if ( !updateUser().isEmpty() ) uiOrdering.insertBeforeItem( m_datumElevation.uiCapability(), &updateUser );
|
|
if ( !m_surveyType().isEmpty() ) uiOrdering.insertBeforeItem( m_datumElevation.uiCapability(), &m_surveyType );
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
/// Read JSON or ascii file containing well path data
|
|
//--------------------------------------------------------------------------------------------------
|
|
bool RimFileWellPath::readWellPathFile( QString* errorMessage, RifWellPathImporter* wellPathImporter )
|
|
{
|
|
if ( caf::Utils::fileExists( m_filepath() ) )
|
|
{
|
|
RifWellPathImporter::WellData wellData = wellPathImporter->readWellData( m_filepath(), m_wellPathIndexInFile() );
|
|
RifWellPathImporter::WellMetaData wellMetaData = wellPathImporter->readWellMetaData( m_filepath(),
|
|
m_wellPathIndexInFile() );
|
|
// General well info
|
|
|
|
setName( wellData.m_name );
|
|
id = wellMetaData.m_id;
|
|
sourceSystem = wellMetaData.m_sourceSystem;
|
|
utmZone = wellMetaData.m_utmZone;
|
|
updateUser = wellMetaData.m_updateUser;
|
|
setSurveyType( wellMetaData.m_surveyType );
|
|
updateDate = wellMetaData.m_updateDate.toString( "d MMMM yyyy" );
|
|
|
|
setWellPathGeometry( wellData.m_wellPathGeometry.p() );
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
if ( errorMessage ) ( *errorMessage ) = "Could not find the well path file: " + m_filepath();
|
|
return false;
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
QString RimFileWellPath::getCacheDirectoryPath()
|
|
{
|
|
QString cacheDirPath = RimTools::getCacheRootDirectoryPathFromProject();
|
|
cacheDirPath += "_wellpaths";
|
|
return cacheDirPath;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
QString RimFileWellPath::getCacheFileName()
|
|
{
|
|
if ( m_filepath().isEmpty() )
|
|
{
|
|
return "";
|
|
}
|
|
|
|
QString cacheFileName;
|
|
|
|
// Make the path correct related to the possibly new project filename
|
|
QString newCacheDirPath = getCacheDirectoryPath();
|
|
QFileInfo oldCacheFile( m_filepath );
|
|
|
|
cacheFileName = newCacheDirPath + "/" + oldCacheFile.fileName();
|
|
|
|
return cacheFileName;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
void RimFileWellPath::setupBeforeSave()
|
|
{
|
|
// SSIHUB is the only source for populating Id, use text in this field to decide if the cache file must be copied to new project cache location
|
|
if ( !isStoredInCache() )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( m_filepath().isEmpty() )
|
|
{
|
|
return;
|
|
}
|
|
|
|
QDir::root().mkpath( getCacheDirectoryPath() );
|
|
|
|
QString newCacheFileName = getCacheFileName();
|
|
|
|
// Use QFileInfo to get same string representation to avoid issues with mix of forward and backward slashes
|
|
QFileInfo prevFileInfo( m_filepath );
|
|
QFileInfo currentFileInfo( newCacheFileName );
|
|
|
|
if ( prevFileInfo.absoluteFilePath().compare( currentFileInfo.absoluteFilePath() ) != 0 )
|
|
{
|
|
QFile::copy( m_filepath, newCacheFileName );
|
|
|
|
m_filepath = newCacheFileName;
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
bool RimFileWellPath::isStoredInCache()
|
|
{
|
|
// SSIHUB is the only source for populating Id, use text in this field to decide if the cache file must be copied to new project cache location
|
|
return !id().isEmpty();
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
void RimFileWellPath::updateFilePathsFromProjectPath( const QString& newProjectPath, const QString& oldProjectPath )
|
|
{
|
|
RimWellPath::updateFilePathsFromProjectPath( newProjectPath, oldProjectPath );
|
|
|
|
if ( isStoredInCache() )
|
|
{
|
|
QString newCacheFileName = getCacheFileName();
|
|
|
|
if ( caf::Utils::fileExists( newCacheFileName ) )
|
|
{
|
|
m_filepath = newCacheFileName;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_filepath = RimTools::relocateFile( m_filepath(), newProjectPath, oldProjectPath, nullptr, nullptr );
|
|
}
|
|
}
|