#3706 Annotations. Simple drilling reach circle

This commit is contained in:
Bjørn Erik Jensen 2018-11-26 11:08:38 +01:00
parent 4dc5c66b03
commit 6286a8729b
9 changed files with 103 additions and 132 deletions

View File

@ -36,6 +36,7 @@
CAF_CMD_SOURCE_INIT(RicNewAnnotationFeature, "RicNewAnnotationFeature"); CAF_CMD_SOURCE_INIT(RicNewAnnotationFeature, "RicNewAnnotationFeature");
CAF_CMD_SOURCE_INIT(RicNewTextAnnotationFeature, "RicNewTextAnnotationFeature"); CAF_CMD_SOURCE_INIT(RicNewTextAnnotationFeature, "RicNewTextAnnotationFeature");
CAF_CMD_SOURCE_INIT(RicNewReachCircleAnnotationFeature, "RicNewReachCircleAnnotationFeature");
CAF_CMD_SOURCE_INIT(RicNewPolylineAnnotationFeature, "RicNewPolygonAnnotationFeature"); CAF_CMD_SOURCE_INIT(RicNewPolylineAnnotationFeature, "RicNewPolygonAnnotationFeature");
@ -99,6 +100,30 @@ void RicNewTextAnnotationFeature::setupActionLook(QAction* actionToSetup)
actionToSetup->setText("New Text Annotation"); actionToSetup->setText("New Text Annotation");
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicNewReachCircleAnnotationFeature::onActionTriggered(bool isChecked)
{
auto coll = annotationCollection();
if (coll)
{
auto newAnnotation = new RimReachCircleAnnotation();
coll->addAnnotation(newAnnotation);
coll->updateConnectedEditors();
RiuMainWindow::instance()->selectAsCurrentItem(newAnnotation);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicNewReachCircleAnnotationFeature::setupActionLook(QAction* actionToSetup)
{
actionToSetup->setIcon(QIcon(":/Plus.png"));
actionToSetup->setText("New Reach Circle Annotation");
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -57,6 +57,19 @@ protected:
void setupActionLook(QAction* actionToSetup) override; void setupActionLook(QAction* actionToSetup) override;
}; };
//==================================================================================================
///
//==================================================================================================
class RicNewReachCircleAnnotationFeature : public RicNewAnnotationFeature
{
CAF_CMD_HEADER_INIT;
protected:
// Overrides
void onActionTriggered(bool isChecked) override;
void setupActionLook(QAction* actionToSetup) override;
};
//================================================================================================== //==================================================================================================
/// ///
//================================================================================================== //==================================================================================================

View File

@ -109,10 +109,10 @@ void RivAnnotationsPartMgr::createAnnotationPartManagers()
auto reachCircleAnnotations = proj->reachCircleAnnotations(); auto reachCircleAnnotations = proj->reachCircleAnnotations();
auto polylineAnnotations = proj->polylineAnnotations(); auto polylineAnnotations = proj->polylineAnnotations();
if (m_textAnnotationPartMgrs.size() != textAnnotations.size())
{
clearGeometryCache(); clearGeometryCache();
if (m_textAnnotationPartMgrs.size() != textAnnotations.size())
{
for (auto annotation : textAnnotations) for (auto annotation : textAnnotations)
{ {
auto* apm = new RivTextAnnotationPartMgr(annotation); auto* apm = new RivTextAnnotationPartMgr(annotation);
@ -122,8 +122,6 @@ void RivAnnotationsPartMgr::createAnnotationPartManagers()
} }
if (m_reachCircleAnnotationPartMgrs.size() != reachCircleAnnotations.size()) if (m_reachCircleAnnotationPartMgrs.size() != reachCircleAnnotations.size())
{ {
clearGeometryCache();
for (auto annotation : reachCircleAnnotations) for (auto annotation : reachCircleAnnotations)
{ {
auto* apm = new RivReachCircleAnnotationPartMgr(annotation); auto* apm = new RivReachCircleAnnotationPartMgr(annotation);
@ -133,8 +131,6 @@ void RivAnnotationsPartMgr::createAnnotationPartManagers()
} }
if (m_polylineAnnotationPartMgrs.size() != polylineAnnotations.size()) if (m_polylineAnnotationPartMgrs.size() != polylineAnnotations.size())
{ {
clearGeometryCache();
for (auto annotation : polylineAnnotations) for (auto annotation : polylineAnnotations)
{ {
auto* apm = new RivPolylineAnnotationPartMgr(annotation); auto* apm = new RivPolylineAnnotationPartMgr(annotation);

View File

@ -22,42 +22,20 @@
#include "RivReachCircleAnnotationPartMgr.h" #include "RivReachCircleAnnotationPartMgr.h"
#include "RiaApplication.h"
#include "RigActiveCellInfo.h"
#include "RigCell.h"
#include "RigEclipseCaseData.h"
#include "RigMainGrid.h"
#include "RigSimWellData.h"
//#include "RimAnnotationInView.h"
#include "RimReachCircleAnnotation.h" #include "RimReachCircleAnnotation.h"
#include "RimAnnotationInViewCollection.h"
#include "RimEclipseCase.h"
#include "RimEclipseView.h"
#include "RimSimWellInViewCollection.h"
#include "RimSimWellInView.h"
#include "RivPipeGeometryGenerator.h"
#include "RivPolylineGenerator.h" #include "RivPolylineGenerator.h"
#include "RivPartPriority.h" #include "RivPartPriority.h"
#include "RivReachCircleAnnotationSourceInfo.h" #include "RivReachCircleAnnotationSourceInfo.h"
#include "cafEffectGenerator.h" #include "cafEffectGenerator.h"
#include "cvfArrowGenerator.h"
#include "cvfDrawableGeo.h" #include "cvfDrawableGeo.h"
#include "cvfDrawableText.h"
#include "cvfGeometryBuilderFaceList.h"
#include "cvfModelBasicList.h" #include "cvfModelBasicList.h"
#include "cvfPart.h" #include "cvfPart.h"
#include "cvfTransform.h"
#include "cvfqtUtils.h"
#include "cafDisplayCoordTransform.h" #include "cafDisplayCoordTransform.h"
#include "RivSectionFlattner.h"
#include <cmath>
static RimSimWellInViewCollection* simWellInViewCollection() { return nullptr; }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
@ -75,12 +53,52 @@ RivReachCircleAnnotationPartMgr::~RivReachCircleAnnotationPartMgr()
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivReachCircleAnnotationPartMgr::buildParts(const caf::DisplayCoordTransform* displayXf, bool doFlatten, double xOffset)
{
clearAllGeometry();
cvf::ref<RivReachCircleAnnotationSourceInfo> sourceInfo = new RivReachCircleAnnotationSourceInfo(m_rimAnnotation);
Vec3d centerPosition = displayXf->transformToDisplayCoord(m_rimAnnotation->centerPoint());
double radius = m_rimAnnotation->radius();
// Circle part
{
int numPoints = 36;
std::vector<Vec3d> points;
for (int i = 0; i < numPoints; i++)
{
double rad = 2 * cvf::PI_D * (double)i / (double)numPoints;
Vec3d pt(centerPosition.x() + cos(rad) * radius, centerPosition.y() + sin(rad) * radius , centerPosition.z());
points.push_back(pt);
}
points.push_back(points.front());
cvf::ref<cvf::DrawableGeo> drawableGeo = RivPolylineGenerator::createLineAlongPolylineDrawable(points);
cvf::ref<cvf::Part> part = new cvf::Part;
part->setDrawable(drawableGeo.p());
caf::MeshEffectGenerator colorEffgen(cvf::Color3f::RED);
cvf::ref<cvf::Effect> eff = colorEffgen.generateUnCachedEffect();
part->setEffect(eff.p());
part->setPriority(RivPartPriority::PartType::MeshLines);
part->setSourceInfo(sourceInfo.p());
m_circlePart = part;
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RivReachCircleAnnotationPartMgr::clearAllGeometry() void RivReachCircleAnnotationPartMgr::clearAllGeometry()
{ {
m_part = nullptr; m_circlePart = nullptr;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -92,68 +110,8 @@ void RivReachCircleAnnotationPartMgr::appendDynamicGeometryPartsToModel(cvf::Mod
if (m_rimAnnotation.isNull()) return; if (m_rimAnnotation.isNull()) return;
if (!validateAnnotation(m_rimAnnotation)) return; if (!validateAnnotation(m_rimAnnotation)) return;
} buildParts(displayXf, false, 0.0);
model->addPart(m_circlePart.p());
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivReachCircleAnnotationPartMgr::appendFlattenedDynamicGeometryPartsToModel(cvf::ModelBasicList* model,
size_t frameIndex,
const caf::DisplayCoordTransform * displayXf,
double xOffset)
{
///////////////////////////////////////////
caf::PdmPointer<RimSimWellInView> m_rimWell;
cvf::ref<cvf::Part> m_wellHeadPipeSurfacePart;
cvf::ref<cvf::Part> m_wellHeadPipeCenterPart;
cvf::ref<cvf::Part> m_wellHeadArrowPart;
cvf::ref<cvf::Part> m_wellHeadLabelPart;
///////////////////////////////////////////
if (m_rimWell.isNull()) return;
if (!viewWithSettings()) return;
if (!m_rimWell->isWellPipeVisible(frameIndex)) return;
//buildParts(displayXf, true, xOffset);
// Always add pipe part of well head
if (m_wellHeadPipeCenterPart.notNull()) model->addPart(m_wellHeadPipeCenterPart.p());
if (m_wellHeadPipeSurfacePart.notNull()) model->addPart(m_wellHeadPipeSurfacePart.p());
if (m_rimWell->showWellLabel() &&
m_wellHeadLabelPart.notNull())
{
model->addPart(m_wellHeadLabelPart.p());
}
if (m_rimWell->showWellHead() &&
m_wellHeadArrowPart.notNull())
{
model->addPart(m_wellHeadArrowPart.p());
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Rim3dView* RivReachCircleAnnotationPartMgr::viewWithSettings()
{
Rim3dView* view = nullptr;
if (m_rimAnnotation) m_rimAnnotation->firstAncestorOrThisOfType(view);
return view;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimAnnotationInViewCollection* RivReachCircleAnnotationPartMgr::annotatationInViewCollection()
{
RimAnnotationInViewCollection* coll = nullptr;
if (m_rimAnnotation) m_rimAnnotation->firstAncestorOrThisOfType(coll);
return coll;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -161,6 +119,5 @@ RimAnnotationInViewCollection* RivReachCircleAnnotationPartMgr::annotatationInVi
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RivReachCircleAnnotationPartMgr::validateAnnotation(const RimReachCircleAnnotation* annotation) const bool RivReachCircleAnnotationPartMgr::validateAnnotation(const RimReachCircleAnnotation* annotation) const
{ {
return false; return m_rimAnnotation->centerPoint() != cvf::Vec3d::ZERO && m_rimAnnotation->radius() > 0.0;
} }

View File

@ -23,6 +23,8 @@
#include "cvfObject.h" #include "cvfObject.h"
#include "cafPdmPointer.h" #include "cafPdmPointer.h"
#include "cvfVector3.h"
namespace cvf namespace cvf
{ {
class Part; class Part;
@ -43,27 +45,20 @@ class RimSimWellInViewCollection;
class RivReachCircleAnnotationPartMgr : public cvf::Object class RivReachCircleAnnotationPartMgr : public cvf::Object
{ {
using Vec3d = cvf::Vec3d;
public: public:
RivReachCircleAnnotationPartMgr( RimReachCircleAnnotation* annotation); RivReachCircleAnnotationPartMgr( RimReachCircleAnnotation* annotation);
~RivReachCircleAnnotationPartMgr() override; ~RivReachCircleAnnotationPartMgr() override;
void appendDynamicGeometryPartsToModel(cvf::ModelBasicList* model, void appendDynamicGeometryPartsToModel(cvf::ModelBasicList* model, const caf::DisplayCoordTransform* displayXf);
const caf::DisplayCoordTransform * displayXf);
void appendFlattenedDynamicGeometryPartsToModel(cvf::ModelBasicList* model,
size_t frameIndex,
const caf::DisplayCoordTransform * displayXf,
double xOffset);
private: private:
void buildParts(const caf::DisplayCoordTransform* displayXf, bool doFlatten, double xOffset);
void clearAllGeometry(); void clearAllGeometry();
Rim3dView* viewWithSettings();
RimAnnotationInViewCollection* annotatationInViewCollection();
bool validateAnnotation(const RimReachCircleAnnotation* annotation) const; bool validateAnnotation(const RimReachCircleAnnotation* annotation) const;
caf::PdmPointer<RimReachCircleAnnotation> m_rimAnnotation; caf::PdmPointer<RimReachCircleAnnotation> m_rimAnnotation;
cvf::ref< cvf::Part > m_part; cvf::ref<cvf::Part> m_circlePart;
}; };

View File

@ -25,36 +25,20 @@
#include "RiaApplication.h" #include "RiaApplication.h"
#include "RiaPreferences.h" #include "RiaPreferences.h"
#include "RigActiveCellInfo.h"
#include "RigCell.h"
#include "RigEclipseCaseData.h"
#include "RigMainGrid.h"
#include "RigSimWellData.h"
#include "RimTextAnnotation.h" #include "RimTextAnnotation.h"
#include "RimAnnotationInViewCollection.h"
#include "RimEclipseCase.h"
#include "RimEclipseView.h"
#include "RimSimWellInViewCollection.h"
#include "RimSimWellInView.h"
#include "RivPipeGeometryGenerator.h"
#include "RivPolylineGenerator.h" #include "RivPolylineGenerator.h"
#include "RivPartPriority.h" #include "RivPartPriority.h"
#include "RivTextAnnotationSourceInfo.h" #include "RivTextAnnotationSourceInfo.h"
#include "cafEffectGenerator.h" #include "cafEffectGenerator.h"
#include "cvfArrowGenerator.h"
#include "cvfDrawableGeo.h" #include "cvfDrawableGeo.h"
#include "cvfDrawableText.h" #include "cvfDrawableText.h"
#include "cvfGeometryBuilderFaceList.h"
#include "cvfModelBasicList.h" #include "cvfModelBasicList.h"
#include "cvfPart.h" #include "cvfPart.h"
#include "cvfTransform.h"
#include "cvfqtUtils.h" #include "cvfqtUtils.h"
#include "cafDisplayCoordTransform.h" #include "cafDisplayCoordTransform.h"
#include "RivSectionFlattner.h"
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -683,6 +683,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
else if (dynamic_cast<RimAnnotationCollection*>(uiItem)) else if (dynamic_cast<RimAnnotationCollection*>(uiItem))
{ {
menuBuilder << "RicNewTextAnnotationFeature"; menuBuilder << "RicNewTextAnnotationFeature";
menuBuilder << "RicNewReachCircleAnnotationFeature";
menuBuilder << "RicNewPolygonAnnotationFeature"; menuBuilder << "RicNewPolygonAnnotationFeature";
} }

View File

@ -76,9 +76,9 @@ RimReachCircleAnnotation::RimReachCircleAnnotation()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimReachCircleAnnotation::setRadius(double radius) cvf::Vec3d RimReachCircleAnnotation::centerPoint() const
{ {
m_radius = radius; return m_centerPoint;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -54,7 +54,7 @@ class RimReachCircleAnnotation : public caf::PdmObject
public: public:
RimReachCircleAnnotation(); RimReachCircleAnnotation();
void setRadius(double radius); Vec3d centerPoint() const;
double radius() const; double radius() const;
protected: protected: