///////////////////////////////////////////////////////////////////////////////// // // 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 // for more details. // ///////////////////////////////////////////////////////////////////////////////// #pragma once #include "RimIntersection.h" #include "RimIntersectionEnums.h" #include "cafPdmChildField.h" #include "cafPdmProxyValueField.h" #include class RimWellPath; class RivExtrudedCurveIntersectionPartMgr; class RimEclipseView; class RimIntersectionResultDefinition; class RimSimWellInView; class RimSimWellInViewCollection; class Rim2dIntersectionView; class RimSurface; class RimSurfaceCollection; class RimSurfaceIntersectionCollection; class RimSurfaceIntersectionCurve; class RimSurfaceIntersectionBand; 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 }; 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 configureForAzimuthLine(); std::vector> 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 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(); void recomputeSimulationWellBranchData(); bool hasDefiningPoints() const; std::vector surfaceIntersectionCurves() const; std::vector surfaceIntersectionBands() const; RimSurfaceIntersectionCurve* addIntersectionCurve(); RimSurfaceIntersectionBand* addIntersectionBand(); int branchIndex() const; void rebuildGeometryAndScheduleCreateDisplayModel(); protected: 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 calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override; private: static void setPushButtonText( bool buttonEnable, caf::PdmUiPushButtonEditorAttribute* attribute ); static void setBaseColor( bool enable, caf::PdmUiListEditorAttribute* attribute ); RimSimWellInViewCollection* simulationWellCollection() const; void updateAzimuthLine(); void updateSimulationWellCenterline() const; void addExtents( std::vector& polyLine ) const; void updateName(); static double azimuthInRadians( cvf::Vec3d vec ); void appendOptionItemsForSources( int currentLevel, RimSurfaceCollection* currentCollection, QList& options ) const; void onSurfaceIntersectionsChanged( const caf::SignalEmitter* emitter ); std::vector pointsXYD() const; void setPointsFromXYD( const std::vector& pointsXYD ); RimEclipseView* eclipseView() const; private: caf::PdmField m_name; caf::PdmField> m_depthFilterType; caf::PdmField m_depthUpperThreshold; caf::PdmField m_depthLowerThreshold; caf::PdmField m_depthThresholdOverridden; caf::PdmField m_collectionUpperThreshold; caf::PdmField m_collectionLowerThreshold; caf::PdmField> m_collectionDepthFilterType; caf::PdmField> m_type; caf::PdmField> m_direction; caf::PdmPtrField m_wellPath; caf::PdmPtrField m_simulationWell; caf::PdmField m_inputPolylineFromViewerEnabled; caf::PdmField m_inputExtrusionPointsFromViewerEnabled; caf::PdmField m_inputTwoAzimuthPointsFromViewerEnabled; caf::PdmField m_branchIndex; caf::PdmField m_extentLength; caf::PdmField m_azimuthAngle; caf::PdmField m_dipAngle; caf::PdmField m_lengthUp; caf::PdmField m_lengthDown; caf::PdmProxyValueField> m_userPolylineXydForUi; caf::PdmField> m_userPolylineXyz; caf::PdmField> m_customExtrusionPoints; caf::PdmField> m_twoAzimuthPoints; caf::PdmChildField m_surfaceIntersections; cvf::ref m_crossSectionPartMgr; mutable std::vector> m_simulationWellBranchCenterlines; caf::PdmField m_enableKFilter; caf::PdmField m_kFilterText; caf::PdmField m_kFilterCollectionOverride; caf::PdmField m_kFilterCollectionText; };