(#703) Fixed resolve of PtrField after the object copy was inserted into PdmStructures

This commit is contained in:
Magne Sjaastad 2015-12-09 18:34:48 +01:00
parent 4713014d26
commit 64b3281382
2 changed files with 36 additions and 32 deletions

View File

@ -81,30 +81,33 @@ void RicPasteEclipseViewsFeature::onActionTriggered(bool isChecked)
if (objectGroup.objects.size() == 0) return;
std::vector<caf::PdmPointer<RimEclipseView> > eclipseViews;
objectGroup.createCopyByType(&eclipseViews, PdmDefaultObjectFactory::instance());
objectGroup.objectsByType(&eclipseViews);
if (eclipseViews.size() != 0)
// Add cases to case group
for (size_t i = 0; i < eclipseViews.size(); i++)
{
// Add cases to case group
for (size_t i = 0; i < eclipseViews.size(); i++)
{
RimEclipseView* rimReservoirView = eclipseViews[i];
QString nameOfCopy = QString("Copy of ") + rimReservoirView->name;
rimReservoirView->name = nameOfCopy;
eclipseCase->reservoirViews().push_back(rimReservoirView);
RimEclipseView* rimReservoirView = dynamic_cast<RimEclipseView*>(eclipseViews[i]->xmlCapability()->copyByXmlSerialization(PdmDefaultObjectFactory::instance()));
CVF_ASSERT(rimReservoirView);
// Delete all wells to be able to copy/paste between cases, as the wells differ between cases
rimReservoirView->wellCollection()->wells().deleteAllChildObjects();
QString nameOfCopy = QString("Copy of ") + rimReservoirView->name;
rimReservoirView->name = nameOfCopy;
eclipseCase->reservoirViews().push_back(rimReservoirView);
rimReservoirView->initAfterReadRecursively();
rimReservoirView->setEclipseCase(eclipseCase);
// Delete all wells to be able to copy/paste between cases, as the wells differ between cases
rimReservoirView->wellCollection()->wells().deleteAllChildObjects();
caf::PdmDocument::updateUiIconStateRecursively(rimReservoirView);
rimReservoirView->setEclipseCase(eclipseCase);
rimReservoirView->loadDataAndUpdate();
// Resolve references after reservoir view has been inserted into Rim structures
// Intersections referencing a well path requires this
rimReservoirView->initAfterReadRecursively();
rimReservoirView->resolveReferencesRecursively();
eclipseCase->updateConnectedEditors();
}
caf::PdmDocument::updateUiIconStateRecursively(rimReservoirView);
rimReservoirView->loadDataAndUpdate();
eclipseCase->updateConnectedEditors();
}
}

View File

@ -75,27 +75,28 @@ void RicPasteGeoMechViewsFeature::onActionTriggered(bool isChecked)
if (objectGroup.objects.size() == 0) return;
std::vector<caf::PdmPointer<RimGeoMechView> > geomViews;
objectGroup.createCopyByType(&geomViews, PdmDefaultObjectFactory::instance());
objectGroup.objectsByType(&geomViews);
if (geomViews.size() != 0)
// Add cases to case group
for (size_t i = 0; i < geomViews.size(); i++)
{
// Add cases to case group
for (size_t i = 0; i < geomViews.size(); i++)
{
RimGeoMechView* rimReservoirView = geomViews[i];
QString nameOfCopy = QString("Copy of ") + rimReservoirView->name;
rimReservoirView->name = nameOfCopy;
geomCase->geoMechViews().push_back(rimReservoirView);
RimGeoMechView* rimReservoirView = dynamic_cast<RimGeoMechView*>(geomViews[i]->xmlCapability()->copyByXmlSerialization(PdmDefaultObjectFactory::instance()));
QString nameOfCopy = QString("Copy of ") + rimReservoirView->name;
rimReservoirView->name = nameOfCopy;
geomCase->geoMechViews().push_back(rimReservoirView);
rimReservoirView->initAfterReadRecursively();
rimReservoirView->setGeoMechCase(geomCase);
rimReservoirView->setGeoMechCase(geomCase);
caf::PdmDocument::updateUiIconStateRecursively(rimReservoirView);
// Resolve references after reservoir view has been inserted into Rim structures
// Intersections referencing a well path requires this
rimReservoirView->initAfterReadRecursively();
rimReservoirView->resolveReferencesRecursively();
rimReservoirView->loadDataAndUpdate();
caf::PdmDocument::updateUiIconStateRecursively(rimReservoirView);
geomCase->updateConnectedEditors();
}
rimReservoirView->loadDataAndUpdate();
geomCase->updateConnectedEditors();
}
}