//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RiuPlotMainWindow::createDockPanels() { { QDockWidget* dockWidget = new QDockWidget("Plot Project Tree", this); dockWidget->setObjectName("dockWidget"); dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas); m_projectTreeView = new caf::PdmUiTreeView(this); m_projectTreeView->enableSelectionManagerUpdating(true); RiaApplication* app = RiaApplication::instance(); m_projectTreeView->enableAppendOfClassNameToUiItemText(app->preferences()->appendClassNameToUiText()); dockWidget->setWidget(m_projectTreeView); m_projectTreeView->treeView()->setHeaderHidden(true); m_projectTreeView->treeView()->setSelectionMode(QAbstractItemView::ExtendedSelection); // Drag and drop configuration m_projectTreeView->treeView()->setDragEnabled(true); m_projectTreeView->treeView()->viewport()->setAcceptDrops(true); m_projectTreeView->treeView()->setDropIndicatorShown(true); m_projectTreeView->treeView()->setDragDropMode(QAbstractItemView::DragDrop); // Install event filter used to handle key press events RiuTreeViewEventFilter* treeViewEventFilter = new RiuTreeViewEventFilter(this); m_projectTreeView->treeView()->installEventFilter(treeViewEventFilter); addDockWidget(Qt::LeftDockWidgetArea, dockWidget); connect(m_projectTreeView, SIGNAL(selectionChanged()), this, SLOT(selectedObjectsChanged())); m_projectTreeView->treeView()->setContextMenuPolicy(Qt::CustomContextMenu); connect(m_projectTreeView->treeView(), SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(customMenuRequested(const QPoint&))); m_projectTreeView->setUiConfigurationName("PlotWindow"); } { QDockWidget* dockWidget = new QDockWidget("Property Editor", this); dockWidget->setObjectName("dockWidget"); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); m_pdmUiPropertyView = new caf::PdmUiPropertyView(dockWidget); dockWidget->setWidget(m_pdmUiPropertyView); m_pdmUiPropertyView->layout()->setContentsMargins(5, 0, 0, 0); addDockWidget(Qt::LeftDockWidgetArea, dockWidget); } setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea); QList<QDockWidget*> dockWidgets = findChildren<QDockWidget*>(); for (QDockWidget* dock : dockWidgets) { connect(dock->toggleViewAction(), SIGNAL(triggered()), SLOT(slotDockWidgetToggleViewActionTriggered())); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicExecuteScriptFeature::onActionTriggered(bool isChecked) { std::vector<RimCalcScript*> selection = RicScriptFeatureImpl::selectedScripts(); CVF_ASSERT(selection.size() > 0); RiuMainWindow* mainWindow = RiuMainWindow::instance(); mainWindow->showProcessMonitorDockPanel(); RimCalcScript* calcScript = selection[0]; RiaApplication* app = RiaApplication::instance(); QString octavePath = app->octavePath(); if (!octavePath.isEmpty()) { // TODO: Must rename RimCalcScript::absolutePath to absoluteFileName, as the code below is confusing // absolutePath() is a function in QFileInfo QFileInfo fi(calcScript->absolutePath()); QString octaveFunctionSearchPath = fi.absolutePath(); QStringList arguments = app->octaveArguments(); arguments.append("--path"); arguments << octaveFunctionSearchPath; arguments << calcScript->absolutePath(); RiaApplication::instance()->launchProcess(octavePath, arguments); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicSnapshotViewToFileFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); RimProject* proj = app->project(); QString startPath; if (!proj->fileName().isEmpty()) { QFileInfo fi(proj->fileName()); startPath = fi.absolutePath(); } else { startPath = app->lastUsedDialogDirectory("IMAGE_SNAPSHOT"); } startPath += "/image.png"; QString fileName = QFileDialog::getSaveFileName(NULL, tr("Save File"), startPath, tr("Image files (*.bmp *.png * *.jpg)")); if (fileName.isEmpty()) { return; } // Remember the directory to next time app->setLastUsedDialogDirectory("IMAGE_SNAPSHOT", QFileInfo(fileName).absolutePath()); RimViewWindow* viewWindow = app->activeViewWindow(); RicSnapshotViewToFileFeature::saveSnapshotAs(fileName, viewWindow); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RiuProcessMonitor::slotTerminateProcess() { addStringToLog("Process terminated by user\n"); RiaApplication* app = RiaApplication::instance(); app->terminateProcess(); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RicImportSummaryCasesFeature::createAndAddSummaryCasesFromFiles(const QStringList& fileNames, std::vector<RimSummaryCase*>* newCases) { RiaApplication* app = RiaApplication::instance(); std::vector<RimSummaryCase*> temp; std::vector<RimSummaryCase*>* cases = newCases ? newCases : &temp; if (createSummaryCasesFromFiles(fileNames, cases)) { addSummaryCases(*cases); if (!cases->empty()) { createNewPlot(cases->back()); } RiuPlotMainWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow(); if (mainPlotWindow && !cases->empty()) { mainPlotWindow->selectAsCurrentItem(cases->back()); mainPlotWindow->updateSummaryPlotToolBar(); // Close main window if there are no eclipse cases imported std::vector<RimCase*> allCases; app->project()->allCases(allCases); if (allCases.size() == 0) { RiuMainWindow::instance()->close(); } } return true; } return false; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicImportSummaryCasesFeature::createNewPlot(RimSummaryCase* summaryCase) { RiaApplication* app = RiaApplication::instance(); RimProject* proj = app->project(); RicNewSummaryCurveFeature::createNewPlot(proj->mainPlotCollection->summaryPlotCollection(), summaryCase); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RicImportSummaryCasesFeature::createSummaryCasesFromFiles(const QStringList& fileNames, std::vector<RimSummaryCase*>* newCases, bool ensembleOrGroup) { RiaApplication* app = RiaApplication::instance(); RimProject* proj = app->project(); RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr; if (newCases) newCases->clear(); if (!sumCaseColl) return false; RifSummaryCaseRestartSelector fileSelector; fileSelector.setEnsembleOrGroupMode(ensembleOrGroup); fileSelector.determineFilesToImportFromSummaryFiles(fileNames); std::vector<RifSummaryCaseFileResultInfo> importFileInfos = fileSelector.summaryFileInfos(); if (!importFileInfos.empty()) { std::vector<RimSummaryCase*> sumCases = sumCaseColl->createSummaryCasesFromFileInfos(importFileInfos, true); if (newCases) newCases->insert(newCases->end(), sumCases.begin(), sumCases.end()); } if (fileSelector.foundErrors()) { QString errorMessage = fileSelector.createCombinedErrorMessage(); RiaLogging::error(errorMessage); QMessageBox::warning(nullptr, QString("Problem Importing Summary Case File(s)"), errorMessage); } return true; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimEclipseInputCaseOpm::importEclipseGridAndProperties(const QString& fileName) { if (this->reservoirData() == NULL) { this->setReservoirData(new RigCaseData); RifReaderOpmParserInput::importGridPropertiesFaults(fileName, reservoirData()); if (this->reservoirData()->mainGrid() == NULL) { return; } this->reservoirData()->mainGrid()->setFlipAxis(flipXAxis, flipYAxis); computeCachedData(); RiaApplication* app = RiaApplication::instance(); if (app->preferences()->autocomputeDepthRelatedProperties) { RimReservoirCellResultsStorage* matrixResults = results(RifReaderInterface::MATRIX_RESULTS); RimReservoirCellResultsStorage* fractureResults = results(RifReaderInterface::FRACTURE_RESULTS); matrixResults->computeDepthRelatedResults(); fractureResults->computeDepthRelatedResults(); } } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicImportEnsembleFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); QStringList fileNames = RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialog("Import Ensemble"); if (fileNames.isEmpty()) return; QString ensembleName = askForEnsembleName(); if (ensembleName.isEmpty()) return; std::vector<RimSummaryCase*> cases; RicImportSummaryCasesFeature::createSummaryCasesFromFiles(fileNames, &cases); validateEnsembleCases(cases); RicImportSummaryCasesFeature::addSummaryCases(cases); RicCreateSummaryCaseCollectionFeature::groupSummaryCases(cases, ensembleName, true); RiuPlotMainWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow(); if (mainPlotWindow && !cases.empty()) { mainPlotWindow->selectAsCurrentItem(cases.back()); mainPlotWindow->updateSummaryPlotToolBar(); } std::vector<RimCase*> allCases; app->project()->allCases(allCases); if (allCases.size() == 0) { RiuMainWindow::instance()->close(); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicWellPathImportCompletionsFileFeature::onActionTriggered(bool isChecked) { RimFishboneWellPathCollection* fishbonesWellPathCollection = RicWellPathImportCompletionsFileFeature::selectedWellPathCollection(); CVF_ASSERT(fishbonesWellPathCollection); // Open dialog box to select well path files RiaApplication* app = RiaApplication::instance(); QString defaultDir = app->lastUsedDialogDirectory("WELLPATH_DIR"); QStringList wellPathFilePaths = QFileDialog::getOpenFileNames(Riu3DMainWindowTools::mainWindowWidget(), "Import Fishbone Laterals", defaultDir, "Well Path Laterals (*.json *.asc *.asci *.ascii *.dev);;All Files (*.*)"); if (wellPathFilePaths.size() < 1) return; // Remember the path to next time app->setLastUsedDialogDirectory("WELLPATH_DIR", QFileInfo(wellPathFilePaths.last()).absolutePath()); fishbonesWellPathCollection->importCompletionsFromFile(wellPathFilePaths); RimWellPathCollection* wellPathCollection; fishbonesWellPathCollection->firstAncestorOrThisOfType(wellPathCollection); if (wellPathCollection) { wellPathCollection->updateConnectedEditors(); } if (app->project()) { app->project()->scheduleCreateDisplayModelAndRedrawAllViews(); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimCommandIssueFieldChanged::redo() { RiaApplication* app = RiaApplication::instance(); PdmObject* project = app->project(); caf::PdmObjectHandle* pdmObject = findObjectByName(project, this->objectName); if (pdmObject) { caf::PdmFieldHandle* fieldHandle = findFieldByKeyword(pdmObject, this->fieldName); if (fieldHandle && fieldHandle->uiCapability()) { caf::PdmValueField* valueField = dynamic_cast<caf::PdmValueField*>(fieldHandle); CVF_ASSERT(valueField); QVariant oldValue = valueField->toQVariant(); QVariant newValue(this->fieldValueToApply); valueField->setFromQVariant(newValue); caf::PdmUiFieldHandle* uiFieldHandle = fieldHandle->uiCapability(); uiFieldHandle->notifyFieldChanged(oldValue, newValue); } } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicSnapshotAllPlotsToFileFeature::saveAllPlots() { RiaApplication* app = RiaApplication::instance(); RiuMainPlotWindow* mainPlotWindow = app->mainPlotWindow(); if (!mainPlotWindow) return; RimProject* proj = app->project(); if (!proj) return; // Save images in snapshot catalog relative to project directory QString snapshotFolderName = app->createAbsolutePathFromProjectRelativePath("snapshots"); QDir snapshotPath(snapshotFolderName); if (!snapshotPath.exists()) { if (!snapshotPath.mkpath(".")) return; } const QString absSnapshotPath = snapshotPath.absolutePath(); // Well log plots { std::vector<RimWellLogPlot*> wellLogPlots; proj->descendantsIncludingThisOfType(wellLogPlots); for (RimWellLogPlot* wellLogPlot : wellLogPlots) { if (wellLogPlot && wellLogPlot->viewWidget()) { QString fileName = wellLogPlot->description(); fileName.replace(" ", "_"); QString absoluteFileName = caf::Utils::constructFullFileName(absSnapshotPath, fileName, ".png"); RicSnapshotViewToFileFeature::saveSnapshotAs(absoluteFileName, wellLogPlot); } } } // Summary plots { std::vector<RimSummaryPlot*> summaryPlots; proj->descendantsIncludingThisOfType(summaryPlots); for (RimSummaryPlot* summaryPlot : summaryPlots) { if (summaryPlot && summaryPlot->viewWidget()) { QString fileName = summaryPlot->description(); fileName.replace(" ", "_"); QString absoluteFileName = caf::Utils::constructFullFileName(absSnapshotPath, fileName, ".png"); RicSnapshotViewToFileFeature::saveSnapshotAs(absoluteFileName, summaryPlot); } } } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimCommandExecuteScript::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { if (&execute == changedField) { RiaApplication* app = RiaApplication::instance(); app->addCommandObject(this); app->executeCommandObjects(); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicImportSummaryCasesFeature::addSummaryCases(const std::vector<RimSummaryCase*> cases) { RiaApplication* app = RiaApplication::instance(); RimProject* proj = app->project(); RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr; sumCaseColl->addCases(cases); sumCaseColl->updateAllRequiredEditors(); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicNewStimPlanFractureTemplateFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); QString defaultDir = app->lastUsedDialogDirectory("BINARY_GRID"); QString fileName = QFileDialog::getOpenFileName(nullptr, "Open StimPlan XML File", defaultDir, "StimPlan XML File (*.xml);;All files(*.*)"); if (fileName.isEmpty()) return; RimProject* project = RiaApplication::instance()->project(); CVF_ASSERT(project); RimOilField* oilfield = project->activeOilField(); if (oilfield == nullptr) return; RimFractureTemplateCollection* fracDefColl = oilfield->fractureDefinitionCollection(); if (fracDefColl) { RimStimPlanFractureTemplate* fractureDef = new RimStimPlanFractureTemplate(); fracDefColl->addFractureTemplate(fractureDef); QFileInfo stimplanfileFileInfo(fileName); QString name = stimplanfileFileInfo.baseName(); if (name.isEmpty()) { name = "StimPlan Fracture Template"; } fractureDef->setName(name); fractureDef->setFileName(fileName); fractureDef->loadDataAndUpdate(); fractureDef->setDefaultsBasedOnXMLfile(); fractureDef->setDefaultWellDiameterFromUnit(); fractureDef->updateFractureGrid(); fracDefColl->updateConnectedEditors(); std::vector<Rim3dView*> views; project->allVisibleViews(views); for (Rim3dView* view : views) { if (dynamic_cast<RimEclipseView*>(view)) { view->updateConnectedEditors(); } } Riu3DMainWindowTools::selectAsCurrentItem(fractureDef); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RimEclipseInputCase::openEclipseGridFile() { // Early exit if reservoir data is created if (this->reservoirData() == NULL) { cvf::ref<RifReaderInterface> readerInterface; if (m_gridFileName().contains(RimDefines::mockModelBasicInputCase())) { readerInterface = this->createMockModel(this->m_gridFileName()); } else { RiaPreferences* prefs = RiaApplication::instance()->preferences(); readerInterface = new RifReaderEclipseInput; readerInterface->setReaderSetting(prefs->readerSettings()); cvf::ref<RigCaseData> eclipseCase = new RigCaseData; if (!readerInterface->open(m_gridFileName, eclipseCase.p())) { return false; } this->setReservoirData( eclipseCase.p() ); } CVF_ASSERT(this->reservoirData()); CVF_ASSERT(readerInterface.notNull()); results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(readerInterface.p()); results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(readerInterface.p()); this->reservoirData()->mainGrid()->setFlipAxis(flipXAxis, flipYAxis); computeCachedData(); loadAndSyncronizeInputProperties(); } RiaApplication* app = RiaApplication::instance(); if (app->preferences()->autocomputeDepthRelatedProperties) { RimReservoirCellResultsStorage* matrixResults = results(RifReaderInterface::MATRIX_RESULTS); RimReservoirCellResultsStorage* fractureResults = results(RifReaderInterface::FRACTURE_RESULTS); matrixResults->computeDepthRelatedResults(); fractureResults->computeDepthRelatedResults(); } return true; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicImportInputEclipseCaseFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); QString defaultDir = app->lastUsedDialogDirectory("INPUT_FILES"); QStringList fileNames = QFileDialog::getOpenFileNames(RiuMainWindow::instance(), "Import Eclipse Input Files", defaultDir, "Eclipse Input Files and Input Properties Eclipse Input Files (*.GRDECL);;All Files (*.*)"); if (fileNames.isEmpty()) return; // Remember the path to next time app->setLastUsedDialogDirectory("INPUT_FILES", QFileInfo(fileNames.last()).absolutePath()); app->openInputEclipseCaseFromFileNames(fileNames); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimCommandExecuteScript::redo() { if (!isEnabled) return; RiaApplication* app = RiaApplication::instance(); QString octavePath = app->octavePath(); if (!octavePath.isEmpty()) { QStringList arguments = app->octaveArguments(); arguments.append("--eval"); arguments << this->scriptText(); RiaApplication::instance()->launchProcess(octavePath, arguments); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicImportEclipseCaseTimeStepFilterFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); QString defaultDir = app->lastUsedDialogDirectory("BINARY_GRID"); QString fileName = QFileDialog::getOpenFileName(Riu3DMainWindowTools::mainWindowWidget(), "Import Eclipse File", defaultDir, "Eclipse Grid Files (*.GRID *.EGRID)"); if (!fileName.isEmpty()) { defaultDir = QFileInfo(fileName).absolutePath(); app->setLastUsedDialogDirectory("BINARY_GRID", defaultDir); if (RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilter(fileName)) { app->addToRecentFiles(fileName); } } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RiuPlotMainWindow::customMenuRequested(const QPoint& pos) { QMenu menu; RiaApplication* app = RiaApplication::instance(); app->project()->actionsBasedOnSelection(menu); // Qt doc: QAbstractScrollArea and its subclasses that map the context menu event to coordinates of the viewport(). // Since we might get this signal from different treeViews, we need to map the position accordingly. QObject* senderObj = this->sender(); QTreeView* treeView = dynamic_cast<QTreeView*>(senderObj); if (treeView) { QPoint globalPos = treeView->viewport()->mapToGlobal(pos); menu.exec(globalPos); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicImportEclipseCaseFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); QString defaultDir = app->lastUsedDialogDirectory("BINARY_GRID"); QStringList fileNames = QFileDialog::getOpenFileNames(Riu3DMainWindowTools::mainWindowWidget(), "Import Eclipse File", defaultDir, "Eclipse Grid Files (*.GRID *.EGRID)"); if (fileNames.size()) defaultDir = QFileInfo(fileNames.last()).absolutePath(); app->setLastUsedDialogDirectory("BINARY_GRID", defaultDir); QStringList newCaseFiles; RiaImportEclipseCaseTools::openEclipseCasesFromFile(fileNames, &newCaseFiles); for (const auto newCaseFile : newCaseFiles) { RiaApplication::instance()->addToRecentFiles(newCaseFile); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicNewSummaryEnsembleCurveSetFeature::createPlotForCurveSetAndUpdate(RimSummaryCaseCollection* ensemble) { RiaApplication* app = RiaApplication::instance(); RimProject* proj = app->project(); RimSummaryPlotCollection* summaryPlotCollection = proj->mainPlotCollection->summaryPlotCollection(); RimSummaryPlot* plot = summaryPlotCollection->createSummaryPlotWithAutoTitle(); RimEnsembleCurveSet* curveSet = RicNewSummaryEnsembleCurveSetFeature::addDefaultCurveSet(plot, ensemble); plot->loadDataAndUpdate(); summaryPlotCollection->updateConnectedEditors(); RiuPlotMainWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow(); if (mainPlotWindow) { mainPlotWindow->selectAsCurrentItem(curveSet); mainPlotWindow->updateSummaryPlotToolBar(); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicSaveEclipseResultAsInputPropertyExec::redo() { CVF_ASSERT(m_cellColors); if (!m_cellColors->reservoirView()) return; if (!m_cellColors->reservoirView()->eclipseCase()) return; if (!m_cellColors->reservoirView()->eclipseCase()->reservoirData()) return; RimBinaryExportSettings exportSettings; exportSettings.eclipseKeyword = m_cellColors->resultVariable(); { QString projectFolder; RiaApplication* app = RiaApplication::instance(); QString projectFileName = app->currentProjectFileName(); if (!projectFileName.isEmpty()) { QFileInfo fi(projectFileName); projectFolder = fi.absolutePath(); } else { projectFolder = m_cellColors->reservoirView()->eclipseCase()->locationOnDisc(); } QString outputFileName = projectFolder + "/" + m_cellColors->resultVariable(); exportSettings.fileName = outputFileName; } caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Binary Eclipse Data to Text File", ""); if (propertyDialog.exec() == QDialog::Accepted) { size_t timeStep = m_cellColors->reservoirView()->currentTimeStep(); RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(m_cellColors->porosityModel()); bool isOk = RifEclipseInputFileTools::writeBinaryResultToTextFile(exportSettings.fileName, m_cellColors->reservoirView()->eclipseCase()->reservoirData(), porosityModel, timeStep, m_cellColors->resultVariable(), exportSettings.eclipseKeyword, exportSettings.undefinedValue); if (!isOk) { QMessageBox::critical(NULL, "File export", "Failed to exported current result to " + exportSettings.fileName); } } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicExecuteScriptFeature::onActionTriggered(bool isChecked) { std::vector<RimCalcScript*> selection = RicScriptFeatureImpl::selectedScripts(); CVF_ASSERT(selection.size() > 0); RiuMainWindow* mainWindow = RiuMainWindow::instance(); mainWindow->showProcessMonitorDockPanel(); RimCalcScript* calcScript = selection[0]; RiaApplication* app = RiaApplication::instance(); QString octavePath = app->octavePath(); if (!octavePath.isEmpty()) { QStringList arguments = RimCalcScript::createCommandLineArguments(calcScript->absoluteFileName()); RiaApplication::instance()->launchProcess(octavePath, arguments); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicImportGeoMechCaseTimeStepFilterFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); QString defaultDir = app->lastUsedDialogDirectory("GEOMECH_MODEL"); QStringList fileNames = QFileDialog::getOpenFileNames(nullptr, "Import Geo-Mechanical Model", defaultDir, "Abaqus results (*.odb)"); if (fileNames.size()) defaultDir = QFileInfo(fileNames.last()).absolutePath(); for (QString fileName : fileNames) { if (!fileName.isEmpty()) { defaultDir = QFileInfo(fileName).absolutePath(); app->setLastUsedDialogDirectory("GEOMECH_MODEL", defaultDir); if (app->openOdbCaseFromFile(fileName, true)) { app->addToRecentFiles(fileName); } } } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QStringList RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialog(const QString& dialogTitle, const QString& pathCacheName) { RiaApplication* app = RiaApplication::instance(); QString defaultDir = app->lastUsedDialogDirectory(pathCacheName); RicFileHierarchyDialogResult result = RicFileHierarchyDialog::runRecursiveSearchDialog( nullptr, dialogTitle, defaultDir, m_pathFilter, m_fileNameFilter, QStringList(".SMSPEC")); // Remember filters m_pathFilter = result.pathFilter; m_fileNameFilter = result.fileNameFilter; if (!result.ok) return QStringList(); // Remember the path to next time app->setLastUsedDialogDirectory(pathCacheName, QFileInfo(result.rootDir).absoluteFilePath()); return result.files; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicImportInputEclipseCaseOpmFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); QString defaultDir = app->lastUsedDialogDirectory("INPUT_FILES"); QString fileName = QFileDialog::getOpenFileName(RiuMainWindow::instance(), "Import Eclipse Input file", defaultDir, "Eclipse Input Files (*.GRDECL);;All Files (*.*)"); if (fileName.isEmpty()) return; // Remember the path to next time app->setLastUsedDialogDirectory("INPUT_FILES", QFileInfo(fileName).absolutePath()); RimProject* proj = app->project(); RimEclipseCaseCollection* analysisModels = proj->activeOilField() ? proj->activeOilField()->analysisModels() : NULL; if (analysisModels) { // This code originates from RiaApplication::openInputEclipseCaseFromFileNames RimEclipseInputCaseOpm* rimInputReservoir = new RimEclipseInputCaseOpm(); proj->assignCaseIdToCase(rimInputReservoir); rimInputReservoir->importNewEclipseGridAndProperties(fileName); analysisModels->cases.push_back(rimInputReservoir); RimEclipseView* riv = rimInputReservoir->createAndAddReservoirView(); riv->cellResult()->setResultType(RimDefines::INPUT_PROPERTY); riv->hasUserRequestedAnimation = true; riv->loadDataAndUpdate(); if (!riv->cellResult()->hasResult()) { riv->cellResult()->setResultVariable(RimDefines::undefinedResultName()); } analysisModels->updateConnectedEditors(); RiuMainWindow::instance()->selectAsCurrentItem(riv->cellResult()); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimGeoMechView::RimGeoMechView(void) { RiaApplication* app = RiaApplication::instance(); RiaPreferences* preferences = app->preferences(); CVF_ASSERT(preferences); CAF_PDM_InitObject("Geomechanical View", ":/ReservoirView.png", "", ""); CAF_PDM_InitFieldNoDefault(&cellResult, "GridCellResult", "Color Result", ":/CellResult.png", "", ""); cellResult = new RimGeoMechCellColors(); cellResult.uiCapability()->setUiHidden(true); CAF_PDM_InitFieldNoDefault(&m_propertyFilterCollection, "PropertyFilters", "Property Filters", "", "", ""); m_propertyFilterCollection = new RimGeoMechPropertyFilterCollection(); m_propertyFilterCollection.uiCapability()->setUiHidden(true); //this->cellResult()->setReservoirView(this); this->cellResult()->legendConfig()->setReservoirView(this); m_scaleTransform = new cvf::Transform(); m_vizLogic = new RivGeoMechVizLogic(this); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicImportEclipseCaseFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); QString defaultDir = app->defaultFileDialogDirectory("BINARY_GRID"); QStringList fileNames = QFileDialog::getOpenFileNames(RiuMainWindow::instance(), "Import Eclipse File", defaultDir, "Eclipse Grid Files (*.GRID *.EGRID)"); if (fileNames.size()) defaultDir = QFileInfo(fileNames.last()).absolutePath(); app->setDefaultFileDialogDirectory("BINARY_GRID", defaultDir); int i; for (i = 0; i < fileNames.size(); i++) { QString fileName = fileNames[i]; if (!fileNames.isEmpty()) { if (app->openEclipseCaseFromFile(fileName)) { RiuMainWindow::instance()->addRecentFiles(fileName); } } } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicImportSummaryCasesFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); QString pathCacheName = "INPUT_FILES"; QStringList fileNames = runRecursiveSummaryCaseFileSearchDialog("Import Summary Cases", pathCacheName); std::vector<RimSummaryCase*> cases; if (!fileNames.isEmpty()) createSummaryCasesFromFiles(fileNames, &cases); addSummaryCases(cases); if (!cases.empty()) { createNewPlot(cases.front()); } addCasesToGroupIfRelevant(cases); for (const auto& rimCase : cases) RiaApplication::instance()->addToRecentFiles(rimCase->summaryHeaderFilename()); RiuPlotMainWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow(); if (mainPlotWindow && !cases.empty()) { mainPlotWindow->selectAsCurrentItem(cases.back()); mainPlotWindow->updateSummaryPlotToolBar(); } std::vector<RimCase*> allCases; app->project()->allCases(allCases); if (allCases.size() == 0) { RiuMainWindow::instance()->close(); } }