///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2015- Statoil ASA // Copyright (C) 2015- Ceetron Solutions AS // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at // for more details. // ///////////////////////////////////////////////////////////////////////////////// #include "RimCase.h" #include "RiaApplication.h" #include "RicfCommandObject.h" #include "RimFormationNames.h" #include "RimFormationNamesCollection.h" #include "RimOilField.h" #include "RimProject.h" #include "RimTimeStepFilter.h" #include "cafPdmObjectFactory.h" #include "Rim2dIntersectionView.h" #include "Rim2dIntersectionViewCollection.h" #include "RimGridView.h" #include "RimIntersection.h" CAF_PDM_XML_ABSTRACT_SOURCE_INIT( RimCase, "RimCase" ); //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimCase::RimCase() : m_isInActiveDestruction( false ) { CAF_PDM_InitObject( "Case", ":/Case48x48.png", "", "" ); RICF_InitField( &caseUserDescription, "CaseUserDescription", QString(), "Case Name", "", "", "" ); RICF_InitField( &caseId, "CaseId", -1, "Case ID", "", "", "" ); caseId.uiCapability()->setUiReadOnly( true ); caseId.capability()->setIOWriteable( false ); CAF_PDM_InitFieldNoDefault( &activeFormationNames, "DefaultFormationNames", "Formation Names File", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_timeStepFilter, "TimeStepFilter", "Time Step Filter", "", "", "" ); m_timeStepFilter.uiCapability()->setUiHidden( true ); m_timeStepFilter.uiCapability()->setUiTreeChildrenHidden( true ); m_timeStepFilter = new RimTimeStepFilter; CAF_PDM_InitFieldNoDefault( &m_2dIntersectionViewCollection, "IntersectionViewCollection", "2D Intersection Views", ":/CrossSections16x16.png", "", "" ); m_2dIntersectionViewCollection.uiCapability()->setUiTreeHidden( true ); m_2dIntersectionViewCollection = new Rim2dIntersectionViewCollection(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimCase::~RimCase() { m_isInActiveDestruction = true; // Needed because destruction of m_intersectionViews results in call to views() } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector RimCase::views() const { if ( m_isInActiveDestruction ) return std::vector(); std::vector allViews = this->allSpecialViews(); std::vector isectViews = m_2dIntersectionViewCollection->views(); for ( auto view : isectViews ) { allViews.push_back( view ); } return allViews; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector RimCase::gridViews() const { std::vector grViews; for ( Rim3dView* const view : views() ) { RimGridView* grView = dynamic_cast( view ); if ( grView ) grViews.push_back( grView ); } return grViews; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- cvf::Vec3d RimCase::displayModelOffset() const { return cvf::Vec3d::ZERO; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimCase::setFormationNames( RimFormationNames* formationNames ) { activeFormationNames = formationNames; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- size_t RimCase::uiToNativeTimeStepIndex( size_t uiTimeStepIndex ) { std::vector nativeTimeIndices = m_timeStepFilter->filteredTimeSteps(); if ( nativeTimeIndices.size() > 0 ) { return nativeTimeIndices.at( uiTimeStepIndex ); } return uiTimeStepIndex; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- Rim2dIntersectionViewCollection* RimCase::intersectionViewCollection() { return m_2dIntersectionViewCollection; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QList RimCase::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly ) { QList options; if ( fieldNeedingOptions == &activeFormationNames ) { RimProject* proj = RiaApplication::instance()->project(); if ( proj && proj->activeOilField() && proj->activeOilField()->formationNamesCollection() ) { for ( RimFormationNames* fnames : proj->activeOilField()->formationNamesCollection()->formationNamesList() ) { options.push_back( caf::PdmOptionItemInfo( fnames->fileNameWoPath(), fnames, false, fnames->uiCapability()->uiIconProvider() ) ); } } options.push_front( caf::PdmOptionItemInfo( "None", nullptr ) ); } return options; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimCase::initAfterRead() { if ( caseId() == -1 ) { RiaApplication::instance()->project()->assignCaseIdToCase( this ); } }