#4014 Use Vec3d Editor for Text and ReachCircle Annotations

This commit is contained in:
Gaute Lindkvist 2019-02-05 16:03:39 +01:00
parent 058b9cfb7a
commit 0e52426071
4 changed files with 86 additions and 0 deletions

View File

@ -24,6 +24,9 @@
#include "RimProject.h"
#include "RimAnnotationCollection.h"
#include "RicVec3dPickEventHandler.h"
#include "cafPdmUiVec3dEditor.h"
CAF_PDM_SOURCE_INIT(RimReachCircleAnnotation, "RimReachCircleAnnotation");
@ -39,6 +42,7 @@ RimReachCircleAnnotation::RimReachCircleAnnotation()
m_isActive.uiCapability()->setUiHidden(true);
CAF_PDM_InitField(&m_centerPointXyd, "CenterPointXyd", Vec3d::ZERO, "Center Point", "", "", "");
m_centerPointXyd.uiCapability()->setUiEditorTypeName(caf::PdmUiVec3dEditor::uiEditorTypeName());
CAF_PDM_InitField(&m_radius, "Radius", 0.0, "Radius", "", "", "");
CAF_PDM_InitField(&m_name, "Name", QString("Circle Annotation"), "Name", "", "", "");
@ -47,6 +51,8 @@ RimReachCircleAnnotation::RimReachCircleAnnotation()
m_appearance = new RimReachCircleLineAppearance();
m_appearance.uiCapability()->setUiTreeHidden(true);
m_appearance.uiCapability()->setUiTreeChildrenHidden(true);
m_centerPointEventHandler.reset(new RicVec3dPickEventHandler(&m_centerPointXyd));
}
//--------------------------------------------------------------------------------------------------
@ -146,3 +152,25 @@ caf::PdmFieldHandle* RimReachCircleAnnotation::objectToggleField()
return &m_isActive;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimReachCircleAnnotation::defineEditorAttribute(const caf::PdmFieldHandle* field,
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute)
{
if (field == &m_centerPointXyd)
{
caf::PdmUiVec3dEditorAttribute* attr = dynamic_cast<caf::PdmUiVec3dEditorAttribute*>(attribute);
if (attr)
{
attr->pickEventHandler = m_centerPointEventHandler;
if (m_centerPointXyd().isZero())
{
attr->startPicking = true;
}
}
}
}

View File

@ -37,6 +37,7 @@
#include <vector>
class QString;
class RicVec3dPickEventHandler;
class RimGridView;
class RimReachCircleLineAppearance;
@ -69,6 +70,7 @@ protected:
void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
caf::PdmFieldHandle* userDescriptionField() override;
caf::PdmFieldHandle* objectToggleField() override;
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute) override;
private:
caf::PdmField<bool> m_isActive;
@ -77,4 +79,6 @@ private:
caf::PdmField<double> m_radius;
caf::PdmField<QString> m_name;
caf::PdmChildField<RimReachCircleLineAppearance*> m_appearance;
std::shared_ptr<RicVec3dPickEventHandler> m_centerPointEventHandler;
};

View File

@ -25,10 +25,16 @@
#include "RimAnnotationGroupCollection.h"
#include "RimAnnotationTextAppearance.h"
#include "RicVec3dPickEventHandler.h"
#include "AnnotationCommands/RicTextAnnotation3dEditor.h"
#include "cafCmdFeatureManager.h"
#include "cafPdmUiTextEditor.h"
#include "cafPdmUiTreeOrdering.h"
#include "cafPdmUiVec3dEditor.h"
#include <QAction>
#include <QPointer>
CAF_PDM_SOURCE_INIT(RimTextAnnotation, "RimTextAnnotation");
@ -42,7 +48,9 @@ RimTextAnnotation::RimTextAnnotation()
this->setUi3dEditorTypeName(RicTextAnnotation3dEditor::uiEditorTypeName());
CAF_PDM_InitField(&m_anchorPointXyd, "AnchorPointXyd", Vec3d::ZERO, "Anchor Point", "", "", "");
m_anchorPointXyd.uiCapability()->setUiEditorTypeName(caf::PdmUiVec3dEditor::uiEditorTypeName());
CAF_PDM_InitField(&m_labelPointXyd, "LabelPointXyd", Vec3d::ZERO, "Label Point", "", "", "");
m_labelPointXyd.uiCapability()->setUiEditorTypeName(caf::PdmUiVec3dEditor::uiEditorTypeName());
CAF_PDM_InitField(&m_text, "Text", QString("(New text)"), "Text", "", "", "");
m_text.uiCapability()->setUiEditorTypeName(caf::PdmUiTextEditor::uiEditorTypeName());
@ -59,6 +67,9 @@ RimTextAnnotation::RimTextAnnotation()
m_nameProxy.uiCapability()->setUiReadOnly(true);
m_nameProxy.xmlCapability()->disableIO();
m_anchorPointPickEventHandler.reset(new RicVec3dPickEventHandler(&m_anchorPointXyd));
m_labelPointPickEventHandler.reset(new RicVec3dPickEventHandler(&m_labelPointXyd));
}
//--------------------------------------------------------------------------------------------------
@ -145,6 +156,16 @@ void RimTextAnnotation::fieldChangedByUi(const caf::PdmFieldHandle* changedField
const QVariant& oldValue,
const QVariant& newValue)
{
if (changedField == &m_anchorPointXyd && m_labelPointXyd().isZero())
{
m_labelPointXyd = m_anchorPointXyd();
}
if (changedField == &m_labelPointXyd && m_anchorPointXyd().isZero())
{
m_anchorPointXyd = m_labelPointXyd();
}
RimAnnotationCollectionBase* annColl = nullptr;
this->firstAncestorOrThisOfTypeAsserted(annColl);
@ -178,6 +199,7 @@ bool RimTextAnnotation::isVisible() const
bool visible = true;
if (coll) visible = coll->isVisible();
if(visible) visible = m_isActive;
return visible;
}
@ -197,6 +219,29 @@ caf::PdmFieldHandle* RimTextAnnotation::objectToggleField()
return &m_isActive;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimTextAnnotation::defineEditorAttribute(const caf::PdmFieldHandle* field,
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute)
{
caf::PdmUiVec3dEditorAttribute* attr = dynamic_cast<caf::PdmUiVec3dEditorAttribute*>(attribute);
if (attr && field == &m_anchorPointXyd)
{
attr->pickEventHandler = m_anchorPointPickEventHandler;
if (m_anchorPointXyd().isZero())
{
attr->startPicking = true;
}
}
else if (attr && field == &m_labelPointXyd)
{
attr->pickEventHandler = m_labelPointPickEventHandler;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -34,9 +34,11 @@
#include "cvfObject.h"
#include "cvfVector3.h"
#include <memory>
#include <vector>
class QString;
class RicVec3dPickEventHandler;
class RimGridView;
class RimAnnotationTextAppearance;
@ -72,6 +74,9 @@ protected:
void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
caf::PdmFieldHandle* userDescriptionField() override;
caf::PdmFieldHandle* objectToggleField() override;
void defineEditorAttribute(const caf::PdmFieldHandle* field,
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute) override;
private:
friend class RicTextAnnotation3dEditor;
@ -86,5 +91,9 @@ private:
caf::PdmChildField<RimAnnotationTextAppearance*> m_textAppearance;
caf::PdmProxyValueField<QString> m_nameProxy;
std::shared_ptr<RicVec3dPickEventHandler> m_anchorPointPickEventHandler;
std::shared_ptr<RicVec3dPickEventHandler> m_labelPointPickEventHandler;
};