mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1440 Split fracture coloring from geometry generation
This commit is contained in:
@@ -66,7 +66,7 @@ RivWellFracturePartMgr::~RivWellFracturePartMgr()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RivWellFracturePartMgr::updatePartGeometry(const caf::DisplayCoordTransform* displayCoordTransform)
|
void RivWellFracturePartMgr::generateSurfacePart(const caf::DisplayCoordTransform* displayCoordTransform)
|
||||||
{
|
{
|
||||||
if (m_part.notNull()) return;
|
if (m_part.notNull()) return;
|
||||||
if (!displayCoordTransform) return;
|
if (!displayCoordTransform) return;
|
||||||
@@ -91,16 +91,27 @@ void RivWellFracturePartMgr::updatePartGeometry(const caf::DisplayCoordTransform
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cvf::ref<cvf::DrawableGeo> geo = createGeo(triangleIndices, displayCoords);
|
cvf::ref<cvf::DrawableGeo> geo = buildDrawableGeoFromTriangles(triangleIndices, displayCoords);
|
||||||
CVF_ASSERT(geo.notNull());
|
CVF_ASSERT(geo.notNull());
|
||||||
|
|
||||||
m_part = new cvf::Part;
|
m_part = new cvf::Part(0, "FractureSurfacePart");
|
||||||
m_part->setDrawable(geo.p());
|
m_part->setDrawable(geo.p());
|
||||||
|
m_part->setSourceInfo(new RivObjectSourceInfo(m_rimFracture));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RivWellFracturePartMgr::applyFractureUniformColor()
|
||||||
|
{
|
||||||
|
if ( m_part.notNull() )
|
||||||
|
{
|
||||||
cvf::Color4f fractureColor = cvf::Color4f(cvf::Color3f(cvf::Color3::BROWN));
|
cvf::Color4f fractureColor = cvf::Color4f(cvf::Color3f(cvf::Color3::BROWN));
|
||||||
|
|
||||||
RimEclipseView* activeView = dynamic_cast<RimEclipseView*>(RiaApplication::instance()->activeReservoirView());
|
RimEclipseView* activeView = dynamic_cast<RimEclipseView*>(RiaApplication::instance()->activeReservoirView());
|
||||||
if (activeView)
|
if ( activeView )
|
||||||
{
|
{
|
||||||
fractureColor = cvf::Color4f(activeView->stimPlanColors->defaultColor());
|
fractureColor = cvf::Color4f(activeView->stimPlanColors->defaultColor());
|
||||||
}
|
}
|
||||||
@@ -108,18 +119,15 @@ void RivWellFracturePartMgr::updatePartGeometry(const caf::DisplayCoordTransform
|
|||||||
caf::SurfaceEffectGenerator surfaceGen(fractureColor, caf::PO_1);
|
caf::SurfaceEffectGenerator surfaceGen(fractureColor, caf::PO_1);
|
||||||
cvf::ref<cvf::Effect> eff = surfaceGen.generateCachedEffect();
|
cvf::ref<cvf::Effect> eff = surfaceGen.generateCachedEffect();
|
||||||
m_part->setEffect(eff.p());
|
m_part->setEffect(eff.p());
|
||||||
|
|
||||||
m_part->setSourceInfo(new RivObjectSourceInfo(m_rimFracture));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RivWellFracturePartMgr::updatePartGeometryTexture(const caf::DisplayCoordTransform* displayCoordTransform)
|
void RivWellFracturePartMgr::applyResultTextureColor()
|
||||||
{
|
{
|
||||||
if (m_part.notNull()) return;
|
if (m_part.isNull()) return;
|
||||||
if (!displayCoordTransform) return;
|
|
||||||
|
|
||||||
if (m_rimFracture)
|
if (m_rimFracture)
|
||||||
{
|
{
|
||||||
@@ -140,44 +148,18 @@ void RivWellFracturePartMgr::updatePartGeometryTexture(const caf::DisplayCoordTr
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<cvf::Vec3f> nodeCoords;
|
|
||||||
std::vector<cvf::uint> triangleIndices;
|
|
||||||
|
|
||||||
m_rimFracture->triangleGeometry(&triangleIndices, &nodeCoords);
|
|
||||||
|
|
||||||
std::vector<cvf::Vec3f> displayCoords;
|
|
||||||
|
|
||||||
for (size_t i = 0; i < nodeCoords.size(); i++)
|
|
||||||
{
|
|
||||||
cvf::Vec3d nodeCoordsDouble = static_cast<cvf::Vec3d>(nodeCoords[i]);
|
|
||||||
cvf::Vec3d displayCoordsDouble = displayCoordTransform->transformToDisplayCoord(nodeCoordsDouble);
|
|
||||||
displayCoords.push_back(static_cast<cvf::Vec3f>(displayCoordsDouble));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (triangleIndices.size() == 0 || displayCoords.size() == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
cvf::ref<cvf::DrawableGeo> geo = createGeo(triangleIndices, displayCoords);
|
|
||||||
CVF_ASSERT(geo.notNull());
|
|
||||||
|
|
||||||
m_part = new cvf::Part;
|
|
||||||
m_part->setDrawable(geo.p());
|
|
||||||
|
|
||||||
generateFractureOutlinePolygonPart(displayCoordTransform);
|
|
||||||
generateStimPlanMeshPart(displayCoordTransform);
|
|
||||||
|
|
||||||
float opacityLevel = activeView->stimPlanColors->opacityLevel();
|
float opacityLevel = activeView->stimPlanColors->opacityLevel();
|
||||||
if (legendConfig)
|
if (legendConfig)
|
||||||
{
|
{
|
||||||
cvf::ScalarMapper* scalarMapper = legendConfig->scalarMapper();
|
cvf::ScalarMapper* scalarMapper = legendConfig->scalarMapper();
|
||||||
|
cvf::DrawableGeo* geo = dynamic_cast<cvf::DrawableGeo*> (m_part->drawable());
|
||||||
cvf::ref<cvf::Vec2fArray> textureCoords = new cvf::Vec2fArray;
|
cvf::ref<cvf::Vec2fArray> textureCoords = new cvf::Vec2fArray;
|
||||||
textureCoords->resize(nodeCoords.size());
|
textureCoords->resize(geo->vertexCount());
|
||||||
|
|
||||||
int timeStepIndex = m_rimFracture->stimPlanTimeIndexToPlot;
|
int timeStepIndex = m_rimFracture->stimPlanTimeIndexToPlot;
|
||||||
std::vector<std::vector<double> > dataToPlot = stimPlanFracTemplate->resultValues(activeView->stimPlanColors->resultName(), activeView->stimPlanColors->unit(), timeStepIndex);
|
std::vector<std::vector<double> > dataToPlot = stimPlanFracTemplate->resultValues(activeView->stimPlanColors->resultName(),
|
||||||
|
activeView->stimPlanColors->unit(),
|
||||||
|
timeStepIndex);
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (std::vector<double> depthData : dataToPlot)
|
for (std::vector<double> depthData : dataToPlot)
|
||||||
@@ -213,18 +195,12 @@ void RivWellFracturePartMgr::updatePartGeometryTexture(const caf::DisplayCoordTr
|
|||||||
cvf::ref<cvf::Effect> eff = effGen.generateCachedEffect();
|
cvf::ref<cvf::Effect> eff = effGen.generateCachedEffect();
|
||||||
|
|
||||||
m_part->setEffect(eff.p());
|
m_part->setEffect(eff.p());
|
||||||
|
m_part->setPriority(RivPartPriority::PartType::Transparent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cvf::Color4f fractureColor = cvf::Color4f(activeView->stimPlanColors->defaultColor(), 1.0);
|
applyFractureUniformColor();
|
||||||
|
|
||||||
caf::SurfaceEffectGenerator surfaceGen(fractureColor, caf::PO_1);
|
|
||||||
cvf::ref<cvf::Effect> eff = surfaceGen.generateCachedEffect();
|
|
||||||
m_part->setEffect(eff.p());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_part->setPriority(RivPartPriority::PartType::Transparent);
|
|
||||||
m_part->setSourceInfo(new RivObjectSourceInfo(m_rimFracture));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,7 +215,7 @@ void RivWellFracturePartMgr::generateFractureOutlinePolygonPart(const caf::Displ
|
|||||||
|
|
||||||
if (polygonGeo.notNull())
|
if (polygonGeo.notNull())
|
||||||
{
|
{
|
||||||
m_polygonPart = new cvf::Part;
|
m_polygonPart = new cvf::Part(0, "FractureOutline");
|
||||||
m_polygonPart->setDrawable(polygonGeo.p());
|
m_polygonPart->setDrawable(polygonGeo.p());
|
||||||
|
|
||||||
m_polygonPart->updateBoundingBox();
|
m_polygonPart->updateBoundingBox();
|
||||||
@@ -268,7 +244,7 @@ void RivWellFracturePartMgr::generateStimPlanMeshPart(const caf::DisplayCoordTra
|
|||||||
cvf::ref<cvf::DrawableGeo> stimPlanMeshGeo = createStimPlanMeshDrawable(stimPlanFracTemplate, displayCoordTransform);
|
cvf::ref<cvf::DrawableGeo> stimPlanMeshGeo = createStimPlanMeshDrawable(stimPlanFracTemplate, displayCoordTransform);
|
||||||
if (stimPlanMeshGeo.notNull())
|
if (stimPlanMeshGeo.notNull())
|
||||||
{
|
{
|
||||||
m_stimPlanMeshPart = new cvf::Part;
|
m_stimPlanMeshPart = new cvf::Part(0, "StimPlanMesh");
|
||||||
m_stimPlanMeshPart->setDrawable(stimPlanMeshGeo.p());
|
m_stimPlanMeshPart->setDrawable(stimPlanMeshGeo.p());
|
||||||
|
|
||||||
m_stimPlanMeshPart->updateBoundingBox();
|
m_stimPlanMeshPart->updateBoundingBox();
|
||||||
@@ -398,7 +374,9 @@ cvf::ref<cvf::DrawableGeo> RivWellFracturePartMgr::createPolygonDrawable(const c
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
std::vector<cvf::Vec3f> RivWellFracturePartMgr::transfromToFractureDisplayCoords(std::vector<cvf::Vec3f> coordinatesVector, cvf::Mat4f m, const caf::DisplayCoordTransform* displayCoordTransform)
|
std::vector<cvf::Vec3f> RivWellFracturePartMgr::transfromToFractureDisplayCoords(std::vector<cvf::Vec3f> coordinatesVector,
|
||||||
|
cvf::Mat4f m,
|
||||||
|
const caf::DisplayCoordTransform* displayCoordTransform)
|
||||||
{
|
{
|
||||||
std::vector<cvf::Vec3f> polygonInDisplayCoords;
|
std::vector<cvf::Vec3f> polygonInDisplayCoords;
|
||||||
for (cvf::Vec3f v : coordinatesVector)
|
for (cvf::Vec3f v : coordinatesVector)
|
||||||
@@ -438,23 +416,28 @@ void RivWellFracturePartMgr::appendGeometryPartsToModel(cvf::ModelBasicList* mod
|
|||||||
|
|
||||||
if (!m_rimFracture->isChecked()) return;
|
if (!m_rimFracture->isChecked()) return;
|
||||||
|
|
||||||
|
RimStimPlanFractureTemplate* stimPlanFracTemplate = dynamic_cast<RimStimPlanFractureTemplate*>(m_rimFracture->fractureTemplate());
|
||||||
|
|
||||||
if (m_part.isNull())
|
if (m_part.isNull())
|
||||||
{
|
{
|
||||||
if (m_rimFracture->fractureTemplate())
|
if (m_rimFracture->fractureTemplate())
|
||||||
{
|
{
|
||||||
if (dynamic_cast<RimStimPlanFractureTemplate*>(m_rimFracture->fractureTemplate()))
|
if (stimPlanFracTemplate)
|
||||||
{
|
{
|
||||||
updatePartGeometryTexture(displayCoordTransform);
|
generateSurfacePart(displayCoordTransform);
|
||||||
|
generateFractureOutlinePolygonPart(displayCoordTransform);
|
||||||
|
|
||||||
RimStimPlanFractureTemplate* stimPlanFracTemplate = dynamic_cast<RimStimPlanFractureTemplate*>(m_rimFracture->fractureTemplate());
|
applyResultTextureColor();
|
||||||
if (stimPlanFracTemplate->showStimPlanMesh() && m_stimPlanMeshPart.notNull())
|
|
||||||
|
if (stimPlanFracTemplate->showStimPlanMesh())
|
||||||
{
|
{
|
||||||
model->addPart(m_stimPlanMeshPart.p());
|
generateStimPlanMeshPart(displayCoordTransform);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else // Ellipse
|
||||||
{
|
{
|
||||||
updatePartGeometry(displayCoordTransform);
|
generateSurfacePart(displayCoordTransform);
|
||||||
|
applyFractureUniformColor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -464,7 +447,13 @@ void RivWellFracturePartMgr::appendGeometryPartsToModel(cvf::ModelBasicList* mod
|
|||||||
model->addPart(m_part.p());
|
model->addPart(m_part.p());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dynamic_cast<RimStimPlanFractureTemplate*>(m_rimFracture->fractureTemplate())
|
if (m_stimPlanMeshPart.notNull()
|
||||||
|
&& stimPlanFracTemplate->showStimPlanMesh())
|
||||||
|
{
|
||||||
|
model->addPart(m_stimPlanMeshPart.p());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stimPlanFracTemplate
|
||||||
&& m_rimFracture->showPolygonFractureOutline()
|
&& m_rimFracture->showPolygonFractureOutline()
|
||||||
&& m_polygonPart.notNull())
|
&& m_polygonPart.notNull())
|
||||||
{
|
{
|
||||||
@@ -485,7 +474,7 @@ void RivWellFracturePartMgr::clearGeometryCache()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
cvf::ref<cvf::DrawableGeo> RivWellFracturePartMgr::createGeo(const std::vector<cvf::uint>& triangleIndices, const std::vector<cvf::Vec3f>& nodeCoords)
|
cvf::ref<cvf::DrawableGeo> RivWellFracturePartMgr::buildDrawableGeoFromTriangles(const std::vector<cvf::uint>& triangleIndices, const std::vector<cvf::Vec3f>& nodeCoords)
|
||||||
{
|
{
|
||||||
CVF_ASSERT(triangleIndices.size() > 0);
|
CVF_ASSERT(triangleIndices.size() > 0);
|
||||||
CVF_ASSERT(nodeCoords.size() > 0);
|
CVF_ASSERT(nodeCoords.size() > 0);
|
||||||
|
|||||||
@@ -51,28 +51,43 @@ public:
|
|||||||
RivWellFracturePartMgr(RimFracture* well);
|
RivWellFracturePartMgr(RimFracture* well);
|
||||||
~RivWellFracturePartMgr();
|
~RivWellFracturePartMgr();
|
||||||
|
|
||||||
void appendGeometryPartsToModel(cvf::ModelBasicList* model, const caf::DisplayCoordTransform* displayCoordTransform);
|
void appendGeometryPartsToModel(cvf::ModelBasicList* model,
|
||||||
|
const caf::DisplayCoordTransform* displayCoordTransform);
|
||||||
void clearGeometryCache();
|
void clearGeometryCache();
|
||||||
|
|
||||||
static std::vector<double> mirrorDataAtSingleDepth(std::vector<double> depthData);
|
static std::vector<double> mirrorDataAtSingleDepth(std::vector<double> depthData);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updatePartGeometry(const caf::DisplayCoordTransform* displayCoordTransform);
|
void generateSurfacePart(const caf::DisplayCoordTransform* displayCoordTransform);
|
||||||
void updatePartGeometryTexture(const caf::DisplayCoordTransform* displayCoordTransform);
|
|
||||||
|
void applyFractureUniformColor();
|
||||||
|
|
||||||
|
void applyResultTextureColor();
|
||||||
|
|
||||||
void generateFractureOutlinePolygonPart(const caf::DisplayCoordTransform* displayCoordTransform);
|
void generateFractureOutlinePolygonPart(const caf::DisplayCoordTransform* displayCoordTransform);
|
||||||
void generateStimPlanMeshPart(const caf::DisplayCoordTransform* displayCoordTransform);
|
void generateStimPlanMeshPart(const caf::DisplayCoordTransform* displayCoordTransform);
|
||||||
|
|
||||||
cvf::ref<cvf::DrawableGeo> createPolygonDrawable(const caf::DisplayCoordTransform* displayCoordTransform);
|
cvf::ref<cvf::DrawableGeo> createPolygonDrawable(const caf::DisplayCoordTransform* displayCoordTransform);
|
||||||
cvf::ref<cvf::DrawableGeo> createStimPlanMeshDrawable(RimStimPlanFractureTemplate* stimPlanFracTemplate, const caf::DisplayCoordTransform* displayCoordTransform);
|
cvf::ref<cvf::DrawableGeo> createStimPlanMeshDrawable(RimStimPlanFractureTemplate* stimPlanFracTemplate,
|
||||||
|
const caf::DisplayCoordTransform* displayCoordTransform);
|
||||||
|
|
||||||
void getPolygonBB(float &polygonXmin, float &polygonXmax, float &polygonYmin, float &polygonYmax);
|
void getPolygonBB(float &polygonXmin, float &polygonXmax, float &polygonYmin, float &polygonYmax);
|
||||||
|
|
||||||
std::vector<cvf::Vec3f> transfromToFractureDisplayCoords(std::vector<cvf::Vec3f> polygon, cvf::Mat4f m, const caf::DisplayCoordTransform* displayCoordTransform);
|
std::vector<cvf::Vec3f> transfromToFractureDisplayCoords(std::vector<cvf::Vec3f> polygon,
|
||||||
bool stimPlanCellTouchesPolygon(const std::vector<cvf::Vec3f>& polygon, double xMin, double xMax, double yMin, double yMax, float polygonXmin, float polygonXmax, float polygonYmin, float polygonYmax);
|
cvf::Mat4f m,
|
||||||
|
const caf::DisplayCoordTransform* displayCoordTransform);
|
||||||
static cvf::ref<cvf::DrawableGeo> createGeo(const std::vector<cvf::uint>& triangleIndices, const std::vector<cvf::Vec3f>& nodeCoords);
|
bool stimPlanCellTouchesPolygon(const std::vector<cvf::Vec3f>& polygon,
|
||||||
|
double xMin,
|
||||||
|
double xMax,
|
||||||
|
double yMin,
|
||||||
|
double yMax,
|
||||||
|
float polygonXmin,
|
||||||
|
float polygonXmax,
|
||||||
|
float polygonYmin,
|
||||||
|
float polygonYmax);
|
||||||
|
|
||||||
|
static cvf::ref<cvf::DrawableGeo> buildDrawableGeoFromTriangles(const std::vector<cvf::uint>& triangleIndices,
|
||||||
|
const std::vector<cvf::Vec3f>& nodeCoords);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
caf::PdmPointer<RimFracture> m_rimFracture;
|
caf::PdmPointer<RimFracture> m_rimFracture;
|
||||||
|
|||||||
Reference in New Issue
Block a user