#2462 Add fracture template id

This commit is contained in:
Bjørn Erik Jensen
2018-03-02 09:33:17 +01:00
parent bbabb60ece
commit 3fc99a73bc
13 changed files with 107 additions and 27 deletions

View File

@@ -79,9 +79,9 @@ void RicNewEllipseFractureTemplateFeature::onActionTriggered(bool isChecked)
{ {
RimEllipseFractureTemplate* ellipseFractureTemplate = new RimEllipseFractureTemplate(); RimEllipseFractureTemplate* ellipseFractureTemplate = new RimEllipseFractureTemplate();
fracDefColl->fractureDefinitions.push_back(ellipseFractureTemplate); fracDefColl->addFractureTemplate(ellipseFractureTemplate);
ellipseFractureTemplate->setName("Ellipse Fracture Template"); ellipseFractureTemplate->setName("Ellipse Fracture Template");
ellipseFractureTemplate->setFractureTemplateUnit(fracDefColl->defaultUnitsForFracTemplates()); ellipseFractureTemplate->setFractureTemplateUnit(fracDefColl->defaultUnitSystemType());
ellipseFractureTemplate->setDefaultValuesFromUnit(); ellipseFractureTemplate->setDefaultValuesFromUnit();
selectFractureTemplateAndUpdate(fracDefColl, ellipseFractureTemplate); selectFractureTemplateAndUpdate(fracDefColl, ellipseFractureTemplate);

View File

@@ -60,7 +60,7 @@ void RicNewStimPlanFractureTemplateFeature::onActionTriggered(bool isChecked)
if (fracDefColl) if (fracDefColl)
{ {
RimStimPlanFractureTemplate* fractureDef = new RimStimPlanFractureTemplate(); RimStimPlanFractureTemplate* fractureDef = new RimStimPlanFractureTemplate();
fracDefColl->fractureDefinitions.push_back(fractureDef); fracDefColl->addFractureTemplate(fractureDef);
QFileInfo stimplanfileFileInfo(fileName); QFileInfo stimplanfileFileInfo(fileName);
QString name = stimplanfileFileInfo.baseName(); QString name = stimplanfileFileInfo.baseName();

View File

@@ -73,12 +73,12 @@ void RicPasteEllipseFractureFeature::onActionTriggered(bool isChecked)
for (const auto& source : typedObjects) for (const auto& source : typedObjects)
{ {
auto rimReservoirView = dynamic_cast<RimEllipseFractureTemplate*>( auto templ = dynamic_cast<RimEllipseFractureTemplate*>(
source->xmlCapability()->copyByXmlSerialization(caf::PdmDefaultObjectFactory::instance())); source->xmlCapability()->copyByXmlSerialization(caf::PdmDefaultObjectFactory::instance()));
fractureTemplateColl->fractureDefinitions.push_back(rimReservoirView); fractureTemplateColl->addFractureTemplate(templ);
RicNewEllipseFractureTemplateFeature::selectFractureTemplateAndUpdate(fractureTemplateColl, rimReservoirView); RicNewEllipseFractureTemplateFeature::selectFractureTemplateAndUpdate(fractureTemplateColl, templ);
} }
return; return;

View File

@@ -76,7 +76,7 @@ void RicPasteStimPlanFractureFeature::onActionTriggered(bool isChecked)
auto copyOfStimPlanTemplate = dynamic_cast<RimStimPlanFractureTemplate*>( auto copyOfStimPlanTemplate = dynamic_cast<RimStimPlanFractureTemplate*>(
source->xmlCapability()->copyByXmlSerialization(caf::PdmDefaultObjectFactory::instance())); source->xmlCapability()->copyByXmlSerialization(caf::PdmDefaultObjectFactory::instance()));
fractureTemplateColl->fractureDefinitions.push_back(copyOfStimPlanTemplate); fractureTemplateColl->addFractureTemplate(copyOfStimPlanTemplate);
RicNewEllipseFractureTemplateFeature::selectFractureTemplateAndUpdate(fractureTemplateColl, copyOfStimPlanTemplate); RicNewEllipseFractureTemplateFeature::selectFractureTemplateAndUpdate(fractureTemplateColl, copyOfStimPlanTemplate);
} }

View File

@@ -377,6 +377,7 @@ void RimEllipseFractureTemplate::defineUiOrdering(QString uiConfigName, caf::Pdm
} }
uiOrdering.add(&m_name); uiOrdering.add(&m_name);
uiOrdering.add(&m_id);
caf::PdmUiGroup* geometryGroup = uiOrdering.addNewGroup("Geometry"); caf::PdmUiGroup* geometryGroup = uiOrdering.addNewGroup("Geometry");
geometryGroup->add(&m_halfLength); geometryGroup->add(&m_halfLength);

View File

@@ -416,7 +416,7 @@ QList<caf::PdmOptionItemInfo> RimFracture::calculateValueOptions(const caf::PdmF
{ {
RimFractureTemplateCollection* fracDefColl = oilField->fractureDefinitionCollection(); RimFractureTemplateCollection* fracDefColl = oilField->fractureDefinitionCollection();
for (RimFractureTemplate* fracDef : fracDefColl->fractureDefinitions()) for (RimFractureTemplate* fracDef : fracDefColl->fractureTemplates())
{ {
QString displayText = fracDef->nameAndUnit(); QString displayText = fracDef->nameAndUnit();
if (fracDef->fractureTemplateUnit() != fractureUnit()) if (fracDef->fractureTemplateUnit() != fractureUnit())

View File

@@ -98,6 +98,9 @@ RimFractureTemplate::RimFractureTemplate()
{ {
CAF_PDM_InitObject("Fracture Template", ":/FractureTemplate16x16.png", "", ""); CAF_PDM_InitObject("Fracture Template", ":/FractureTemplate16x16.png", "", "");
CAF_PDM_InitField(&m_id, "Id", -1, "ID", "", "", "");
m_id.uiCapability()->setUiReadOnly(true);
CAF_PDM_InitField(&m_name, "UserDescription", QString("Fracture Template"), "Name", "", "", ""); CAF_PDM_InitField(&m_name, "UserDescription", QString("Fracture Template"), "Name", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_nameAndUnit, "NameAndUnit", "NameAndUnit", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_nameAndUnit, "NameAndUnit", "NameAndUnit", "", "", "");
@@ -170,6 +173,14 @@ RimFractureTemplate::~RimFractureTemplate()
{ {
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RimFractureTemplate::id() const
{
return m_id;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -638,6 +649,14 @@ void RimFractureTemplate::disconnectAllFracturesAndRedrawViews() const
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFractureTemplate::setId(int id)
{
m_id = id;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -104,6 +104,7 @@ public:
RimFractureTemplate(); RimFractureTemplate();
virtual ~RimFractureTemplate(); virtual ~RimFractureTemplate();
int id() const;
QString name() const; QString name() const;
QString nameAndUnit() const; QString nameAndUnit() const;
@@ -142,7 +143,7 @@ public:
virtual void loadDataAndUpdate() = 0; virtual void loadDataAndUpdate() = 0;
void disconnectAllFracturesAndRedrawViews() const; void disconnectAllFracturesAndRedrawViews() const;
void setId(int id);
protected: protected:
virtual caf::PdmFieldHandle* userDescriptionField() override; virtual caf::PdmFieldHandle* userDescriptionField() override;
@@ -161,6 +162,7 @@ private:
double fractureWidth() const; double fractureWidth() const;
protected: protected:
caf::PdmField<int> m_id;
caf::PdmField<QString> m_name; caf::PdmField<QString> m_name;
caf::PdmProxyValueField<QString> m_nameAndUnit; caf::PdmProxyValueField<QString> m_nameAndUnit;

View File

@@ -52,12 +52,16 @@ RimFractureTemplateCollection::RimFractureTemplateCollection(void)
{ {
CAF_PDM_InitObject("Fracture Templates", ":/FractureTemplates16x16.png", "", ""); CAF_PDM_InitObject("Fracture Templates", ":/FractureTemplates16x16.png", "", "");
CAF_PDM_InitField(&defaultUnitsForFracTemplates, "DefaultUnitForTemplates", CAF_PDM_InitField(&m_defaultUnitsForFracTemplates, "DefaultUnitForTemplates",
caf::AppEnum<RiaEclipseUnitTools::UnitSystem>(RiaEclipseUnitTools::UNITS_METRIC), caf::AppEnum<RiaEclipseUnitTools::UnitSystem>(RiaEclipseUnitTools::UNITS_METRIC),
"Default unit system for fracture templates", "", "", ""); "Default unit system for fracture templates", "", "", "");
CAF_PDM_InitFieldNoDefault(&fractureDefinitions, "FractureDefinitions", "", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_fractureDefinitions, "FractureDefinitions", "", "", "", "");
fractureDefinitions.uiCapability()->setUiHidden(true); m_fractureDefinitions.uiCapability()->setUiHidden(true);
CAF_PDM_InitField(&m_nextValidFractureTemplateId, "NextValidFractureTemplateId", 0, "", "", "", "");
m_fractureDefinitions.uiCapability()->setUiHidden(true);
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -65,7 +69,37 @@ RimFractureTemplateCollection::RimFractureTemplateCollection(void)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimFractureTemplateCollection::~RimFractureTemplateCollection() RimFractureTemplateCollection::~RimFractureTemplateCollection()
{ {
fractureDefinitions.deleteAllChildObjects(); m_fractureDefinitions.deleteAllChildObjects();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimFractureTemplate*> RimFractureTemplateCollection::fractureTemplates() const
{
std::vector<RimFractureTemplate*> templates;
for (auto& templ : m_fractureDefinitions)
{
templates.push_back(templ);
}
return templates;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFractureTemplateCollection::addFractureTemplate(RimFractureTemplate* templ)
{
templ->setId(nextFractureTemplateId());
m_fractureDefinitions.push_back(templ);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiaEclipseUnitTools::UnitSystemType RimFractureTemplateCollection::defaultUnitSystemType() const
{
return m_defaultUnitsForFracTemplates;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -73,7 +107,7 @@ RimFractureTemplateCollection::~RimFractureTemplateCollection()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimFractureTemplate* RimFractureTemplateCollection::firstFractureOfUnit(RiaEclipseUnitTools::UnitSystem unitSet) const RimFractureTemplate* RimFractureTemplateCollection::firstFractureOfUnit(RiaEclipseUnitTools::UnitSystem unitSet) const
{ {
for (RimFractureTemplate* f : fractureDefinitions()) for (RimFractureTemplate* f : m_fractureDefinitions())
{ {
if (f->fractureTemplateUnit() == unitSet) if (f->fractureTemplateUnit() == unitSet)
{ {
@@ -91,7 +125,7 @@ std::vector<std::pair<QString, QString> > RimFractureTemplateCollection::resultN
{ {
std::set<std::pair<QString, QString> > nameSet; std::set<std::pair<QString, QString> > nameSet;
for (const RimFractureTemplate* f : fractureDefinitions()) for (const RimFractureTemplate* f : m_fractureDefinitions())
{ {
std::vector<std::pair<QString, QString> > namesAndUnits = f->uiResultNamesWithUnit(); std::vector<std::pair<QString, QString> > namesAndUnits = f->uiResultNamesWithUnit();
@@ -115,7 +149,7 @@ void RimFractureTemplateCollection::computeMinMax(const QString& uiResultName, c
MinMaxAccumulator minMaxAccumulator; MinMaxAccumulator minMaxAccumulator;
PosNegAccumulator posNegAccumulator; PosNegAccumulator posNegAccumulator;
for (const RimFractureTemplate* f : fractureDefinitions()) for (const RimFractureTemplate* f : m_fractureDefinitions())
{ {
if (f) if (f)
{ {
@@ -138,7 +172,7 @@ void RimFractureTemplateCollection::createAndAssignTemplateCopyForNonMatchingUni
std::vector<RimFractureTemplate*> templatesToBeAdded; std::vector<RimFractureTemplate*> templatesToBeAdded;
for (RimFractureTemplate* fractureTemplate : fractureDefinitions()) for (RimFractureTemplate* fractureTemplate : m_fractureDefinitions())
{ {
if (fractureTemplate) if (fractureTemplate)
{ {
@@ -188,7 +222,7 @@ void RimFractureTemplateCollection::createAndAssignTemplateCopyForNonMatchingUni
for (auto templateWithMatchingUnit : templatesToBeAdded) for (auto templateWithMatchingUnit : templatesToBeAdded)
{ {
fractureDefinitions.push_back(templateWithMatchingUnit); m_fractureDefinitions.push_back(templateWithMatchingUnit);
} }
} }
@@ -197,7 +231,7 @@ void RimFractureTemplateCollection::createAndAssignTemplateCopyForNonMatchingUni
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimFractureTemplateCollection::loadAndUpdateData() void RimFractureTemplateCollection::loadAndUpdateData()
{ {
for (RimFractureTemplate* f : fractureDefinitions()) for (RimFractureTemplate* f : m_fractureDefinitions())
{ {
RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast<RimStimPlanFractureTemplate*>(f); RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast<RimStimPlanFractureTemplate*>(f);
if (stimPlanFracture) if (stimPlanFracture)
@@ -212,7 +246,7 @@ void RimFractureTemplateCollection::loadAndUpdateData()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimFractureTemplateCollection::setDefaultConductivityResultIfEmpty() void RimFractureTemplateCollection::setDefaultConductivityResultIfEmpty()
{ {
for (RimFractureTemplate* f : fractureDefinitions()) for (RimFractureTemplate* f : m_fractureDefinitions())
{ {
RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast<RimStimPlanFractureTemplate*>(f); RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast<RimStimPlanFractureTemplate*>(f);
if (stimPlanFracture) if (stimPlanFracture)
@@ -227,7 +261,7 @@ void RimFractureTemplateCollection::setDefaultConductivityResultIfEmpty()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimFractureTemplateCollection::updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath) void RimFractureTemplateCollection::updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath)
{ {
for (RimFractureTemplate* f : fractureDefinitions()) for (RimFractureTemplate* f : m_fractureDefinitions())
{ {
RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast<RimStimPlanFractureTemplate*>(f); RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast<RimStimPlanFractureTemplate*>(f);
if (stimPlanFracture) if (stimPlanFracture)
@@ -248,6 +282,12 @@ void RimFractureTemplateCollection::updateFilePathsFromProjectPath(const QString
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimFractureTemplateCollection::initAfterRead() void RimFractureTemplateCollection::initAfterRead()
{ {
// Assign template id if not already assigned
for (auto& templ : m_fractureDefinitions)
{
if (templ->id() < 0) templ->setId(nextFractureTemplateId());
}
RimProject* proj = nullptr; RimProject* proj = nullptr;
this->firstAncestorOrThisOfType(proj); this->firstAncestorOrThisOfType(proj);
if (proj && proj->isProjectFileVersionEqualOrOlderThan("2018.1.0.103")) if (proj && proj->isProjectFileVersionEqualOrOlderThan("2018.1.0.103"))
@@ -347,3 +387,12 @@ void RimFractureTemplateCollection::initAfterRead()
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RimFractureTemplateCollection::nextFractureTemplateId()
{
int newId = m_nextValidFractureTemplateId;
m_nextValidFractureTemplateId = m_nextValidFractureTemplateId + 1;
return newId;
}

View File

@@ -38,10 +38,11 @@ public:
RimFractureTemplateCollection(void); RimFractureTemplateCollection(void);
virtual ~RimFractureTemplateCollection(void); virtual ~RimFractureTemplateCollection(void);
std::vector<RimFractureTemplate*> fractureTemplates() const;
void addFractureTemplate(RimFractureTemplate* templ);
RiaEclipseUnitTools::UnitSystemType defaultUnitSystemType() const;
RimFractureTemplate* firstFractureOfUnit(RiaEclipseUnitTools::UnitSystem unitSet) const; RimFractureTemplate* firstFractureOfUnit(RiaEclipseUnitTools::UnitSystem unitSet) const;
caf::PdmChildArrayField<RimFractureTemplate*> fractureDefinitions;
caf::PdmField< RiaEclipseUnitTools::UnitSystemType > defaultUnitsForFracTemplates;
std::vector<std::pair<QString, QString> > resultNamesAndUnits() const; std::vector<std::pair<QString, QString> > resultNamesAndUnits() const;
void computeMinMax(const QString& uiResultName, const QString& unit, double* minValue, double* maxValue, double* posClosestToZero, double* negClosestToZero) const; void computeMinMax(const QString& uiResultName, const QString& unit, double* minValue, double* maxValue, double* posClosestToZero, double* negClosestToZero) const;
@@ -52,6 +53,13 @@ public:
void updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath); void updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath);
protected: protected:
virtual void initAfterRead() override; virtual void initAfterRead() override;
private:
int nextFractureTemplateId();
caf::PdmChildArrayField<RimFractureTemplate*> m_fractureDefinitions;
caf::PdmField< RiaEclipseUnitTools::UnitSystemType > m_defaultUnitsForFracTemplates;
caf::PdmField<int> m_nextValidFractureTemplateId; // Unique fracture template ID within a project, used to identify a fracture template
}; };

View File

@@ -734,6 +734,7 @@ std::vector<cvf::Vec3f> RimStimPlanFractureTemplate::fractureBorderPolygon()
void RimStimPlanFractureTemplate::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) void RimStimPlanFractureTemplate::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{ {
uiOrdering.add(&m_name); uiOrdering.add(&m_name);
uiOrdering.add(&m_id);
caf::PdmUiGroup* fileGroup = uiOrdering.addNewGroup("Input"); caf::PdmUiGroup* fileGroup = uiOrdering.addNewGroup("Input");
fileGroup->add(&m_stimPlanFileName); fileGroup->add(&m_stimPlanFileName);

View File

@@ -1385,7 +1385,7 @@ void RimEclipseView::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering
if (oilfield && oilfield->fractureDefinitionCollection().notNull()) if (oilfield && oilfield->fractureDefinitionCollection().notNull())
{ {
if (!oilfield->fractureDefinitionCollection()->fractureDefinitions.empty()) if (!oilfield->fractureDefinitionCollection()->fractureTemplates().empty())
{ {
uiTreeOrdering.add(fractureColors()); uiTreeOrdering.add(fractureColors());
} }

View File

@@ -959,7 +959,7 @@ std::vector<RimFractureTemplate*> RimProject::allFractureTemplates() const
allOilFields(oilFields); allOilFields(oilFields);
for (RimFractureTemplateCollection* templColl : allFractureTemplateCollections()) for (RimFractureTemplateCollection* templColl : allFractureTemplateCollections())
{ {
for (RimFractureTemplate* templ : templColl->fractureDefinitions) for (RimFractureTemplate* templ : templColl->fractureTemplates())
{ {
templates.push_back(templ); templates.push_back(templ);
} }