#4309 Offset text annotations label position slightly to make labels less likely to be obscured by grid

This commit is contained in:
Gaute Lindkvist
2019-04-16 12:55:53 +02:00
parent e0bbda85d9
commit a8bcfefca2
3 changed files with 17 additions and 7 deletions

View File

@@ -19,16 +19,18 @@
#include "RiaApplication.h"
#include "Rim3dView.h"
#include "RimCase.h"
#include "RiuViewer.h"
#include "cafDisplayCoordTransform.h"
#include "cafSelectionManager.h"
//--------------------------------------------------------------------------------------------------
///
/// zOffsetFactor will be multiplied by characteristic length to yield a z-offset
//--------------------------------------------------------------------------------------------------
RicVec3dPickEventHandler::RicVec3dPickEventHandler(caf::PdmField<cvf::Vec3d>* vectorField)
RicVec3dPickEventHandler::RicVec3dPickEventHandler(caf::PdmField<cvf::Vec3d>* vectorField, double zOffsetFactor)
: m_vectorField(vectorField)
, m_zOffsetFactor(zOffsetFactor)
{
}
@@ -39,13 +41,20 @@ bool RicVec3dPickEventHandler::handle3dPickEvent(const Ric3dPickEvent& eventObje
{
const Rim3dView* rimView = eventObject.m_view;
double zPickOffset = 10.0;
cvf::Vec3d pickedPosition = eventObject.m_pickItemInfos.front().globalPickedPoint();
RimCase* ownerCase = nullptr;
rimView->firstAncestorOrThisOfType(ownerCase);
if (ownerCase)
{
double zPickOffset = ownerCase->characteristicCellSize() * m_zOffsetFactor;
pickedPosition.z() += zPickOffset;
}
cvf::ref<caf::DisplayCoordTransform> transForm = rimView->displayCoordTransform();
cvf::Vec3d pickedPositionInUTM = transForm->transformToDomainCoord(eventObject.m_pickItemInfos.front().globalPickedPoint());
cvf::Vec3d pickedPositionInUTM = transForm->transformToDomainCoord(pickedPosition);
pickedPositionInUTM.z() *= -1.0;
pickedPositionInUTM.z() -= zPickOffset;
m_vectorField->setValueWithFieldChanged(pickedPositionInUTM);
return true;

View File

@@ -29,7 +29,7 @@ class Rim3dView;
class RicVec3dPickEventHandler : public Ric3dViewPickEventHandler
{
public:
RicVec3dPickEventHandler(caf::PdmField<cvf::Vec3d>* vectorField);
RicVec3dPickEventHandler(caf::PdmField<cvf::Vec3d>* vectorField, double zOffsetFactor = 0.0);
bool handle3dPickEvent(const Ric3dPickEvent& eventObject) override;
void registerAsPickEventHandler() override;
@@ -37,6 +37,7 @@ public:
private:
caf::PdmField<cvf::Vec3d>* m_vectorField;
double m_zOffsetFactor;
};

View File

@@ -77,7 +77,7 @@ RimTextAnnotation::RimTextAnnotation()
m_nameProxy.xmlCapability()->disableIO();
m_anchorPointPickEventHandler.reset(new RicVec3dPickEventHandler(&m_anchorPointXyd));
m_labelPointPickEventHandler.reset(new RicVec3dPickEventHandler(&m_labelPointXyd));
m_labelPointPickEventHandler.reset(new RicVec3dPickEventHandler(&m_labelPointXyd, 0.1));
}