diff --git a/ApplicationCode/Commands/WellPathCommands/PointTangentManipulator/RicPolylineTarget3dEditor.cpp b/ApplicationCode/Commands/WellPathCommands/PointTangentManipulator/RicPolylineTarget3dEditor.cpp index af2ec0c68a..140d31a3ec 100644 --- a/ApplicationCode/Commands/WellPathCommands/PointTangentManipulator/RicPolylineTarget3dEditor.cpp +++ b/ApplicationCode/Commands/WellPathCommands/PointTangentManipulator/RicPolylineTarget3dEditor.cpp @@ -62,7 +62,7 @@ RicPolylineTarget3dEditor::~RicPolylineTarget3dEditor() RimPolylineTarget* oldTarget = dynamic_cast(this->pdmObject()); if (oldTarget) { - oldTarget->m_targetPoint.uiCapability()->removeFieldEditor(this); + oldTarget->targetPointUiCapability()->removeFieldEditor(this); } delete m_manipulator; @@ -85,7 +85,7 @@ void RicPolylineTarget3dEditor::configureAndUpdateUi(const QString& uiConfigName RimUserDefinedPolylinesAnnotation* polylineDef; target->firstAncestorOrThisOfTypeAsserted(polylineDef); - target->m_targetPoint.uiCapability()->addFieldEditor(this); + target->targetPointUiCapability()->addFieldEditor(this); if (m_manipulator.isNull()) { @@ -131,7 +131,7 @@ void RicPolylineTarget3dEditor::cleanupBeforeSettingPdmObject() RimPolylineTarget* oldTarget = dynamic_cast(this->pdmObject()); if (oldTarget) { - oldTarget->m_targetPoint.uiCapability()->removeFieldEditor(this); + oldTarget->targetPointUiCapability()->removeFieldEditor(this); } } @@ -161,7 +161,7 @@ void RicPolylineTarget3dEditor::slotUpdated(const cvf::Vec3d& origin, const cvf: QVariant originVariant = caf::PdmValueFieldSpecialization < cvf::Vec3d >::convert(domainOrigin); target->enableFullUpdate(false); - caf::PdmUiCommandSystemProxy::instance()->setUiValueToField(target->m_targetPoint.uiCapability(), originVariant); + caf::PdmUiCommandSystemProxy::instance()->setUiValueToField(target->targetPointUiCapability(), originVariant); target->enableFullUpdate(true); } diff --git a/ApplicationCode/Commands/WellPathCommands/RicNewPolylineTargetFeature.cpp b/ApplicationCode/Commands/WellPathCommands/RicNewPolylineTargetFeature.cpp index fea9456f0d..e3b8b4fb96 100644 --- a/ApplicationCode/Commands/WellPathCommands/RicNewPolylineTargetFeature.cpp +++ b/ApplicationCode/Commands/WellPathCommands/RicNewPolylineTargetFeature.cpp @@ -19,11 +19,18 @@ CAF_CMD_SOURCE_INIT(RicNewPolylineTargetFeature, "RicNewPolylineTargetFeature"); +#include "RiaApplication.h" + +#include "RimProject.h" +#include "RimGridView.h" +#include "RimCase.h" #include "RimUserDefinedPolylinesAnnotation.h" #include "RimPolylineTarget.h" #include "cafSelectionManager.h" #include +#include "cvfBoundingBox.h" + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -71,7 +78,10 @@ void RicNewPolylineTargetFeature::onActionTriggered(bool isChecked) if (!afterBeforePair.first && afterBeforePair.second) { newPos = afterBeforePair.second->targetPointXYZ(); - newPos.z() = -newPos.z(); + + // Small displacement to separate the targets + newPos.x() -= 50; + newPos.y() -= 50; } else if (afterBeforePair.first && afterBeforePair.second) { @@ -114,7 +124,18 @@ void RicNewPolylineTargetFeature::onActionTriggered(bool isChecked) if ( targetCount == 0 ) { - polylineDef->appendTarget(); + auto defaultPos = cvf::Vec3d::ZERO; + + // Set decent position + std::vector gridViews; + RiaApplication::instance()->project()->allVisibleGridViews(gridViews); + if (!gridViews.empty()) + { + auto minPos = gridViews.front()->ownerCase()->allCellsBoundingBox().min(); + defaultPos = minPos; + } + + polylineDef->appendTarget(defaultPos); } else { diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimPolylineTarget.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimPolylineTarget.cpp index 5b9e8be04b..d42a2123d2 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimPolylineTarget.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimPolylineTarget.cpp @@ -15,8 +15,7 @@ RimPolylineTarget::RimPolylineTarget() { CAF_PDM_InitField(&m_isEnabled, "IsEnabled", true, "", "", "", ""); - //m_targetType.uiCapability()->setUiHidden(true); - CAF_PDM_InitFieldNoDefault(&m_targetPoint, "TargetPoint", "Point", "", "", ""); + CAF_PDM_InitFieldNoDefault(&m_targetPointXyd, "TargetPointXyd", "Point", "", "", ""); } //-------------------------------------------------------------------------------------------------- @@ -40,17 +39,15 @@ bool RimPolylineTarget::isEnabled() const //-------------------------------------------------------------------------------------------------- void RimPolylineTarget::setAsPointTargetXYD(const cvf::Vec3d& point) { - m_targetPoint = point; + m_targetPointXyd = point; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimPolylineTarget::setAsPointXYZAndTangentTarget(const cvf::Vec3d& point, - double azimuth, - double inclination) +void RimPolylineTarget::setAsPointXYZ(const cvf::Vec3d& point) { - m_targetPoint = cvf::Vec3d(point.x(), point.y(), -point.z()); + m_targetPointXyd = cvf::Vec3d(point.x(), point.y(), -point.z()); } //-------------------------------------------------------------------------------------------------- @@ -58,11 +55,19 @@ void RimPolylineTarget::setAsPointXYZAndTangentTarget(const cvf::Vec3d& point, //-------------------------------------------------------------------------------------------------- cvf::Vec3d RimPolylineTarget::targetPointXYZ() const { - cvf::Vec3d xyzPoint(m_targetPoint()); + cvf::Vec3d xyzPoint(m_targetPointXyd()); xyzPoint.z() = -xyzPoint.z(); return xyzPoint; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmUiFieldHandle* RimPolylineTarget::targetPointUiCapability() +{ + return m_targetPointXyd.uiCapability(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -95,5 +100,5 @@ void RimPolylineTarget::fieldChangedByUi(const caf::PdmFieldHandle* changedField //-------------------------------------------------------------------------------------------------- void RimPolylineTarget::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) { - m_targetPoint.uiCapability()->setUiReadOnly(m_isEnabled()); + m_targetPointXyd.uiCapability()->setUiReadOnly(m_isEnabled()); } diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimPolylineTarget.h b/ApplicationCode/ProjectDataModel/Annotations/RimPolylineTarget.h index 744d2cecd8..3403aa38f1 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimPolylineTarget.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimPolylineTarget.h @@ -36,9 +36,11 @@ public: bool isEnabled() const; void setAsPointTargetXYD(const cvf::Vec3d& point); - void setAsPointXYZAndTangentTarget(const cvf::Vec3d& point, double azimuth, double inclination); + void setAsPointXYZ(const cvf::Vec3d& point); cvf::Vec3d targetPointXYZ() const; + caf::PdmUiFieldHandle* targetPointUiCapability(); + void enableFullUpdate(bool enable); private: QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override; @@ -46,11 +48,9 @@ private: void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; private: - friend class RicPolylineTarget3dEditor; - void enableFullUpdate(bool enable); bool m_isFullUpdateEnabled; caf::PdmField m_isEnabled; - caf::PdmField m_targetPoint; + caf::PdmField m_targetPointXyd; }; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp index 0ca783ff78..71fb58f6dd 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp @@ -29,6 +29,8 @@ #include "RiuViewerCommands.h" +#include "cvfBoundingBox.h" + #include "cafPdmUiTableViewEditor.h" #include "cafCmdFeatureMenuBuilder.h" #include "cafPdmUiPushButtonEditor.h" @@ -58,7 +60,7 @@ CAF_PDM_SOURCE_INIT(RimUserDefinedPolylinesAnnotation, "UserDefinedPolylinesAnno RimUserDefinedPolylinesAnnotation::RimUserDefinedPolylinesAnnotation() : m_pickTargetsEventHandler(new RicPolylineTargetsPickEventHandler(this)) { - CAF_PDM_InitObject("PolyLines Annotation", ":/WellCollection.png", "", ""); + CAF_PDM_InitObject("PolyLines Annotation", ":/PolylinesFromFile16x16.png", "", ""); CAF_PDM_InitField(&m_enablePicking, "EnablePicking", false, "", "", "", ""); caf::PdmUiPushButtonEditor::configureEditorForField(&m_enablePicking); @@ -119,24 +121,25 @@ bool RimUserDefinedPolylinesAnnotation::isEmpty() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimUserDefinedPolylinesAnnotation::appendTarget() +void RimUserDefinedPolylinesAnnotation::appendTarget(const cvf::Vec3d& defaultPos) { - RimPolylineTarget* wellPathTarget = nullptr; + RimPolylineTarget* target = nullptr; auto targets = m_targets.childObjects(); if (targets.empty()) { - wellPathTarget = new RimPolylineTarget(); + target = new RimPolylineTarget(); + target->setAsPointXYZ(defaultPos); } else { - wellPathTarget = dynamic_cast( + target = dynamic_cast( targets.back()->xmlCapability()->copyByXmlSerialization(caf::PdmDefaultObjectFactory::instance())); } - if (wellPathTarget) + if (target) { - m_targets.push_back(wellPathTarget); + m_targets.push_back(target); } } diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.h b/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.h index 5e5b09be6e..9ed511dbc8 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.h @@ -45,7 +45,7 @@ public: std::vector activeTargets() const; virtual bool isEmpty() override; - void appendTarget(); + void appendTarget(const cvf::Vec3d& defaultPos = cvf::Vec3d::ZERO); void insertTarget(const RimPolylineTarget* targetToInsertBefore, RimPolylineTarget* targetToInsert); void deleteTarget(RimPolylineTarget* targetTodelete);