From 209146ebae13cded392570f98bc52abdb717ebf6 Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Mon, 1 Apr 2019 16:21:43 +0200 Subject: [PATCH] #4260 Support changing IJK bounding box in sector model and remodel UI --- ApplicationCode/Application/RiaPreferences.h | 2 +- .../RicfExportVisibleCells.cpp | 8 +- ...icExportCompletionsWellSegmentsFeature.cpp | 2 +- ...RicWellPathExportCompletionDataFeature.cpp | 2 +- .../ExportCommands/RicExportCarfin.cpp | 2 +- .../RicExportEclipseSectorModelFeature.cpp | 38 ++- .../RicExportEclipseSectorModelFeature.h | 2 +- .../RicExportEclipseSectorModelUi.cpp | 260 ++++++++++++++---- .../RicExportEclipseSectorModelUi.h | 45 ++- .../RicExportToLasFileFeature.cpp | 2 +- .../RicSaveEclipseInputPropertyFeature.cpp | 2 +- ...RicSaveEclipseInputVisibleCellsFeature.cpp | 2 +- ...icSaveEclipseResultAsInputPropertyExec.cpp | 2 +- .../Commands/RicExportFeatureImpl.cpp | 6 +- .../Commands/RicExportFeatureImpl.h | 6 +- .../RiuPropertyViewTabWidget.cpp | 16 +- .../UserInterface/RiuPropertyViewTabWidget.h | 4 +- 17 files changed, 308 insertions(+), 93 deletions(-) diff --git a/ApplicationCode/Application/RiaPreferences.h b/ApplicationCode/Application/RiaPreferences.h index 27b53c9b3a..a1da0cab24 100644 --- a/ApplicationCode/Application/RiaPreferences.h +++ b/ApplicationCode/Application/RiaPreferences.h @@ -110,5 +110,5 @@ private: caf::PdmField m_showTestToolbar; caf::PdmField m_includeFractureDebugInfoFile; caf::PdmField m_holoLensExportFolder; - QStringList m_tabNames; + QStringList m_tabNames; }; diff --git a/ApplicationCode/CommandFileInterface/RicfExportVisibleCells.cpp b/ApplicationCode/CommandFileInterface/RicfExportVisibleCells.cpp index 23fa11ee91..d225a1c741 100644 --- a/ApplicationCode/CommandFileInterface/RicfExportVisibleCells.cpp +++ b/ApplicationCode/CommandFileInterface/RicfExportVisibleCells.cpp @@ -98,7 +98,13 @@ void RicfExportVisibleCells::execute() RiaViewRedrawScheduler::instance()->clearViewsScheduledForUpdate(); - RicExportEclipseSectorModelUi exportSettings(eclipseView->eclipseCase()->eclipseCaseData()); + cvf::UByteArray cellVisibility; + eclipseView->calculateCurrentTotalCellVisibility(&cellVisibility, eclipseView->currentTimeStep()); + + cvf::Vec3i min, max; + std::tie(min, max) = RicExportEclipseSectorModelFeature::getVisibleCellRange(eclipseView, cellVisibility); + + RicExportEclipseSectorModelUi exportSettings(eclipseView->eclipseCase()->eclipseCaseData(), min, max); buildExportSettings(exportFolder, &exportSettings); RicExportEclipseSectorModelFeature::executeCommand(eclipseView, exportSettings, "exportVisibleCells"); } diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionsWellSegmentsFeature.cpp b/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionsWellSegmentsFeature.cpp index 134f966661..6e4e622354 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionsWellSegmentsFeature.cpp +++ b/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionsWellSegmentsFeature.cpp @@ -93,7 +93,7 @@ void RicExportCompletionsWellSegmentsFeature::onActionTriggered(bool isChecked) exportSettings.folder = defaultDir; caf::PdmUiPropertyViewDialog propertyDialog(Riu3DMainWindowTools::mainWindowWidget(), &exportSettings, "Export Well Segments", ""); - RicExportFeatureImpl::configureForExport(&propertyDialog); + RicExportFeatureImpl::configureForExport(propertyDialog.dialogButtonBox()); if (propertyDialog.exec() == QDialog::Accepted) { diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeature.cpp b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeature.cpp index 11d975fbfa..25c4a6c1ad 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeature.cpp +++ b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeature.cpp @@ -129,7 +129,7 @@ void RicWellPathExportCompletionDataFeature::prepareExportSettingsAndExportCompl } caf::PdmUiPropertyViewDialog propertyDialog(Riu3DMainWindowTools::mainWindowWidget(), exportSettings, dialogTitle, ""); - RicExportFeatureImpl::configureForExport(&propertyDialog); + RicExportFeatureImpl::configureForExport(propertyDialog.dialogButtonBox()); if (propertyDialog.exec() == QDialog::Accepted) { diff --git a/ApplicationCode/Commands/ExportCommands/RicExportCarfin.cpp b/ApplicationCode/Commands/ExportCommands/RicExportCarfin.cpp index 9bf720c5ee..6ae860522b 100644 --- a/ApplicationCode/Commands/ExportCommands/RicExportCarfin.cpp +++ b/ApplicationCode/Commands/ExportCommands/RicExportCarfin.cpp @@ -68,7 +68,7 @@ void RicExportCarfin::onActionTriggered(bool isChecked) exportCarfinObject->setCase(rimCase); caf::PdmUiPropertyViewDialog propertyDialog(nullptr, exportCarfinObject, "Export CARFIN to Eclipse Data", ""); - RicExportFeatureImpl::configureForExport(&propertyDialog); + RicExportFeatureImpl::configureForExport(propertyDialog.dialogButtonBox()); if (propertyDialog.exec() == QDialog::Accepted) { diff --git a/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelFeature.cpp b/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelFeature.cpp index b84a621b10..8aea14582d 100644 --- a/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelFeature.cpp +++ b/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelFeature.cpp @@ -38,6 +38,7 @@ #include "RigMainGrid.h" #include "Riu3DMainWindowTools.h" +#include "RiuPropertyViewTabWidget.h" #include "cafPdmUiPropertyViewDialog.h" #include "cafProgressInfo.h" @@ -58,9 +59,16 @@ void RicExportEclipseSectorModelFeature::openDialogAndExecuteCommand(RimEclipseV RigEclipseCaseData* caseData = view->eclipseCase()->eclipseCaseData(); - RicExportEclipseSectorModelUi exportSettings(caseData); - caf::PdmUiPropertyViewDialog propertyDialog(Riu3DMainWindowTools::mainWindowWidget(), &exportSettings, "Export Eclipse Sector Model", ""); - RicExportFeatureImpl::configureForExport(&propertyDialog); + cvf::UByteArray cellVisibility; + view->calculateCurrentTotalCellVisibility(&cellVisibility, view->currentTimeStep()); + + cvf::Vec3i min, max; + std::tie(min, max) = getVisibleCellRange(view, cellVisibility); + + RicExportEclipseSectorModelUi exportSettings(caseData, min, max); + RiuPropertyViewTabWidget propertyDialog(Riu3DMainWindowTools::mainWindowWidget(), &exportSettings, "Export Eclipse Sector Model", exportSettings.tabNames()); + + RicExportFeatureImpl::configureForExport(propertyDialog.dialogButtonBox()); if (propertyDialog.exec() == QDialog::Accepted) { @@ -84,15 +92,17 @@ void RicExportEclipseSectorModelFeature::executeCommand(RimEclipseView* view, caf::ProgressInfo progress(gridProgressPercentage + resultProgressPercentage + faultsProgressPercentage, "Export Eclipse Sector Model"); - cvf::Vec3st refinement(exportSettings.cellCountI(), exportSettings.cellCountJ(), exportSettings.cellCountK()); + cvf::Vec3st refinement(exportSettings.refinementCountI(), exportSettings.refinementCountJ(), exportSettings.refinementCountK()); CVF_ASSERT(refinement.x() > 0u && refinement.y() > 0u && refinement.z() > 0u); cvf::UByteArray cellVisibility; view->calculateCurrentTotalCellVisibility(&cellVisibility, view->currentTimeStep()); + getVisibleCellRange(view, cellVisibility); + + cvf::Vec3st min(exportSettings.min()); + cvf::Vec3st max(exportSettings.max()); - cvf::Vec3st min, max; - std::tie(min, max) = getVisibleCellRange(view, cellVisibility); if (exportSettings.exportGrid()) { const cvf::UByteArray* cellVisibilityForActnum = exportSettings.makeInvisibleCellsInactive() ? &cellVisibility : nullptr; @@ -215,14 +225,14 @@ void RicExportEclipseSectorModelFeature::executeCommand(RimEclipseView* view, //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::pair RicExportEclipseSectorModelFeature::getVisibleCellRange(RimEclipseView* view, const cvf::UByteArray& cellVisibillity) +std::pair RicExportEclipseSectorModelFeature::getVisibleCellRange(RimEclipseView* view, const cvf::UByteArray& cellVisibillity) { const RigMainGrid* mainGrid = view->eclipseCase()->mainGrid(); - cvf::Vec3st max = cvf::Vec3st::ZERO; - cvf::Vec3st min = cvf::Vec3st(mainGrid->cellCountI() - 1, - mainGrid->cellCountJ() - 1, - mainGrid->cellCountK() - 1); + cvf::Vec3i max = cvf::Vec3i::ZERO; + cvf::Vec3i min = cvf::Vec3i(int(mainGrid->cellCountI() - 1), + int(mainGrid->cellCountJ() - 1), + int(mainGrid->cellCountK() - 1)); size_t cellCount = mainGrid->cellCount(); for (size_t index = 0; index < cellCount; ++index) @@ -233,8 +243,8 @@ std::pair RicExportEclipseSectorModelFeature::getVisib mainGrid->ijkFromCellIndex(index, &ijk[0], &ijk[1], &ijk[2]); for (int n = 0; n < 3; ++n) { - min[n] = std::min(min[n], ijk[n]); - max[n] = std::max(max[n], ijk[n]); + min[n] = std::min(min[n], (int) ijk[n]); + max[n] = std::max(max[n], (int) ijk[n]); } } } @@ -263,7 +273,7 @@ void RicExportEclipseSectorModelFeature::onActionTriggered(bool isChecked) //-------------------------------------------------------------------------------------------------- void RicExportEclipseSectorModelFeature::setupActionLook(QAction* actionToSetup) { - actionToSetup->setText("Export Visible Cells as Eclipse Sector Model"); + actionToSetup->setText("Export Eclipse Sector Model"); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelFeature.h b/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelFeature.h index 06fafbde3f..9039bc6cac 100644 --- a/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelFeature.h +++ b/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelFeature.h @@ -39,7 +39,7 @@ public : const RicExportEclipseSectorModelUi& exportSettings, const QString& logPrefix); - static std::pair getVisibleCellRange(RimEclipseView* view, const cvf::UByteArray& cellVisibility); + static std::pair getVisibleCellRange(RimEclipseView* view, const cvf::UByteArray& cellVisibility); protected: bool isCommandEnabled() override; void onActionTriggered(bool isChecked) override; diff --git a/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelUi.cpp b/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelUi.cpp index 7888048500..bc30915b13 100644 --- a/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelUi.cpp +++ b/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelUi.cpp @@ -19,8 +19,10 @@ #include "RicExportEclipseSectorModelUi.h" #include "RiaApplication.h" +#include "RigActiveCellInfo.h" #include "RigCaseCellResultsData.h" #include "RigEclipseCaseData.h" +#include "RigMainGrid.h" #include "RimEclipseResultDefinition.h" @@ -46,18 +48,33 @@ void RicExportEclipseSectorModelUi::ResultExportOptionsEnum::setUp() addItem(RicExportEclipseSectorModelUi::EXPORT_NO_RESULTS, "NO_RESULTS", "Do not export"); addItem(RicExportEclipseSectorModelUi::EXPORT_TO_GRID_FILE, "TO_GRID_FILE", "Append to grid file"); addItem(RicExportEclipseSectorModelUi::EXPORT_TO_SINGLE_SEPARATE_FILE, "TO_SINGLE_RESULT_FILE", "Export to single file"); - addItem(RicExportEclipseSectorModelUi::EXPORT_TO_SEPARATE_FILE_PER_RESULT, "TO_SEPARATE_RESULT_FILES", "Export to a separate file per property"); + addItem(RicExportEclipseSectorModelUi::EXPORT_TO_SEPARATE_FILE_PER_RESULT, "TO_SEPARATE_RESULT_FILES", "Export to a separate file per parameter"); setDefault(RicExportEclipseSectorModelUi::EXPORT_TO_SEPARATE_FILE_PER_RESULT); } +template<> +void RicExportEclipseSectorModelUi::GridBoxSelectionEnum::setUp() +{ + addItem(RicExportEclipseSectorModelUi::VISIBLE_CELLS_BOX, "VISIBLE_CELLS", "Box Containing all Visible Cells"); + addItem(RicExportEclipseSectorModelUi::ACTIVE_CELLS_BOX, "ACTIVE_CELLS", "Box Containing all Active Cells"); + addItem(RicExportEclipseSectorModelUi::FULL_GRID_BOX, "FULL_GRID", "Full Grid"); + addItem(RicExportEclipseSectorModelUi::MANUAL_SELECTION, "MANUAL_SELECTION", "Manual Selection"); + + setDefault(RicExportEclipseSectorModelUi::VISIBLE_CELLS_BOX); +} + } // namespace caf //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RicExportEclipseSectorModelUi::RicExportEclipseSectorModelUi(RigEclipseCaseData* caseData) +RicExportEclipseSectorModelUi::RicExportEclipseSectorModelUi(RigEclipseCaseData* caseData /*= nullptr*/, + const cvf::Vec3i& visibleMin /*= cvf::Vec3i::ZERO*/, + const cvf::Vec3i& visibleMax /*= cvf::Vec3i::ZERO*/) : m_caseData(caseData) + , m_visibleMin(visibleMin) + , m_visibleMax(visibleMax) { CAF_PDM_InitObject("Export Visible Cells as Eclipse Input Grid", "", "", ""); @@ -67,22 +84,37 @@ RicExportEclipseSectorModelUi::RicExportEclipseSectorModelUi(RigEclipseCaseData* CAF_PDM_InitField(&exportInLocalCoordinates, "ExportInLocalCoords", false, "Export in Local Coordinates", "", "Remove UTM location on export", ""); CAF_PDM_InitField(&makeInvisibleCellsInactive, "InvisibleCellActnum", false, "Make Invisible Cells Inactive", "", "", ""); + CAF_PDM_InitFieldNoDefault(&exportGridBox, "GridBoxSelection", "Cells to Export", "", "", ""); + + QString minIJKLabel = "Min I, J, K"; + CAF_PDM_InitField(&minI, "MinI", m_visibleMin.x() + 1, minIJKLabel, "", "", ""); + CAF_PDM_InitField(&minJ, "MinJ", m_visibleMin.y() + 1, "", "", "", ""); + minJ.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); + CAF_PDM_InitField(&minK, "MinK", m_visibleMin.z() + 1, "", "", "", ""); + minK.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); + QString maxIJKLabel = "Max I, J, K"; + CAF_PDM_InitField(&maxI, "MaxI", m_visibleMax.x() + 1, maxIJKLabel, "", "", ""); + CAF_PDM_InitField(&maxJ, "MaxJ", m_visibleMax.y() + 1, "", "", "", ""); + maxJ.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); + CAF_PDM_InitField(&maxK, "MaxK", m_visibleMax.z() + 1, "", "", "", ""); + maxK.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); + CAF_PDM_InitFieldNoDefault(&exportFaults, "ExportFaults", "Export Fault Data", "", "", ""); exportFaults = EXPORT_TO_SINGLE_SEPARATE_FILE; CAF_PDM_InitField(&exportFaultsFilename, "ExportFaultsFilename", QString(), "Faults File Name", "", "", ""); exportFaultsFilename.uiCapability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName()); + + QString ijkLabel = "Cell Count I, J, K"; + CAF_PDM_InitField(&refinementCountI, "RefinementCountI", 1, ijkLabel, "", "", ""); + CAF_PDM_InitField(&refinementCountJ, "RefinementCountJ", 1, "", "", "", ""); + CAF_PDM_InitField(&refinementCountK, "RefinementCountK", 1, "", "", "", ""); - CAF_PDM_InitFieldNoDefault(&exportParameters, "ExportResults", "Export Properties", "", "", ""); - CAF_PDM_InitField(&exportParametersFilename, "ExportResultsFilename", QString(), "Properties File Name", "", "", ""); + CAF_PDM_InitFieldNoDefault(&exportParameters, "ExportParams", "Export Parameters", "", "", ""); + CAF_PDM_InitField(&exportParametersFilename, "ExportParamsFilename", QString(), "File Name", "", "", ""); exportParametersFilename.uiCapability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName()); - CAF_PDM_InitFieldNoDefault(&selectedKeywords, "ExportMainKeywords", "Main Keywords", "", "", ""); - - QString ijkLabel = "Cell Count I, J, K"; - CAF_PDM_InitField(&cellCountI, "CellCountI", 1, ijkLabel, "", "", ""); - CAF_PDM_InitField(&cellCountJ, "CellCountJ", 1, "", "", "", ""); - CAF_PDM_InitField(&cellCountK, "CellCountK", 1, "", "", "", ""); + CAF_PDM_InitFieldNoDefault(&selectedKeywords, "ExportMainKeywords", "Keywords to Export", "", "", ""); exportGridFilename = defaultGridFileName(); exportParametersFilename = defaultResultsFileName(); @@ -95,6 +127,8 @@ RicExportEclipseSectorModelUi::RicExportEclipseSectorModelUi(RigEclipseCaseData* selectedKeywords.v().push_back(keyword); } } + m_tabNames << "Grid Data"; + m_tabNames << "Parameters"; } //-------------------------------------------------------------------------------------------------- @@ -104,11 +138,58 @@ RicExportEclipseSectorModelUi::~RicExportEclipseSectorModelUi() { } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const QStringList& RicExportEclipseSectorModelUi::tabNames() const +{ + return m_tabNames; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Vec3i RicExportEclipseSectorModelUi::min() const +{ + return cvf::Vec3i(minI() - 1, minJ() - 1, minK() - 1); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Vec3i RicExportEclipseSectorModelUi::max() const +{ + return cvf::Vec3i(maxI() - 1, maxJ() - 1, maxK() - 1); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicExportEclipseSectorModelUi::setMin(const cvf::Vec3i& min) +{ + minI = min.x() + 1; minJ = min.y() + 1; minK = min.z() + 1; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicExportEclipseSectorModelUi::setMax(const cvf::Vec3i& max) +{ + maxI = max.x() + 1; maxJ = max.y() + 1; maxK = max.z() + 1; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicExportEclipseSectorModelUi::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute * attribute) { + if (!m_caseData) return; + + const RigMainGrid* mainGrid = m_caseData->mainGrid(); + cvf::Vec3i gridDimensions(int(mainGrid->cellCountI()), int(mainGrid->cellCountJ()), int(mainGrid->cellCountK())); + + caf::PdmUiLineEditorAttribute* lineEditorAttr = dynamic_cast(attribute); + if (field == &exportParametersFilename || field == &exportGridFilename || field == &exportFaultsFilename) { caf::PdmUiFilePathEditorAttribute* myAttr = dynamic_cast(attribute); @@ -125,13 +206,33 @@ void RicExportEclipseSectorModelUi::defineEditorAttribute(const caf::PdmFieldHan myAttr->m_heightHint = 280; } } - else if (field == &cellCountI || field == &cellCountJ || field == &cellCountK) + else if (field == &refinementCountI || field == &refinementCountJ || field == &refinementCountK) { - caf::PdmUiLineEditorAttribute* myAttr = dynamic_cast(attribute); - if (myAttr) + if (lineEditorAttr) { QIntValidator* validator = new QIntValidator(1, 10, nullptr); - myAttr->validator = validator; + lineEditorAttr->validator = validator; + } + } + else if (field == &minI || field == &maxI) + { + if (lineEditorAttr) + { + lineEditorAttr->validator = new QIntValidator(1, (int)gridDimensions.x(), nullptr); + } + } + else if (field == &minJ || field == &maxJ) + { + if (lineEditorAttr) + { + lineEditorAttr->validator = new QIntValidator(1, (int)gridDimensions.y(), nullptr); + } + } + else if (field == &minK || field == &maxK) + { + if (lineEditorAttr) + { + lineEditorAttr->validator = new QIntValidator(1, (int)gridDimensions.z(), nullptr); } } } @@ -141,48 +242,70 @@ void RicExportEclipseSectorModelUi::defineEditorAttribute(const caf::PdmFieldHan //-------------------------------------------------------------------------------------------------- void RicExportEclipseSectorModelUi::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) { - caf::PdmUiGroup* gridGroup = uiOrdering.addNewGroup("Grid Export"); - gridGroup->add(&exportGrid); - gridGroup->add(&exportGridFilename); - exportGridFilename.uiCapability()->setUiReadOnly(!exportGrid()); - gridGroup->add(&exportInLocalCoordinates); - exportInLocalCoordinates.uiCapability()->setUiReadOnly(!exportGrid()); - gridGroup->add(&makeInvisibleCellsInactive); - makeInvisibleCellsInactive.uiCapability()->setUiReadOnly(!exportGrid()); - - gridGroup->add(&exportFaults); - if (exportFaults() != EXPORT_NO_RESULTS) + if (uiConfigName == m_tabNames[0]) { - if (exportFaults() == EXPORT_TO_SINGLE_SEPARATE_FILE) + caf::PdmUiGroup* gridGroup = uiOrdering.addNewGroup("Grid Export"); + gridGroup->add(&exportGrid); + gridGroup->add(&exportGridFilename); + exportGridFilename.uiCapability()->setUiReadOnly(!exportGrid()); + gridGroup->add(&exportInLocalCoordinates); + exportInLocalCoordinates.uiCapability()->setUiReadOnly(!exportGrid()); + gridGroup->add(&makeInvisibleCellsInactive); + + caf::PdmUiGroup* gridBoxGroup = uiOrdering.addNewGroup("Grid Box Selection"); + gridBoxGroup->add(&exportGridBox, { true, 4, 1 }); + + gridBoxGroup->add(&minI, { true, 2, 1 }); + gridBoxGroup->add(&minJ, false); + gridBoxGroup->add(&minK, false); + + gridBoxGroup->add(&maxI, { true, 2, 1 }); + gridBoxGroup->add(&maxJ, false); + gridBoxGroup->add(&maxK, false); + + minI.uiCapability()->setUiReadOnly(exportGridBox() != MANUAL_SELECTION); + minJ.uiCapability()->setUiReadOnly(exportGridBox() != MANUAL_SELECTION); + minK.uiCapability()->setUiReadOnly(exportGridBox() != MANUAL_SELECTION); + maxI.uiCapability()->setUiReadOnly(exportGridBox() != MANUAL_SELECTION); + maxJ.uiCapability()->setUiReadOnly(exportGridBox() != MANUAL_SELECTION); + maxK.uiCapability()->setUiReadOnly(exportGridBox() != MANUAL_SELECTION); + + caf::PdmUiGroup* gridRefinement = uiOrdering.addNewGroup("Grid Refinement"); + gridRefinement->add(&refinementCountI, {true, 2, 1}); + gridRefinement->add(&refinementCountJ, {false}); + gridRefinement->add(&refinementCountK, {false}); + refinementCountI.uiCapability()->setUiReadOnly(!exportGrid()); + refinementCountJ.uiCapability()->setUiReadOnly(!exportGrid()); + refinementCountK.uiCapability()->setUiReadOnly(!exportGrid()); + + caf::PdmUiGroup* faultsGroup = uiOrdering.addNewGroup("Faults"); + faultsGroup->add(&exportFaults); + if (exportFaults() != EXPORT_NO_RESULTS) { - gridGroup->add(&exportFaultsFilename); + if (exportFaults() == EXPORT_TO_SINGLE_SEPARATE_FILE) + { + faultsGroup->add(&exportFaultsFilename); + } } } - - caf::PdmUiGroup* gridRefinement = gridGroup->addNewGroup("Grid Refinement"); - gridRefinement->add(&cellCountI, {true, 2, 1}); - gridRefinement->add(&cellCountJ, {false}); - gridRefinement->add(&cellCountK, {false}); - cellCountI.uiCapability()->setUiReadOnly(!exportGrid()); - cellCountJ.uiCapability()->setUiReadOnly(!exportGrid()); - cellCountK.uiCapability()->setUiReadOnly(!exportGrid()); - - caf::PdmUiGroup* resultsGroup = uiOrdering.addNewGroup("Property Export"); - - resultsGroup->add(&exportParameters); - if (exportParameters() != EXPORT_NO_RESULTS) + else if (uiConfigName == m_tabNames[1]) { - if (exportParameters() == EXPORT_TO_SINGLE_SEPARATE_FILE) + caf::PdmUiGroup* resultsGroup = uiOrdering.addNewGroup("Parameter Export"); + + resultsGroup->add(&exportParameters); + if (exportParameters() != EXPORT_NO_RESULTS) { - resultsGroup->add(&exportParametersFilename); + if (exportParameters() == EXPORT_TO_SINGLE_SEPARATE_FILE) + { + resultsGroup->add(&exportParametersFilename); + } + } + + if (exportParameters() != EXPORT_NO_RESULTS) + { + resultsGroup->add(&selectedKeywords); } } - - if (exportParameters() != EXPORT_NO_RESULTS) - { - resultsGroup->add(&selectedKeywords); - } - uiOrdering.skipRemainingFields(true); } @@ -191,7 +314,46 @@ void RicExportEclipseSectorModelUi::defineUiOrdering(QString uiConfigName, caf:: //-------------------------------------------------------------------------------------------------- void RicExportEclipseSectorModelUi::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { - if (changedField == &exportGridFilename) + if (changedField == &exportGrid) + { + if (!exportGrid()) + { + if (exportFaults() == EXPORT_TO_GRID_FILE) + { + exportFaults = EXPORT_TO_SINGLE_SEPARATE_FILE; + } + if (exportParameters() == EXPORT_TO_GRID_FILE) + { + exportParameters = EXPORT_TO_SEPARATE_FILE_PER_RESULT; + } + this->updateConnectedEditors(); + } + } + else if (changedField == &exportGridBox) + { + if (exportGridBox == ACTIVE_CELLS_BOX) + { + cvf::Vec3st minActive, maxActive; + m_caseData->activeCellInfo(RiaDefines::MATRIX_MODEL)->IJKBoundingBox(minActive, maxActive); + setMin(cvf::Vec3i(minActive)); + setMax(cvf::Vec3i(maxActive)); + } + else if (exportGridBox == VISIBLE_CELLS_BOX) + { + setMin(m_visibleMin); + setMax(m_visibleMax); + } + else if (exportGridBox == FULL_GRID_BOX) + { + const RigMainGrid* mainGrid = m_caseData->mainGrid(); + cvf::Vec3i gridDimensions(int(mainGrid->cellCountI() - 1), int(mainGrid->cellCountJ() - 1), int(mainGrid->cellCountK() - 1)); + + setMin(cvf::Vec3i(1, 1, 1)); + setMax(gridDimensions); + } + this->updateConnectedEditors(); + } + else if (changedField == &exportGridFilename) { QFileInfo info(exportGridFilename()); QDir dirPath = info.absoluteDir(); diff --git a/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelUi.h b/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelUi.h index 07e10d3ca0..5ad23142f1 100644 --- a/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelUi.h +++ b/ApplicationCode/Commands/ExportCommands/RicExportEclipseSectorModelUi.h @@ -18,10 +18,13 @@ #pragma once +#include "cafAppEnum.h" #include "cafPdmField.h" #include "cafPdmObject.h" #include "cafPdmChildArrayField.h" -#include "cafAppEnum.h" + +#include "cvfBase.h" +#include "cvfVector3.h" #include #include @@ -47,9 +50,26 @@ class RicExportEclipseSectorModelUi : public caf::PdmObject }; typedef caf::AppEnum ResultExportOptionsEnum; + enum GridBoxSelection + { + VISIBLE_CELLS_BOX, + ACTIVE_CELLS_BOX, + FULL_GRID_BOX, + MANUAL_SELECTION + }; + typedef caf::AppEnum GridBoxSelectionEnum; + public: - RicExportEclipseSectorModelUi(RigEclipseCaseData* caseData = nullptr); + RicExportEclipseSectorModelUi(RigEclipseCaseData* caseData = nullptr, + const cvf::Vec3i& visibleMin = cvf::Vec3i::ZERO, + const cvf::Vec3i& visibleMax = cvf::Vec3i::ZERO); ~RicExportEclipseSectorModelUi() override; + const QStringList& tabNames() const; + + cvf::Vec3i min() const; + cvf::Vec3i max() const; + void setMin(const cvf::Vec3i& min); + void setMax(const cvf::Vec3i& max); caf::PdmField exportGrid; caf::PdmField exportGridFilename; @@ -64,11 +84,20 @@ public: caf::PdmField> selectedKeywords; - caf::PdmField cellCountI; - caf::PdmField cellCountJ; - caf::PdmField cellCountK; - + caf::PdmField exportGridBox; + + caf::PdmField refinementCountI; + caf::PdmField refinementCountJ; + caf::PdmField refinementCountK; + protected: + caf::PdmField minI; + caf::PdmField maxI; + caf::PdmField minJ; + caf::PdmField maxJ; + caf::PdmField minK; + caf::PdmField maxK; + void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute) override; void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; @@ -80,6 +109,10 @@ protected: QString defaultGridFileName() const; QString defaultResultsFileName() const; QString defaultFaultsFileName() const; + private: RigEclipseCaseData* m_caseData; + cvf::Vec3i m_visibleMin; + cvf::Vec3i m_visibleMax; + QStringList m_tabNames; }; diff --git a/ApplicationCode/Commands/ExportCommands/RicExportToLasFileFeature.cpp b/ApplicationCode/Commands/ExportCommands/RicExportToLasFileFeature.cpp index 89db296f87..814b95eb01 100644 --- a/ApplicationCode/Commands/ExportCommands/RicExportToLasFileFeature.cpp +++ b/ApplicationCode/Commands/ExportCommands/RicExportToLasFileFeature.cpp @@ -77,7 +77,7 @@ void RicExportToLasFileFeature::onActionTriggered(bool isChecked) } caf::PdmUiPropertyViewDialog propertyDialog(nullptr, &featureUi, "Export Curve Data to LAS file(s)", "", QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - RicExportFeatureImpl::configureForExport(&propertyDialog); + RicExportFeatureImpl::configureForExport(propertyDialog.dialogButtonBox()); propertyDialog.resize(QSize(400, 330)); if (propertyDialog.exec() == QDialog::Accepted && diff --git a/ApplicationCode/Commands/ExportCommands/RicSaveEclipseInputPropertyFeature.cpp b/ApplicationCode/Commands/ExportCommands/RicSaveEclipseInputPropertyFeature.cpp index 5780514643..93b33d4da0 100644 --- a/ApplicationCode/Commands/ExportCommands/RicSaveEclipseInputPropertyFeature.cpp +++ b/ApplicationCode/Commands/ExportCommands/RicSaveEclipseInputPropertyFeature.cpp @@ -101,7 +101,7 @@ void RicSaveEclipseInputPropertyFeature::onActionTriggered(bool isChecked) } caf::PdmUiPropertyViewDialog propertyDialog(Riu3DMainWindowTools::mainWindowWidget(), &exportSettings, "Export Eclipse Property to Text File", ""); - RicExportFeatureImpl::configureForExport(&propertyDialog); + RicExportFeatureImpl::configureForExport(propertyDialog.dialogButtonBox()); if (propertyDialog.exec() == QDialog::Accepted) { diff --git a/ApplicationCode/Commands/ExportCommands/RicSaveEclipseInputVisibleCellsFeature.cpp b/ApplicationCode/Commands/ExportCommands/RicSaveEclipseInputVisibleCellsFeature.cpp index 433495689a..becb69634e 100644 --- a/ApplicationCode/Commands/ExportCommands/RicSaveEclipseInputVisibleCellsFeature.cpp +++ b/ApplicationCode/Commands/ExportCommands/RicSaveEclipseInputVisibleCellsFeature.cpp @@ -53,7 +53,7 @@ void RicSaveEclipseInputVisibleCellsFeature::openDialogAndExecuteCommand(RimEcli RicSaveEclipseInputVisibleCellsUi exportSettings; caf::PdmUiPropertyViewDialog propertyDialog(Riu3DMainWindowTools::mainWindowWidget(), &exportSettings, "Export FLUXNUM/MULTNUM", ""); - RicExportFeatureImpl::configureForExport(&propertyDialog); + RicExportFeatureImpl::configureForExport(propertyDialog.dialogButtonBox()); if (propertyDialog.exec() == QDialog::Accepted) { diff --git a/ApplicationCode/Commands/ExportCommands/RicSaveEclipseResultAsInputPropertyExec.cpp b/ApplicationCode/Commands/ExportCommands/RicSaveEclipseResultAsInputPropertyExec.cpp index 0093f2abfe..0628968c45 100644 --- a/ApplicationCode/Commands/ExportCommands/RicSaveEclipseResultAsInputPropertyExec.cpp +++ b/ApplicationCode/Commands/ExportCommands/RicSaveEclipseResultAsInputPropertyExec.cpp @@ -91,7 +91,7 @@ void RicSaveEclipseResultAsInputPropertyExec::redo() } caf::PdmUiPropertyViewDialog propertyDialog(Riu3DMainWindowTools::mainWindowWidget(), &exportSettings, "Export Binary Eclipse Data to Text File", ""); - RicExportFeatureImpl::configureForExport(&propertyDialog); + RicExportFeatureImpl::configureForExport(propertyDialog.dialogButtonBox()); if (propertyDialog.exec() == QDialog::Accepted) { diff --git a/ApplicationCode/Commands/RicExportFeatureImpl.cpp b/ApplicationCode/Commands/RicExportFeatureImpl.cpp index e5b151b6fd..776fd41d05 100644 --- a/ApplicationCode/Commands/RicExportFeatureImpl.cpp +++ b/ApplicationCode/Commands/RicExportFeatureImpl.cpp @@ -18,17 +18,13 @@ #include "RicExportFeatureImpl.h" -#include "cafPdmUiPropertyViewDialog.h" - #include //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicExportFeatureImpl::configureForExport(caf::PdmUiPropertyViewDialog* propertyViewDialog) +void RicExportFeatureImpl::configureForExport(QDialogButtonBox* dialogButtonBox) { - QDialogButtonBox* dialogButtonBox = propertyViewDialog->dialogButtonBox(); - dialogButtonBox->clear(); dialogButtonBox->addButton("Export", QDialogButtonBox::AcceptRole); diff --git a/ApplicationCode/Commands/RicExportFeatureImpl.h b/ApplicationCode/Commands/RicExportFeatureImpl.h index 9288cb72ea..6f9fe5ac65 100644 --- a/ApplicationCode/Commands/RicExportFeatureImpl.h +++ b/ApplicationCode/Commands/RicExportFeatureImpl.h @@ -18,9 +18,7 @@ #pragma once -namespace caf { - class PdmUiPropertyViewDialog; -} +class QDialogButtonBox; //================================================================================================== /// @@ -28,5 +26,5 @@ namespace caf { class RicExportFeatureImpl { public: - static void configureForExport(caf::PdmUiPropertyViewDialog* propertyViewDialog); + static void configureForExport(QDialogButtonBox* propertyViewDialog); }; diff --git a/ApplicationCode/UserInterface/RiuPropertyViewTabWidget.cpp b/ApplicationCode/UserInterface/RiuPropertyViewTabWidget.cpp index 7e7ee5632f..4589b5e3e3 100644 --- a/ApplicationCode/UserInterface/RiuPropertyViewTabWidget.cpp +++ b/ApplicationCode/UserInterface/RiuPropertyViewTabWidget.cpp @@ -63,11 +63,11 @@ RiuPropertyViewTabWidget::RiuPropertyViewTabWidget(QWidget* parent, caf::PdmObje dialogLayout->addWidget(tabWidget); // Buttons - QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + m_dialogButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + connect(m_dialogButtonBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(m_dialogButtonBox, SIGNAL(rejected()), this, SLOT(reject())); - dialogLayout->addWidget(buttonBox); + dialogLayout->addWidget(m_dialogButtonBox); } //-------------------------------------------------------------------------------------------------- @@ -101,3 +101,11 @@ QSize RiuPropertyViewTabWidget::sizeHint() const return maxSizeHint; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QDialogButtonBox* RiuPropertyViewTabWidget::dialogButtonBox() +{ + return m_dialogButtonBox; +} diff --git a/ApplicationCode/UserInterface/RiuPropertyViewTabWidget.h b/ApplicationCode/UserInterface/RiuPropertyViewTabWidget.h index 67080c207d..d9a9673658 100644 --- a/ApplicationCode/UserInterface/RiuPropertyViewTabWidget.h +++ b/ApplicationCode/UserInterface/RiuPropertyViewTabWidget.h @@ -26,6 +26,7 @@ namespace caf { class PdmUiPropertyView; } +class QDialogButtonBox; class QWidget; class QString; class QStringList; @@ -37,7 +38,8 @@ public: ~RiuPropertyViewTabWidget() override; QSize sizeHint() const override; - + QDialogButtonBox* dialogButtonBox(); private: std::vector m_pageWidgets; + QDialogButtonBox* m_dialogButtonBox; };