mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-27 07:30:20 -05:00
Add a "Show Intersection Geometry" checkbox to RimExtrudedCurveIntersection that controls visibility of intersection faces and mesh lines independently from the surface intersection bands and curves. When unchecked, the intersection geometry is hidden but bands and curves continue to display based on their individual checked states. Fixes #13466.
222 lines
8.6 KiB
C++
222 lines
8.6 KiB
C++
/////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) 2015- Statoil ASA
|
|
// Copyright (C) 2015- Ceetron Solutions AS
|
|
//
|
|
// ResInsight is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
// FITNESS FOR A PARTICULAR PURPOSE.
|
|
//
|
|
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
|
|
// for more details.
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#pragma once
|
|
|
|
#include "RimIntersection.h"
|
|
|
|
#include "RimIntersectionEnums.h"
|
|
|
|
#include "cafPdmChildField.h"
|
|
#include "cafPdmFieldCvfVec3d.h"
|
|
#include "cafPdmProxyValueField.h"
|
|
|
|
#include "cvfVector3.h"
|
|
|
|
class RimWellPath;
|
|
class RivExtrudedCurveIntersectionPartMgr;
|
|
class RimEclipseView;
|
|
class RimIntersectionResultDefinition;
|
|
class RimSimWellInView;
|
|
class RimSimWellInViewCollection;
|
|
class Rim2dIntersectionView;
|
|
class RimSurface;
|
|
class RimSurfaceCollection;
|
|
class RimSurfaceIntersectionCollection;
|
|
class RimSurfaceIntersectionCurve;
|
|
class RimSurfaceIntersectionBand;
|
|
class RimPolygon;
|
|
|
|
namespace caf
|
|
{
|
|
class PdmUiListEditorAttribute;
|
|
class PdmUiPushButtonEditorAttribute;
|
|
} // namespace caf
|
|
|
|
//==================================================================================================
|
|
//
|
|
//
|
|
//
|
|
//==================================================================================================
|
|
class RimExtrudedCurveIntersection : public RimIntersection
|
|
{
|
|
CAF_PDM_HEADER_INIT;
|
|
|
|
public:
|
|
enum class CrossSectionEnum
|
|
{
|
|
CS_WELL_PATH,
|
|
CS_SIMULATION_WELL,
|
|
CS_POLYLINE,
|
|
CS_AZIMUTHLINE,
|
|
CS_POLYGON,
|
|
};
|
|
|
|
enum class CrossSectionDirEnum
|
|
{
|
|
CS_VERTICAL,
|
|
CS_HORIZONTAL,
|
|
CS_TWO_POINTS,
|
|
};
|
|
|
|
public:
|
|
RimExtrudedCurveIntersection();
|
|
~RimExtrudedCurveIntersection() override;
|
|
|
|
QString name() const override;
|
|
void setName( const QString& newName );
|
|
|
|
double upperFilterDepth( double upperGridLimit ) const;
|
|
double lowerFilterDepth( double lowerGridLimit ) const;
|
|
RimIntersectionFilterEnum depthFilterType() const;
|
|
|
|
bool kLayerFilterEnabled() const;
|
|
QString kFilterText() const;
|
|
void setKFilterOverride( bool collectionOverride, QString kFilterText );
|
|
|
|
void setDepthOverride( bool collectionOverride );
|
|
void setDepthOverrideParameters( double upperThreshold, double lowerThreshold, RimIntersectionFilterEnum filterType );
|
|
|
|
RimExtrudedCurveIntersection::CrossSectionEnum type() const;
|
|
RimExtrudedCurveIntersection::CrossSectionDirEnum direction() const;
|
|
|
|
RimWellPath* wellPath() const;
|
|
RimSimWellInView* simulationWell() const;
|
|
bool inputPolyLineFromViewerEnabled() const;
|
|
bool inputExtrusionPointsFromViewerEnabled() const;
|
|
bool inputTwoAzimuthPointsFromViewerEnabled() const;
|
|
|
|
void configureForSimulationWell( RimSimWellInView* simWell );
|
|
void configureForWellPath( RimWellPath* wellPath );
|
|
void configureForPolyLine();
|
|
void configureForProjectPolyLine( RimPolygon* polygon );
|
|
void configureForAzimuthLine();
|
|
|
|
std::vector<std::vector<cvf::Vec3d>> polyLines( cvf::Vec3d* flattenedPolylineStartPoint = nullptr ) const;
|
|
void appendPointToPolyLine( const cvf::Vec3d& pointXyz );
|
|
|
|
Rim2dIntersectionView* correspondingIntersectionView() const;
|
|
RivExtrudedCurveIntersectionPartMgr* intersectionPartMgr();
|
|
void clearGeometry();
|
|
const RivIntersectionGeometryGeneratorInterface* intersectionGeometryGenerator() const override;
|
|
|
|
std::vector<cvf::Vec3d> polyLinesForExtrusionDirection() const;
|
|
void appendPointToExtrusionDirection( const cvf::Vec3d& point );
|
|
|
|
void appendPointToAzimuthLine( const cvf::Vec3d& point );
|
|
|
|
cvf::Vec3d extrusionDirection() const;
|
|
double lengthUp() const;
|
|
double lengthDown() const;
|
|
void setLengthUp( double heightUp );
|
|
void setLengthDown( double heightDown );
|
|
double extentLength();
|
|
bool hasDefiningPoints() const;
|
|
|
|
std::vector<RimSurfaceIntersectionCurve*> surfaceIntersectionCurves() const;
|
|
std::vector<RimSurfaceIntersectionBand*> surfaceIntersectionBands() const;
|
|
RimSurfaceIntersectionCurve* addIntersectionCurve();
|
|
RimSurfaceIntersectionBand* addIntersectionBand();
|
|
|
|
bool showIntersectionGeometry() const;
|
|
|
|
int branchIndex() const;
|
|
void rebuildGeometryAndScheduleCreateDisplayModel();
|
|
|
|
private:
|
|
caf::PdmFieldHandle* userDescriptionField() final;
|
|
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
|
|
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
|
|
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
|
|
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
|
|
|
|
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
|
|
|
|
static void setPushButtonText( bool buttonEnable, caf::PdmUiPushButtonEditorAttribute* attribute );
|
|
static void setBaseColor( bool enable, caf::PdmUiListEditorAttribute* attribute );
|
|
|
|
RimSimWellInViewCollection* simulationWellCollection() const;
|
|
void updateAzimuthLine();
|
|
void addExtents( std::vector<cvf::Vec3d>& polyLine ) const;
|
|
void updateName();
|
|
static double azimuthInRadians( cvf::Vec3d vec );
|
|
|
|
void appendOptionItemsForSources( int currentLevel, RimSurfaceCollection* currentCollection, QList<caf::PdmOptionItemInfo>& options ) const;
|
|
|
|
void onSurfaceIntersectionsChanged( const caf::SignalEmitter* emitter );
|
|
|
|
std::vector<cvf::Vec3d> pointsXYD() const;
|
|
void setPointsFromXYD( const std::vector<cvf::Vec3d>& pointsXYD );
|
|
|
|
RimEclipseView* eclipseView() const;
|
|
|
|
std::vector<std::vector<cvf::Vec3d>> simulationWellBranchCenterlines() const;
|
|
|
|
private:
|
|
caf::PdmField<QString> m_name;
|
|
caf::PdmField<bool> m_showIntersectionGeometry;
|
|
|
|
caf::PdmField<caf::AppEnum<RimIntersectionFilterEnum>> m_depthFilterType;
|
|
caf::PdmField<double> m_depthUpperThreshold;
|
|
caf::PdmField<double> m_depthLowerThreshold;
|
|
|
|
caf::PdmField<bool> m_depthThresholdOverridden;
|
|
caf::PdmField<double> m_collectionUpperThreshold;
|
|
caf::PdmField<double> m_collectionLowerThreshold;
|
|
caf::PdmField<caf::AppEnum<RimIntersectionFilterEnum>> m_collectionDepthFilterType;
|
|
|
|
caf::PdmField<caf::AppEnum<CrossSectionEnum>> m_type;
|
|
caf::PdmField<caf::AppEnum<CrossSectionDirEnum>> m_direction;
|
|
|
|
caf::PdmPtrField<RimWellPath*> m_wellPath;
|
|
caf::PdmPtrField<RimSimWellInView*> m_simulationWell;
|
|
|
|
caf::PdmPtrField<RimPolygon*> m_projectPolygon;
|
|
caf::PdmField<bool> m_editPolygonButton;
|
|
|
|
caf::PdmField<bool> m_inputPolylineFromViewerEnabled;
|
|
caf::PdmField<bool> m_inputExtrusionPointsFromViewerEnabled;
|
|
caf::PdmField<bool> m_inputTwoAzimuthPointsFromViewerEnabled;
|
|
|
|
caf::PdmField<int> m_branchIndex;
|
|
caf::PdmField<double> m_extentLength;
|
|
caf::PdmField<double> m_azimuthAngle;
|
|
caf::PdmField<double> m_dipAngle;
|
|
caf::PdmField<double> m_lengthUp;
|
|
caf::PdmField<double> m_lengthDown;
|
|
|
|
caf::PdmProxyValueField<std::vector<cvf::Vec3d>> m_userPolylineXydForUi;
|
|
|
|
caf::PdmField<std::vector<cvf::Vec3d>> m_userPolylineXyz;
|
|
caf::PdmField<std::vector<cvf::Vec3d>> m_customExtrusionPoints;
|
|
caf::PdmField<std::vector<cvf::Vec3d>> m_twoAzimuthPoints;
|
|
|
|
caf::PdmChildField<RimSurfaceIntersectionCollection*> m_surfaceIntersections;
|
|
|
|
cvf::ref<RivExtrudedCurveIntersectionPartMgr> m_crossSectionPartMgr;
|
|
|
|
std::vector<std::vector<cvf::Vec3d>> m_simulationWellBranchCenterlines;
|
|
|
|
caf::PdmField<bool> m_enableKFilter;
|
|
caf::PdmField<QString> m_kFilterText;
|
|
|
|
caf::PdmField<bool> m_kFilterCollectionOverride;
|
|
caf::PdmField<QString> m_kFilterCollectionText;
|
|
};
|