#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();
fracDefColl->fractureDefinitions.push_back(ellipseFractureTemplate);
fracDefColl->addFractureTemplate(ellipseFractureTemplate);
ellipseFractureTemplate->setName("Ellipse Fracture Template");
ellipseFractureTemplate->setFractureTemplateUnit(fracDefColl->defaultUnitsForFracTemplates());
ellipseFractureTemplate->setFractureTemplateUnit(fracDefColl->defaultUnitSystemType());
ellipseFractureTemplate->setDefaultValuesFromUnit();
selectFractureTemplateAndUpdate(fracDefColl, ellipseFractureTemplate);

View File

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

View File

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

View File

@ -76,7 +76,7 @@ void RicPasteStimPlanFractureFeature::onActionTriggered(bool isChecked)
auto copyOfStimPlanTemplate = dynamic_cast<RimStimPlanFractureTemplate*>(
source->xmlCapability()->copyByXmlSerialization(caf::PdmDefaultObjectFactory::instance()));
fractureTemplateColl->fractureDefinitions.push_back(copyOfStimPlanTemplate);
fractureTemplateColl->addFractureTemplate(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_id);
caf::PdmUiGroup* geometryGroup = uiOrdering.addNewGroup("Geometry");
geometryGroup->add(&m_halfLength);

View File

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

View File

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

View File

@ -52,12 +52,16 @@ RimFractureTemplateCollection::RimFractureTemplateCollection(void)
{
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),
"Default unit system for fracture templates", "", "", "");
CAF_PDM_InitFieldNoDefault(&fractureDefinitions, "FractureDefinitions", "", "", "", "");
fractureDefinitions.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&m_fractureDefinitions, "FractureDefinitions", "", "", "", "");
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()
{
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
{
for (RimFractureTemplate* f : fractureDefinitions())
for (RimFractureTemplate* f : m_fractureDefinitions())
{
if (f->fractureTemplateUnit() == unitSet)
{
@ -91,7 +125,7 @@ std::vector<std::pair<QString, QString> > RimFractureTemplateCollection::resultN
{
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();
@ -115,7 +149,7 @@ void RimFractureTemplateCollection::computeMinMax(const QString& uiResultName, c
MinMaxAccumulator minMaxAccumulator;
PosNegAccumulator posNegAccumulator;
for (const RimFractureTemplate* f : fractureDefinitions())
for (const RimFractureTemplate* f : m_fractureDefinitions())
{
if (f)
{
@ -138,7 +172,7 @@ void RimFractureTemplateCollection::createAndAssignTemplateCopyForNonMatchingUni
std::vector<RimFractureTemplate*> templatesToBeAdded;
for (RimFractureTemplate* fractureTemplate : fractureDefinitions())
for (RimFractureTemplate* fractureTemplate : m_fractureDefinitions())
{
if (fractureTemplate)
{
@ -188,7 +222,7 @@ void RimFractureTemplateCollection::createAndAssignTemplateCopyForNonMatchingUni
for (auto templateWithMatchingUnit : templatesToBeAdded)
{
fractureDefinitions.push_back(templateWithMatchingUnit);
m_fractureDefinitions.push_back(templateWithMatchingUnit);
}
}
@ -197,7 +231,7 @@ void RimFractureTemplateCollection::createAndAssignTemplateCopyForNonMatchingUni
//--------------------------------------------------------------------------------------------------
void RimFractureTemplateCollection::loadAndUpdateData()
{
for (RimFractureTemplate* f : fractureDefinitions())
for (RimFractureTemplate* f : m_fractureDefinitions())
{
RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast<RimStimPlanFractureTemplate*>(f);
if (stimPlanFracture)
@ -212,7 +246,7 @@ void RimFractureTemplateCollection::loadAndUpdateData()
//--------------------------------------------------------------------------------------------------
void RimFractureTemplateCollection::setDefaultConductivityResultIfEmpty()
{
for (RimFractureTemplate* f : fractureDefinitions())
for (RimFractureTemplate* f : m_fractureDefinitions())
{
RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast<RimStimPlanFractureTemplate*>(f);
if (stimPlanFracture)
@ -227,7 +261,7 @@ void RimFractureTemplateCollection::setDefaultConductivityResultIfEmpty()
//--------------------------------------------------------------------------------------------------
void RimFractureTemplateCollection::updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath)
{
for (RimFractureTemplate* f : fractureDefinitions())
for (RimFractureTemplate* f : m_fractureDefinitions())
{
RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast<RimStimPlanFractureTemplate*>(f);
if (stimPlanFracture)
@ -248,6 +282,12 @@ void RimFractureTemplateCollection::updateFilePathsFromProjectPath(const QString
//--------------------------------------------------------------------------------------------------
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;
this->firstAncestorOrThisOfType(proj);
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);
virtual ~RimFractureTemplateCollection(void);
std::vector<RimFractureTemplate*> fractureTemplates() const;
void addFractureTemplate(RimFractureTemplate* templ);
RiaEclipseUnitTools::UnitSystemType defaultUnitSystemType() const;
RimFractureTemplate* firstFractureOfUnit(RiaEclipseUnitTools::UnitSystem unitSet) const;
caf::PdmChildArrayField<RimFractureTemplate*> fractureDefinitions;
caf::PdmField< RiaEclipseUnitTools::UnitSystemType > defaultUnitsForFracTemplates;
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;
@ -52,6 +53,13 @@ public:
void updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath);
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)
{
uiOrdering.add(&m_name);
uiOrdering.add(&m_id);
caf::PdmUiGroup* fileGroup = uiOrdering.addNewGroup("Input");
fileGroup->add(&m_stimPlanFileName);

View File

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

View File

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