#3868 Annotations. Fix polyline visualization and property editor

This commit is contained in:
Bjørn Erik Jensen 2018-12-18 12:50:21 +01:00
parent a2e2907e41
commit 4873381176
6 changed files with 107 additions and 32 deletions

View File

@ -27,7 +27,9 @@
#include "RimPolylinesAnnotationInView.h"
#include "RimAnnotationInViewCollection.h"
#include "RimAnnotationLineAppearance.h"
#include "RimEclipseView.h"
#include "RigMainGrid.h"
#include "RigPolyLinesData.h"
#include "RivPolylineGenerator.h"
@ -109,20 +111,26 @@ void RivPolylineAnnotationPartMgr::buildPolylineAnnotationParts(const caf::Displ
if(rimAnnotation->showSpheres())
{
auto sphereColor = rimAnnotation->appearance()->sphereColor();
int sphereRadius = rimAnnotation->appearance()->sphereRadius();
double sphereRadiusFactor = rimAnnotation->appearance()->sphereRadiusFactor();
cvf::ref<cvf::Vec3fArray> vertices = new cvf::Vec3fArray;
cvf::ref<cvf::Vec3fArray> vecRes = new cvf::Vec3fArray;
cvf::ref<cvf::Color3fArray> colors = new cvf::Color3fArray;
vertices->reserve(linesInDisplay.front().size());
vecRes->reserve(linesInDisplay.front().size());
colors->reserve(linesInDisplay.front().size());
for (const auto& v : linesInDisplay.front())
size_t pointCount = 0;
for (const auto& line : linesInDisplay) pointCount += line.size();
vertices->reserve(pointCount);
vecRes->reserve(pointCount);
colors->reserve(pointCount);
for (const auto& line : linesInDisplay)
{
vertices->add(cvf::Vec3f(v));
vecRes->add(cvf::Vec3f::X_AXIS);
colors->add(sphereColor);
for (const auto& v : line)
{
vertices->add(cvf::Vec3f(v));
vecRes->add(cvf::Vec3f::X_AXIS);
colors->add(sphereColor);
}
}
cvf::ref<cvf::DrawableVectors> vectorDrawable;
@ -141,7 +149,15 @@ void RivPolylineAnnotationPartMgr::buildPolylineAnnotationParts(const caf::Displ
vectorDrawable->setColors(colors.p());
cvf::GeometryBuilderTriangles builder;
cvf::GeometryUtils::createSphere(sphereRadius, 15, 15, &builder);
double cellRadius = 15.0;
auto eclipseView = dynamic_cast<RimEclipseView*>(m_rimView.p());
if (eclipseView)
{
double characteristicCellSize = eclipseView->mainGrid()->characteristicIJCellSize();
cellRadius = sphereRadiusFactor * characteristicCellSize;
}
cvf::GeometryUtils::createSphere(cellRadius, 15, 15, &builder);
vectorDrawable->setGlyph(builder.trianglesUShort().p(), builder.vertices().p());
cvf::ref<cvf::Part> part = new cvf::Part;

View File

@ -65,6 +65,7 @@ RimAnnotationLineAppearance::RimAnnotationLineAppearance()
{
CAF_PDM_InitObject("AnnotationLineAppearance", ":/WellCollection.png", "", "");
CAF_PDM_InitField(&m_lineFieldsHidden, "LineFieldsHidden", false, "Line Fields Hidden", "", "", "");
CAF_PDM_InitField(&m_color, "Color", cvf::Color3f(cvf::Color3f::BLACK), "Line Color", "", "", "");
CAF_PDM_InitField(&m_thickness, "Thickness", 2, "Line Thickness", "", "", "");
@ -73,6 +74,15 @@ RimAnnotationLineAppearance::RimAnnotationLineAppearance()
m_style.uiCapability()->setUiHidden(true);
m_style.xmlCapability()->disableIO();
m_lineFieldsHidden.uiCapability()->setUiHidden(true);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnnotationLineAppearance::setLineFieldsHidden(bool hidden)
{
m_lineFieldsHidden = hidden;
}
//--------------------------------------------------------------------------------------------------
@ -112,9 +122,12 @@ int RimAnnotationLineAppearance::thickness() const
//--------------------------------------------------------------------------------------------------
void RimAnnotationLineAppearance::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
uiOrdering.add(&m_color);
uiOrdering.add(&m_style);
uiOrdering.add(&m_thickness);
if (!m_lineFieldsHidden())
{
uiOrdering.add(&m_color);
uiOrdering.add(&m_style);
uiOrdering.add(&m_thickness);
}
uiOrdering.skipRemainingFields(true);
}
@ -157,8 +170,19 @@ RimPolylineAppearance::RimPolylineAppearance()
{
CAF_PDM_InitObject("PolylineAppearance", ":/WellCollection.png", "", "");
CAF_PDM_InitField(&m_sphereFieldsHidden, "SphereFieldsHidden", false, "Sphere Fields Hidden", "", "", "");
CAF_PDM_InitField(&m_sphereColor, "SphereColor", cvf::Color3f(cvf::Color3f::BLACK), "Sphere Color", "", "", "");
CAF_PDM_InitField(&m_sphereRadius, "SphereRadius", 15, "Sphere Radius", "", "", "");
CAF_PDM_InitField(&m_sphereRadiusFactor, "SphereRadiusFactor", 0.1, "Sphere Radius Factor", "", "", "");
m_sphereFieldsHidden.uiCapability()->setUiHidden(true);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPolylineAppearance::setSphereFieldsHidden(bool hidden)
{
m_sphereFieldsHidden = hidden;
}
//--------------------------------------------------------------------------------------------------
@ -180,17 +204,17 @@ cvf::Color3f RimPolylineAppearance::sphereColor() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPolylineAppearance::setSphereRadius(int radius)
void RimPolylineAppearance::setSphereRadiusFactor(double factor)
{
m_sphereRadius = radius;
m_sphereRadiusFactor = factor;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RimPolylineAppearance::sphereRadius() const
double RimPolylineAppearance::sphereRadiusFactor() const
{
return m_sphereRadius();
return m_sphereRadiusFactor();
}
//--------------------------------------------------------------------------------------------------
@ -200,8 +224,11 @@ void RimPolylineAppearance::defineUiOrdering(QString uiConfigName, caf::PdmUiOrd
{
RimAnnotationLineAppearance::defineUiOrdering(uiConfigName, uiOrdering);
uiOrdering.add(&m_sphereColor);
uiOrdering.add(&m_sphereRadius);
if (!m_sphereFieldsHidden)
{
uiOrdering.add(&m_sphereColor);
uiOrdering.add(&m_sphereRadiusFactor);
}
uiOrdering.skipRemainingFields(true);
}

View File

@ -44,6 +44,9 @@ public:
public:
RimAnnotationLineAppearance();
void setLineFieldsHidden(bool hidden);
void setColor(const cvf::Color3f& newColor);
cvf::Color3f color() const;
bool isDashed() const;
@ -57,6 +60,7 @@ protected:
caf::PdmUiEditorAttribute* attribute) override;
private:
caf::PdmField<bool> m_lineFieldsHidden;
caf::PdmField<cvf::Color3f> m_color;
caf::PdmField<LineStyle> m_style;
caf::PdmField<int> m_thickness;
@ -85,16 +89,19 @@ class RimPolylineAppearance : public RimAnnotationLineAppearance
public:
RimPolylineAppearance();
void setSphereFieldsHidden(bool hidden);
void setSphereColor(const cvf::Color3f& color);
cvf::Color3f sphereColor() const;
void setSphereRadius(int radius);
int sphereRadius() const;
void setSphereRadiusFactor(double factor);
double sphereRadiusFactor() const;
protected:
void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
private:
caf::PdmField<bool> m_sphereFieldsHidden;
caf::PdmField<cvf::Color3f> m_sphereColor;
caf::PdmField<int> m_sphereRadius;
caf::PdmField<double> m_sphereRadiusFactor;
};

View File

@ -58,9 +58,9 @@ protected:
protected:
caf::PdmField<bool> m_isActive;
caf::PdmField<bool> m_closePolyline;
caf::PdmField<bool> m_showLines;
caf::PdmField<bool> m_showSpheres;
caf::PdmField<bool> m_closePolyline;
caf::PdmField<bool> m_showLines;
caf::PdmField<bool> m_showSpheres;
caf::PdmChildField<RimPolylineAppearance*> m_appearance;
};

View File

@ -177,10 +177,16 @@ void RimPolylinesFromFileAnnotation::setDescriptionFromFileName()
//--------------------------------------------------------------------------------------------------
void RimPolylinesFromFileAnnotation::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
uiOrdering.add(&m_polyLinesFileName);
uiOrdering.add(&m_closePolyline);
appearance()->setLineFieldsHidden(!m_showLines());
appearance()->setSphereFieldsHidden(!m_showSpheres());
uiOrdering.add(&m_polyLinesFileName);
auto appearanceGroup = uiOrdering.addNewGroup("Appearance");
appearanceGroup->add(&m_closePolyline);
appearanceGroup->add(&m_showLines);
appearanceGroup->add(&m_showSpheres);
auto appearanceGroup = uiOrdering.addNewGroup("Line Appearance");
appearance()->uiOrdering(uiConfigName, *appearanceGroup);
uiOrdering.skipRemainingFields(true);
@ -204,6 +210,14 @@ void RimPolylinesFromFileAnnotation::fieldChangedByUi(const caf::PdmFieldHandle*
QMessageBox::warning(nullptr, "Import Polylines", totalError);
}
}
else if (changedField == &m_showLines)
{
appearance()->setLineFieldsHidden(!m_showLines());
}
else if (changedField == &m_showSpheres)
{
appearance()->setSphereFieldsHidden(!m_showSpheres());
}
RimAnnotationCollection* annColl = nullptr;
this->firstAncestorOrThisOfTypeAsserted(annColl);

View File

@ -225,15 +225,18 @@ void RimUserDefinedPolylinesAnnotation::enablePicking(bool enable)
//--------------------------------------------------------------------------------------------------
void RimUserDefinedPolylinesAnnotation::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
appearance()->setLineFieldsHidden(!m_showLines);
appearance()->setSphereFieldsHidden(!m_showSpheres);
uiOrdering.add(&m_name);
uiOrdering.add(&m_targets);
uiOrdering.add(&m_enablePicking);
uiOrdering.add(&m_closePolyline);
uiOrdering.add(&m_showLines);
uiOrdering.add(&m_showSpheres);
auto appearanceGroup = uiOrdering.addNewGroup("Appearance");
appearanceGroup->add(&m_closePolyline);
appearanceGroup->add(&m_showLines);
appearanceGroup->add(&m_showSpheres);
appearance()->uiOrdering(uiConfigName, *appearanceGroup);
uiOrdering.skipRemainingFields(true);
@ -258,6 +261,14 @@ void RimUserDefinedPolylinesAnnotation::fieldChangedByUi(const caf::PdmFieldHand
{
enablePicking(m_enablePicking);
}
else if (changedField == &m_showLines)
{
appearance()->setLineFieldsHidden(!m_showLines());
}
else if (changedField == &m_showSpheres)
{
appearance()->setSphereFieldsHidden(!m_showSpheres());
}
updateVisualization();
}