mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
3D Well Log Curves (#2674): Show what the value axis direction is
This commit is contained in:
@@ -25,12 +25,14 @@
|
||||
#include "RigWellPathGeometryTools.h"
|
||||
|
||||
#include "cafDisplayCoordTransform.h"
|
||||
|
||||
#include "cvfObject.h"
|
||||
#include "cvfDrawableGeo.h"
|
||||
#include "cvfPrimitiveSetIndexedUInt.h"
|
||||
|
||||
#include "cvfBoundingBox.h"
|
||||
#include "cvfGeometryBuilderTriangles.h"
|
||||
#include "cvfArrowGenerator.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <map>
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -195,34 +197,38 @@ Riv3dWellLogGridGeometryGenerator::createGrid(const caf::DisplayCoordTransform*
|
||||
}
|
||||
|
||||
std::vector<cvf::Vec3f> vertices;
|
||||
std::vector<cvf::Vec3f> arrowVectors;
|
||||
vertices.reserve(interpolatedGridPoints.size());
|
||||
arrowVectors.reserve(interpolatedGridPoints.size());
|
||||
|
||||
std::vector<cvf::uint> indices;
|
||||
indices.reserve(interpolatedGridPoints.size());
|
||||
cvf::uint indexCounter = 0;
|
||||
// Normal lines. Start from one to avoid drawing at surface edge.
|
||||
double shaftRelativeRadius = 0.0125f;
|
||||
double arrowHeadRelativeRadius = shaftRelativeRadius * 3;
|
||||
double arrowHeadRelativeLength = arrowHeadRelativeRadius * 3;
|
||||
double totalArrowScaling = 1.0 / (1.0 - arrowHeadRelativeLength);
|
||||
// Normal lines. Start from one to avoid drawing at surface edge.
|
||||
for (size_t i = 1; i < interpolatedGridCurveNormals.size(); i++)
|
||||
{
|
||||
vertices.push_back(cvf::Vec3f(interpolatedGridPoints[i] + interpolatedGridCurveNormals[i] * planeOffsetFromWellPathCenter));
|
||||
|
||||
vertices.push_back(cvf::Vec3f(interpolatedGridPoints[i] + interpolatedGridCurveNormals[i] * (planeOffsetFromWellPathCenter + planeWidth)));
|
||||
|
||||
indices.push_back(indexCounter++);
|
||||
indices.push_back(indexCounter++);
|
||||
arrowVectors.push_back(cvf::Vec3f(interpolatedGridCurveNormals[i] * planeWidth * totalArrowScaling));
|
||||
}
|
||||
|
||||
cvf::ref<cvf::PrimitiveSetIndexedUInt> indexedUInt = new cvf::PrimitiveSetIndexedUInt(cvf::PrimitiveType::PT_LINES);
|
||||
cvf::ref<cvf::UIntArray> indexArray = new cvf::UIntArray(indices);
|
||||
|
||||
cvf::ref<cvf::DrawableGeo> normalLinesDrawable = new cvf::DrawableGeo();
|
||||
|
||||
indexedUInt->setIndices(indexArray.p());
|
||||
normalLinesDrawable->addPrimitiveSet(indexedUInt.p());
|
||||
m_curveNormalVectors = new cvf::DrawableVectors();
|
||||
|
||||
cvf::ref<cvf::Vec3fArray> vertexArray = new cvf::Vec3fArray(vertices);
|
||||
normalLinesDrawable->setVertexArray(vertexArray.p());
|
||||
cvf::ref<cvf::Vec3fArray> vectorArray = new cvf::Vec3fArray(arrowVectors);
|
||||
|
||||
m_curveNormalLines = normalLinesDrawable;
|
||||
// Create the arrow glyph for the vector drawer
|
||||
cvf::GeometryBuilderTriangles arrowBuilder;
|
||||
cvf::ArrowGenerator gen;
|
||||
gen.setShaftRelativeRadius(shaftRelativeRadius);
|
||||
gen.setHeadRelativeRadius(arrowHeadRelativeRadius);
|
||||
gen.setHeadRelativeLength(arrowHeadRelativeLength);
|
||||
gen.setNumSlices(4);
|
||||
gen.generate(&arrowBuilder);
|
||||
|
||||
m_curveNormalVectors->setGlyph(arrowBuilder.trianglesUShort().p(), arrowBuilder.vertices().p());
|
||||
m_curveNormalVectors->setVectors(vertexArray.p(), vectorArray.p());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -237,9 +243,9 @@ cvf::ref<cvf::DrawableGeo> Riv3dWellLogGridGeometryGenerator::border()
|
||||
return m_border;
|
||||
}
|
||||
|
||||
cvf::ref<cvf::DrawableGeo> Riv3dWellLogGridGeometryGenerator::curveNormalLines()
|
||||
cvf::ref<cvf::DrawableVectors> Riv3dWellLogGridGeometryGenerator::curveNormalVectors()
|
||||
{
|
||||
return m_curveNormalLines;
|
||||
return m_curveNormalVectors;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
#include "cvfBase.h"
|
||||
#include "cvfDrawableGeo.h"
|
||||
#include "cvfDrawableVectors.h"
|
||||
#include "cvfObject.h"
|
||||
|
||||
#include "cafPdmPointer.h"
|
||||
@@ -53,13 +54,13 @@ public:
|
||||
|
||||
cvf::ref<cvf::DrawableGeo> background();
|
||||
cvf::ref<cvf::DrawableGeo> border();
|
||||
cvf::ref<cvf::DrawableGeo> curveNormalLines();
|
||||
cvf::ref<cvf::DrawableVectors> curveNormalVectors();
|
||||
private:
|
||||
const RigWellPath* wellPathGeometry() const;
|
||||
|
||||
private:
|
||||
caf::PdmPointer<RimWellPath> m_wellPath;
|
||||
cvf::ref<cvf::DrawableGeo> m_background;
|
||||
cvf::ref<cvf::DrawableGeo> m_border;
|
||||
cvf::ref<cvf::DrawableGeo> m_curveNormalLines;
|
||||
caf::PdmPointer<RimWellPath> m_wellPath;
|
||||
cvf::ref<cvf::DrawableGeo> m_background;
|
||||
cvf::ref<cvf::DrawableGeo> m_border;
|
||||
cvf::ref<cvf::DrawableVectors> m_curveNormalVectors;
|
||||
};
|
||||
|
||||
@@ -18,8 +18,9 @@
|
||||
|
||||
#include "Riv3dWellLogPlanePartMgr.h"
|
||||
|
||||
#include "RiaColorTables.h"
|
||||
#include "RiaApplication.h"
|
||||
|
||||
#include "RiuViewer.h"
|
||||
#include "Rim3dView.h"
|
||||
#include "Rim3dWellLogCurveCollection.h"
|
||||
#include "RimCase.h"
|
||||
@@ -36,7 +37,9 @@
|
||||
#include "cvfColor3.h"
|
||||
#include "cvfDrawableGeo.h"
|
||||
#include "cvfModelBasicList.h"
|
||||
#include "cvfOpenGLResourceManager.h"
|
||||
#include "cvfPart.h"
|
||||
#include "cvfShaderProgram.h"
|
||||
|
||||
#include <utility>
|
||||
|
||||
@@ -225,9 +228,10 @@ void Riv3dWellLogPlanePartMgr::appendGridToModel(cvf::ModelBasicList*
|
||||
bool showGrid = curveCollection->isShowingGrid();
|
||||
bool showBackground = curveCollection->isShowingBackground();
|
||||
|
||||
cvf::Color3f gridColor(0.4f, 0.4f, 0.4f);
|
||||
caf::SurfaceEffectGenerator backgroundEffectGen(cvf::Color4f(1.0, 1.0, 1.0, 1.0), caf::PO_2);
|
||||
caf::MeshEffectGenerator gridBorderEffectGen(cvf::Color3f(0.4f, 0.4f, 0.4f));
|
||||
caf::MeshEffectGenerator curveNormalsEffectGen(cvf::Color3f(0.4f, 0.4f, 0.4f));
|
||||
caf::MeshEffectGenerator gridBorderEffectGen(gridColor);
|
||||
caf::VectorEffectGenerator curveNormalsEffectGen;
|
||||
backgroundEffectGen.enableLighting(false);
|
||||
|
||||
bool gridCreated = m_3dWellLogGridGeometryGenerator->createGrid(displayCoordTransform,
|
||||
@@ -241,7 +245,7 @@ void Riv3dWellLogPlanePartMgr::appendGridToModel(cvf::ModelBasicList*
|
||||
cvf::ref<cvf::Effect> backgroundEffect = backgroundEffectGen.generateCachedEffect();
|
||||
cvf::ref<cvf::Effect> borderEffect = gridBorderEffectGen.generateCachedEffect();
|
||||
cvf::ref<cvf::Effect> curveNormalsEffect = curveNormalsEffectGen.generateCachedEffect();
|
||||
|
||||
|
||||
cvf::ref<cvf::DrawableGeo> background = m_3dWellLogGridGeometryGenerator->background();
|
||||
if (showBackground && background.notNull())
|
||||
{
|
||||
@@ -263,9 +267,15 @@ void Riv3dWellLogPlanePartMgr::appendGridToModel(cvf::ModelBasicList*
|
||||
}
|
||||
}
|
||||
|
||||
cvf::ref<cvf::DrawableGeo> normals = m_3dWellLogGridGeometryGenerator->curveNormalLines();
|
||||
cvf::ref<cvf::DrawableVectors> normals = m_3dWellLogGridGeometryGenerator->curveNormalVectors();
|
||||
if (normals.notNull())
|
||||
{
|
||||
normals->setSingleColor(gridColor);
|
||||
if (RiaApplication::instance()->useShaders())
|
||||
{
|
||||
normals->setUniformNames("u_transformationMatrix", "u_color");
|
||||
}
|
||||
|
||||
cvf::ref<cvf::Part> part = createPart(normals.p(), curveNormalsEffect.p());
|
||||
if (part.notNull())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user