#3573 Draw axis lines across the whole view for 2d Contour Maps.

This commit is contained in:
Gaute Lindkvist 2018-10-31 12:13:04 +01:00
parent e9de865c1f
commit 78d81d2630
8 changed files with 164 additions and 67 deletions

View File

@ -62,14 +62,15 @@ using namespace cvf;
/// Constructor /// Constructor
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RivWindowEdgeAxesOverlayItem::RivWindowEdgeAxesOverlayItem(Font* font) RivWindowEdgeAxesOverlayItem::RivWindowEdgeAxesOverlayItem(Font* font)
: m_windowSize(600, 600), : m_windowSize(600, 600)
m_textColor(Color3::BLACK), , m_textColor(Color3::BLACK)
m_lineColor(Color3::BLACK), , m_lineColor(Color3::BLACK)
m_frameColor(Color3::WHITE), , m_frameColor(Color3::WHITE)
m_lineWidth(1), , m_lineWidth(1)
m_font(font), , m_font(font)
m_isSwitchingYAxisValueSign(true), , m_isSwitchingYAxisValueSign(true)
m_domainAxes(XZ_AXES) , m_showAxisLines(false)
, m_domainAxes(XZ_AXES)
{ {
CVF_ASSERT(font); CVF_ASSERT(font);
CVF_ASSERT(!font->isEmpty()); CVF_ASSERT(!font->isEmpty());
@ -423,7 +424,8 @@ void RivWindowEdgeAxesOverlayItem::renderSoftwareFrameAndTickLines(OpenGLContext
// Render Line around // Render Line around
{ {
glColor3fv(m_lineColor.ptr()); cvf::Color4f lineColorWithAlpha(m_lineColor, m_showAxisLines ? 0.25f : 1.0f);
glColor4fv(lineColorWithAlpha.ptr());
glBegin(GL_LINES); glBegin(GL_LINES);
// Frame lines // Frame lines
glVertex3fv(vertexArray[7].ptr()); glVertex3fv(vertexArray[7].ptr());
@ -438,47 +440,79 @@ void RivWindowEdgeAxesOverlayItem::renderSoftwareFrameAndTickLines(OpenGLContext
// X - axis Tick lines // X - axis Tick lines
for (double txpos : m_windowTickXValues) for (double txpos : m_windowTickXValues)
{ {
Vec3f p1(Vec3f::ZERO); if (m_showAxisLines)
Vec3f p2(Vec3f::ZERO); {
Vec3f p1(Vec3f::ZERO);
Vec3f p2(Vec3f::ZERO);
p1[0] = (float)txpos; p1[0] = (float)txpos;
p1[1] = m_frameBorderHeight; p1[1] = m_frameBorderHeight - m_tickLineLength;
p2[0] = (float)txpos; p2[0] = (float)txpos;
p2[1] = m_frameBorderHeight - m_tickLineLength; p2[1] = m_windowSize.y() - m_frameBorderHeight + m_tickLineLength;
glVertex3fv(p1.ptr()); glVertex3fv(p1.ptr());
glVertex3fv(p2.ptr()); glVertex3fv(p2.ptr());
}
else
{
Vec3f p1(Vec3f::ZERO);
Vec3f p2(Vec3f::ZERO);
p1[0] = (float)txpos; p1[0] = (float)txpos;
p1[1] = m_windowSize.y() - m_frameBorderHeight; p1[1] = m_frameBorderHeight;
p2[0] = (float)txpos; p2[0] = (float)txpos;
p2[1] = m_windowSize.y() - m_frameBorderHeight + m_tickLineLength; p2[1] = m_frameBorderHeight - m_tickLineLength;
glVertex3fv(p1.ptr()); glVertex3fv(p1.ptr());
glVertex3fv(p2.ptr()); glVertex3fv(p2.ptr());
p1[0] = (float)txpos;
p1[1] = m_windowSize.y() - m_frameBorderHeight;
p2[0] = (float)txpos;
p2[1] = m_windowSize.y() - m_frameBorderHeight + m_tickLineLength;
glVertex3fv(p1.ptr());
glVertex3fv(p2.ptr());
}
} }
// Left Y - axis Tick lines // Left Y - axis Tick lines
for (double typos : m_windowTickYValues) for (double typos : m_windowTickYValues)
{ {
Vec3f p1(Vec3f::ZERO); if (m_showAxisLines)
Vec3f p2(Vec3f::ZERO); {
Vec3f p1(Vec3f::ZERO);
Vec3f p2(Vec3f::ZERO);
p1[0] = m_frameBorderWidth; p1[0] = m_frameBorderWidth - m_tickLineLength;
p1[1] = (float)typos; p1[1] = (float)typos;
p2[0] = m_frameBorderWidth - m_tickLineLength; p2[0] = m_windowSize.x() - m_frameBorderWidth + m_tickLineLength;
p2[1] = (float)typos; p2[1] = (float)typos;
glVertex3fv(p1.ptr()); glVertex3fv(p1.ptr());
glVertex3fv(p2.ptr()); glVertex3fv(p2.ptr());
}
else
{
Vec3f p1(Vec3f::ZERO);
Vec3f p2(Vec3f::ZERO);
p1[0] = m_windowSize.x() - m_frameBorderWidth; p1[0] = m_frameBorderWidth;
p1[1] = (float)typos; p1[1] = (float)typos;
p2[0] = m_windowSize.x() - m_frameBorderWidth + m_tickLineLength; p2[0] = m_frameBorderWidth - m_tickLineLength;
p2[1] = (float)typos; p2[1] = (float)typos;
glVertex3fv(p1.ptr()); glVertex3fv(p1.ptr());
glVertex3fv(p2.ptr()); glVertex3fv(p2.ptr());
p1[0] = m_windowSize.x() - m_frameBorderWidth;
p1[1] = (float)typos;
p2[0] = m_windowSize.x() - m_frameBorderWidth + m_tickLineLength;
p2[1] = (float)typos;
glVertex3fv(p1.ptr());
glVertex3fv(p2.ptr());
}
} }
glEnd(); glEnd();
@ -547,7 +581,7 @@ void RivWindowEdgeAxesOverlayItem::renderShaderFrameAndTickLines(OpenGLContext*
// Draw frame border lines // Draw frame border lines
UniformFloat uniformColor("u_color", Color4f(m_lineColor)); UniformFloat uniformColor("u_color", Color4f(m_lineColor, m_showAxisLines ? 0.25f : 1.0f));
shaderProgram->applyUniform(oglContext, uniformColor); shaderProgram->applyUniform(oglContext, uniformColor);
static const ushort frameLineIndices[] = { 7, 4, static const ushort frameLineIndices[] = { 7, 4,
@ -565,38 +599,62 @@ void RivWindowEdgeAxesOverlayItem::renderShaderFrameAndTickLines(OpenGLContext*
for (double txpos : m_windowTickXValues) for (double txpos : m_windowTickXValues)
{ {
vertexArray[0][0] = (float)txpos; if (m_showAxisLines)
vertexArray[0][1] = m_frameBorderHeight; {
vertexArray[1][0] = (float)txpos; vertexArray[0][0] = (float)txpos;
vertexArray[1][1] = m_frameBorderHeight - m_tickLineLength; vertexArray[0][1] = m_frameBorderHeight - m_tickLineLength;
vertexArray[1][0] = (float)txpos;
vertexArray[1][1] = m_windowSize.y() - m_frameBorderHeight + m_tickLineLength;
glDrawRangeElements(GL_LINES, 0, 1, 2, GL_UNSIGNED_SHORT, tickLineIndices); glDrawRangeElements(GL_LINES, 0, 1, 2, GL_UNSIGNED_SHORT, tickLineIndices);
}
else
{
vertexArray[0][0] = (float)txpos;
vertexArray[0][1] = m_frameBorderHeight;
vertexArray[1][0] = (float)txpos;
vertexArray[1][1] = m_frameBorderHeight - m_tickLineLength;
vertexArray[0][0] = (float)txpos; glDrawRangeElements(GL_LINES, 0, 1, 2, GL_UNSIGNED_SHORT, tickLineIndices);
vertexArray[0][1] = m_windowSize.y() - m_frameBorderHeight;
vertexArray[1][0] = (float)txpos;
vertexArray[1][1] = m_windowSize.y() - m_frameBorderHeight + m_tickLineLength;
glDrawRangeElements(GL_LINES, 0, 1, 2, GL_UNSIGNED_SHORT, tickLineIndices); vertexArray[0][0] = (float)txpos;
vertexArray[0][1] = m_windowSize.y() - m_frameBorderHeight;
vertexArray[1][0] = (float)txpos;
vertexArray[1][1] = m_windowSize.y() - m_frameBorderHeight + m_tickLineLength;
glDrawRangeElements(GL_LINES, 0, 1, 2, GL_UNSIGNED_SHORT, tickLineIndices);
}
} }
// Left Y - axis Tick lines // Left Y - axis Tick lines
for (double typos : m_windowTickYValues) for (double typos : m_windowTickYValues)
{ {
vertexArray[0][0] = m_frameBorderWidth; if (m_showAxisLines)
vertexArray[0][1] = (float)typos; {
vertexArray[1][0] = m_frameBorderWidth - m_tickLineLength; vertexArray[0][0] = m_frameBorderWidth - m_tickLineLength;
vertexArray[1][1] = (float)typos; vertexArray[0][1] = (float)typos;
vertexArray[1][0] = m_windowSize.x() - m_frameBorderWidth + m_tickLineLength;
vertexArray[1][1] = (float)typos;
glDrawRangeElements(GL_LINES, 0, 1, 2, GL_UNSIGNED_SHORT, tickLineIndices);
glDrawRangeElements(GL_LINES, 0, 1, 2, GL_UNSIGNED_SHORT, tickLineIndices); }
else
{
vertexArray[0][0] = m_frameBorderWidth;
vertexArray[0][1] = (float)typos;
vertexArray[1][0] = m_frameBorderWidth - m_tickLineLength;
vertexArray[1][1] = (float)typos;
vertexArray[0][0] = m_windowSize.x() - m_frameBorderWidth; glDrawRangeElements(GL_LINES, 0, 1, 2, GL_UNSIGNED_SHORT, tickLineIndices);
vertexArray[0][1] = (float)typos;
vertexArray[1][0] = m_windowSize.x() - m_frameBorderWidth + m_tickLineLength;
vertexArray[1][1] = (float)typos;
glDrawRangeElements(GL_LINES, 0, 1, 2, GL_UNSIGNED_SHORT, tickLineIndices); vertexArray[0][0] = m_windowSize.x() - m_frameBorderWidth;
vertexArray[0][1] = (float)typos;
vertexArray[1][0] = m_windowSize.x() - m_frameBorderWidth + m_tickLineLength;
vertexArray[1][1] = (float)typos;
glDrawRangeElements(GL_LINES, 0, 1, 2, GL_UNSIGNED_SHORT, tickLineIndices);
}
} }
glDisableVertexAttribArray(ShaderProgram::VERTEX); glDisableVertexAttribArray(ShaderProgram::VERTEX);
@ -649,3 +707,11 @@ void RivWindowEdgeAxesOverlayItem::setIsSwitchingYAxisSign(bool switchSign)
m_isSwitchingYAxisValueSign = switchSign; m_isSwitchingYAxisValueSign = switchSign;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivWindowEdgeAxesOverlayItem::setShowAxisLines(bool showAxisLines)
{
m_showAxisLines = showAxisLines;
}

View File

@ -105,6 +105,7 @@ public:
int frameBorderWidth() { return static_cast<int>( m_frameBorderWidth); } int frameBorderWidth() { return static_cast<int>( m_frameBorderWidth); }
int frameBorderHeight() { return static_cast<int>( m_frameBorderHeight); } int frameBorderHeight() { return static_cast<int>( m_frameBorderHeight); }
void setShowAxisLines(bool showAxisLines);
protected: protected:
Vec2ui sizeHint() override; Vec2ui sizeHint() override;
void render(OpenGLContext* oglContext, const Vec2i& position, const Vec2ui& size) override; void render(OpenGLContext* oglContext, const Vec2i& position, const Vec2ui& size) override;
@ -135,6 +136,7 @@ private:
float m_tickLineLength; float m_tickLineLength;
float m_pixelSpacing; float m_pixelSpacing;
bool m_isSwitchingYAxisValueSign; bool m_isSwitchingYAxisValueSign;
bool m_showAxisLines;
DomainAxes m_domainAxes; DomainAxes m_domainAxes;
std::vector<double> m_domainCoordsXValues; std::vector<double> m_domainCoordsXValues;

View File

@ -51,6 +51,8 @@ Rim2dEclipseView::Rim2dEclipseView()
CAF_PDM_InitFieldNoDefault(&m_2dGridProjection, "Grid2dProjection", "2d Grid Projection", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_2dGridProjection, "Grid2dProjection", "2d Grid Projection", "", "", "");
m_2dGridProjection = new Rim2dGridProjection(); m_2dGridProjection = new Rim2dGridProjection();
CAF_PDM_InitField(&m_showAxisLines, "ShowAxisLines", true, "Show Axis Lines", "", "", "");
m_overlayInfoConfig->setIsActive(false); m_overlayInfoConfig->setIsActive(false);
m_gridCollection->setActive(false); // This is also not added to the tree view, so cannot be enabled. m_gridCollection->setActive(false); // This is also not added to the tree view, so cannot be enabled.
wellCollection()->isActive = false; wellCollection()->isActive = false;
@ -76,6 +78,7 @@ void Rim2dEclipseView::initAfterRead()
{ {
m_gridCollection->setActive(false); // This is also not added to the tree view, so cannot be enabled. m_gridCollection->setActive(false); // This is also not added to the tree view, so cannot be enabled.
disablePerspectiveProjectionField(); disablePerspectiveProjectionField();
setShowGridBox(false);
meshMode.setValue(NO_MESH); meshMode.setValue(NO_MESH);
surfaceMode.setValue(FAULTS); surfaceMode.setValue(FAULTS);
} }
@ -101,7 +104,7 @@ void Rim2dEclipseView::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering
caf::PdmUiGroup* viewGroup = uiOrdering.addNewGroup("Viewer"); caf::PdmUiGroup* viewGroup = uiOrdering.addNewGroup("Viewer");
viewGroup->add(this->userDescriptionField()); viewGroup->add(this->userDescriptionField());
viewGroup->add(this->backgroundColorField()); viewGroup->add(this->backgroundColorField());
viewGroup->add(this->showGridBoxField()); viewGroup->add(&m_showAxisLines);
uiOrdering.skipRemainingFields(true); uiOrdering.skipRemainingFields(true);
} }
@ -177,7 +180,7 @@ void Rim2dEclipseView::updateLegends()
void Rim2dEclipseView::updateViewWidgetAfterCreation() void Rim2dEclipseView::updateViewWidgetAfterCreation()
{ {
m_viewer->showAxisCross(false); m_viewer->showAxisCross(false);
m_viewer->showEdgeTickMarksXY(true); m_viewer->showEdgeTickMarksXY(true, m_showAxisLines());
m_viewer->enableNavigationRotation(false); m_viewer->enableNavigationRotation(false);
Rim3dView::updateViewWidgetAfterCreation(); Rim3dView::updateViewWidgetAfterCreation();
@ -203,3 +206,19 @@ void Rim2dEclipseView::onLoadDataAndUpdate()
m_viewer->setView(cvf::Vec3d(0, 0, -1), cvf::Vec3d(0, 1, 0)); m_viewer->setView(cvf::Vec3d(0, 0, -1), cvf::Vec3d(0, 1, 0));
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim2dEclipseView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
if (changedField == &m_showAxisLines)
{
m_viewer->showEdgeTickMarksXY(true, m_showAxisLines());
scheduleCreateDisplayModelAndRedraw();
}
else
{
RimEclipseView::fieldChangedByUi(changedField, oldValue, newValue);
}
}

View File

@ -39,10 +39,12 @@ protected:
void updateViewWidgetAfterCreation() override; void updateViewWidgetAfterCreation() override;
void updateViewFollowingRangeFilterUpdates() override; void updateViewFollowingRangeFilterUpdates() override;
void onLoadDataAndUpdate() override; void onLoadDataAndUpdate() override;
void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
private: private:
cvf::ref<Riv2dGridProjectionPartMgr> m_grid2dProjectionPartMgr; cvf::ref<Riv2dGridProjectionPartMgr> m_grid2dProjectionPartMgr;
caf::PdmChildField<Rim2dGridProjection*> m_2dGridProjection; caf::PdmChildField<Rim2dGridProjection*> m_2dGridProjection;
caf::PdmField<bool> m_showAxisLines;
}; };

View File

@ -763,6 +763,14 @@ void Rim3dView::setBackgroundColor(const cvf::Color3f& newBackgroundColor)
m_backgroundColor = newBackgroundColor; m_backgroundColor = newBackgroundColor;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView::setShowGridBox(bool showGridBox)
{
m_showGridBox = showGridBox;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -107,6 +107,7 @@ public:
void setFaultMeshSurfDrawstyle(); void setFaultMeshSurfDrawstyle();
void setSurfaceDrawstyle(); void setSurfaceDrawstyle();
void setBackgroundColor(const cvf::Color3f& newBackgroundColor); void setBackgroundColor(const cvf::Color3f& newBackgroundColor);
void setShowGridBox(bool showGridBox);
void disableLighting(bool disable); void disableLighting(bool disable);
bool isLightingDisabled() const; bool isLightingDisabled() const;
@ -206,7 +207,6 @@ private:
protected: protected:
caf::PdmFieldHandle* userDescriptionField() override { return &m_name; } caf::PdmFieldHandle* userDescriptionField() override { return &m_name; }
caf::PdmFieldHandle* backgroundColorField() { return &m_backgroundColor; } caf::PdmFieldHandle* backgroundColorField() { return &m_backgroundColor; }
caf::PdmFieldHandle* showGridBoxField() { return &m_showGridBox; }
void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;

View File

@ -826,7 +826,7 @@ void RiuViewer::updateGridBoxData(double scaleZ,
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiuViewer::showEdgeTickMarksXY(bool enable) void RiuViewer::showEdgeTickMarksXY(bool enable, bool showAxisLines)
{ {
m_mainRendering->removeOverlayItem(m_windowEdgeAxisOverlay.p()); m_mainRendering->removeOverlayItem(m_windowEdgeAxisOverlay.p());
@ -834,16 +834,16 @@ void RiuViewer::showEdgeTickMarksXY(bool enable)
{ {
m_windowEdgeAxisOverlay->setDomainAxes(RivWindowEdgeAxesOverlayItem::XY_AXES); m_windowEdgeAxisOverlay->setDomainAxes(RivWindowEdgeAxesOverlayItem::XY_AXES);
m_windowEdgeAxisOverlay->setIsSwitchingYAxisSign(false); m_windowEdgeAxisOverlay->setIsSwitchingYAxisSign(false);
m_windowEdgeAxisOverlay->setShowAxisLines(showAxisLines);
m_mainRendering->addOverlayItem(m_windowEdgeAxisOverlay.p()); m_mainRendering->addOverlayItem(m_windowEdgeAxisOverlay.p());
} }
m_showWindowEdgeAxes = enable; m_showWindowEdgeAxes = enable;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiuViewer::showEdgeTickMarksXZ(bool enable) void RiuViewer::showEdgeTickMarksXZ(bool enable, bool showAxisLines)
{ {
m_mainRendering->removeOverlayItem(m_windowEdgeAxisOverlay.p()); m_mainRendering->removeOverlayItem(m_windowEdgeAxisOverlay.p());
@ -851,9 +851,9 @@ void RiuViewer::showEdgeTickMarksXZ(bool enable)
{ {
m_windowEdgeAxisOverlay->setDomainAxes(RivWindowEdgeAxesOverlayItem::XZ_AXES); m_windowEdgeAxisOverlay->setDomainAxes(RivWindowEdgeAxesOverlayItem::XZ_AXES);
m_windowEdgeAxisOverlay->setIsSwitchingYAxisSign(true); m_windowEdgeAxisOverlay->setIsSwitchingYAxisSign(true);
m_windowEdgeAxisOverlay->setShowAxisLines(showAxisLines);
m_mainRendering->addOverlayItem(m_windowEdgeAxisOverlay.p()); m_mainRendering->addOverlayItem(m_windowEdgeAxisOverlay.p());
} }
m_showWindowEdgeAxes = enable; m_showWindowEdgeAxes = enable;
} }

View File

@ -90,8 +90,8 @@ public:
const cvf::Vec3d& displayModelOffset, const cvf::Vec3d& displayModelOffset,
const cvf::Color3f& backgroundColor, const cvf::Color3f& backgroundColor,
const cvf::BoundingBox& domainCoordBoundingBox); const cvf::BoundingBox& domainCoordBoundingBox);
void showEdgeTickMarksXY(bool enable); void showEdgeTickMarksXY(bool enable, bool showAxisLines = false);
void showEdgeTickMarksXZ(bool enable); void showEdgeTickMarksXZ(bool enable, bool showAxisLines = false);
void updateAnnotationItems(); void updateAnnotationItems();