mirror of
				https://github.com/OPM/ResInsight.git
				synced 2025-02-25 18:55:39 -06:00 
			
		
		
		
	#2333 Add flattened intersectino geometry. Some view modifications to move towards a final 2D view experience
This commit is contained in:
		| @@ -42,20 +42,6 @@ bool RicNewIntersectionViewFeature::isCommandEnabled() | ||||
|     return !objects.empty(); | ||||
| } | ||||
|  | ||||
| Rim2dIntersectionView* correspondingIntersectionView(RimIntersection* intersection) | ||||
| { | ||||
|     std::vector<caf::PdmObjectHandle*> objects; | ||||
|  | ||||
|     intersection->objectsWithReferringPtrFields(objects); | ||||
|     Rim2dIntersectionView* isectView = nullptr; | ||||
|     for (auto obj : objects) | ||||
|     { | ||||
|         isectView = dynamic_cast<Rim2dIntersectionView*>(obj); | ||||
|         if (isectView) break; | ||||
|     } | ||||
|     return isectView; | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| /// | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -81,7 +67,7 @@ void RicNewIntersectionViewFeature::onActionTriggered(bool isChecked) | ||||
|                 QMessageBox::warning(RiuMainWindow::instance(), "New Intersection View", text); | ||||
|             } | ||||
|  | ||||
|             Rim2dIntersectionView* intersectionView = correspondingIntersectionView(intersection); | ||||
|             Rim2dIntersectionView* intersectionView = intersection->correspondingIntersectionView(); | ||||
|             intersectionView->setVisible(true); | ||||
|             intersectionView->loadDataAndUpdate(); | ||||
|  | ||||
|   | ||||
| @@ -34,22 +34,27 @@ | ||||
| #include "cvfPrimitiveSetDirect.h" | ||||
| #include "cvfPrimitiveSetIndexedUInt.h" | ||||
| #include "cvfScalarMapper.h" | ||||
| #include "cvfRay.h" | ||||
|  | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| /// isFlattened means to transform each flat section of the intersection onto the XZ plane | ||||
| /// placed adjacent to each other as if they were rotated around the common extrusion line like a hinge  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| RivIntersectionGeometryGenerator::RivIntersectionGeometryGenerator( RimIntersection* crossSection, | ||||
|                                                                     std::vector<std::vector<cvf::Vec3d> > &polylines,  | ||||
|                                                                     const cvf::Vec3d& extrusionDirection,  | ||||
|                                                                     const RivIntersectionHexGridInterface* grid) | ||||
|                                                                     const RivIntersectionHexGridInterface* grid, | ||||
|                                                                     bool isFlattened) | ||||
|                                                                    : m_crossSection(crossSection), | ||||
|                                                                    m_polyLines(polylines),  | ||||
|                                                                    m_extrusionDirection(extrusionDirection),  | ||||
|                                                                    m_hexGrid(grid) | ||||
|                                                                    m_hexGrid(grid), | ||||
|                                                                    m_isFlattened(isFlattened) | ||||
| { | ||||
|     m_triangleVxes = new cvf::Vec3fArray; | ||||
|     m_cellBorderLineVxes = new cvf::Vec3fArray; | ||||
|     if (m_isFlattened) m_extrusionDirection = -cvf::Vec3d::Z_AXIS; | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -60,6 +65,41 @@ RivIntersectionGeometryGenerator::~RivIntersectionGeometryGenerator() | ||||
|  | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| /// Origo in the intersection of the ray P1-ExtrDir with the XY plane | ||||
| /// Ez in upwards extrusionDir | ||||
| /// Ey normal tio the section pplane | ||||
| /// Ex in plane along p1-p2 | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| cvf::Mat4d calculateSectionLocalFlatteningCS(const cvf::Vec3d& p1, const cvf::Vec3d& p2, const cvf::Vec3d& extrusionDir) | ||||
| { | ||||
|     using namespace cvf; | ||||
|  | ||||
|     Vec3d Ez = extrusionDir.z() > 0.0 ? extrusionDir: -extrusionDir; | ||||
|  | ||||
|     Vec3d sectionLineDir = p2 - p1; | ||||
|     sectionLineDir.normalize(); | ||||
|  | ||||
|     Vec3d Ey = Ez ^ sectionLineDir; | ||||
|     Vec3d Ex = Ey ^ Ez; | ||||
|  | ||||
|     Ray extrusionRay;  | ||||
|     extrusionRay.setOrigin(p1); | ||||
|  | ||||
|     if (p1.z() > 0) extrusionRay.setDirection(-Ez); | ||||
|     else extrusionRay.setDirection(Ez); | ||||
|  | ||||
|  | ||||
|     Vec3d tr(Vec3d::ZERO); | ||||
|     extrusionRay.planeIntersect(Plane(0.0, 0.0 , 1.0, 0.0), &tr); | ||||
|  | ||||
|     return Mat4d(Ex[0], Ey[0], Ez[0], tr[0], | ||||
|                  Ex[1], Ey[1], Ez[1], tr[1], | ||||
|                  Ex[2], Ey[2], Ez[2], tr[2], | ||||
|                  0.0,   0.0,    0.0, 1.0); | ||||
| } | ||||
|  | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -73,6 +113,9 @@ void RivIntersectionGeometryGenerator::calculateArrays() | ||||
|     cvf::Vec3d displayOffset = m_hexGrid->displayOffset(); | ||||
|     cvf::BoundingBox gridBBox = m_hexGrid->boundingBox(); | ||||
|  | ||||
|     double previousSectionFlattenedEndPosX = 0.0; | ||||
|     cvf::Vec3d previousSectionOrigo(cvf::Vec3d::ZERO); | ||||
|  | ||||
|     for (size_t pLineIdx = 0; pLineIdx < m_polyLines.size(); ++pLineIdx) | ||||
|     { | ||||
|         const std::vector<cvf::Vec3d>& m_polyLine = m_polyLines[pLineIdx]; | ||||
| @@ -88,6 +131,11 @@ void RivIntersectionGeometryGenerator::calculateArrays() | ||||
|             cvf::Vec3d p1 = m_adjustedPolyline[lIdx]; | ||||
|             cvf::Vec3d p2 = m_adjustedPolyline[lIdx+1]; | ||||
|  | ||||
|             cvf::Mat4d sectionLocalCS = calculateSectionLocalFlatteningCS(p1, p2, m_extrusionDirection); | ||||
|             if (pLineIdx == 0 && lIdx == 0) previousSectionOrigo = sectionLocalCS.translation(); | ||||
|             previousSectionFlattenedEndPosX += (sectionLocalCS.translation() - previousSectionOrigo).length(); | ||||
|             previousSectionOrigo = sectionLocalCS.translation(); | ||||
|  | ||||
|             cvf::BoundingBox sectionBBox; | ||||
|             sectionBBox.add(p1); | ||||
|             sectionBBox.add(p2); | ||||
| @@ -196,8 +244,12 @@ void RivIntersectionGeometryGenerator::calculateArrays() | ||||
|                 std::vector<caf::HexGridIntersectionTools::ClipVx> clippedTriangleVxes; | ||||
|                 std::vector<bool> isClippedTriEdgeCellContour; | ||||
|  | ||||
|                 caf::HexGridIntersectionTools::clipTrianglesBetweenTwoParallelPlanes(hexPlaneCutTriangleVxes, isTriangleEdgeCellContour, p1Plane, p2Plane, | ||||
|                                                       &clippedTriangleVxes, &isClippedTriEdgeCellContour); | ||||
|                 caf::HexGridIntersectionTools::clipTrianglesBetweenTwoParallelPlanes(hexPlaneCutTriangleVxes,  | ||||
|                                                                                      isTriangleEdgeCellContour,  | ||||
|                                                                                      p1Plane,  | ||||
|                                                                                      p2Plane, | ||||
|                                                                                      &clippedTriangleVxes,  | ||||
|                                                                                      &isClippedTriEdgeCellContour); | ||||
|  | ||||
|                 size_t clippedTriangleCount = clippedTriangleVxes.size()/3; | ||||
|  | ||||
| @@ -206,32 +258,47 @@ void RivIntersectionGeometryGenerator::calculateArrays() | ||||
|                     uint triVxIdx = tIdx*3; | ||||
|  | ||||
|                     // Accumulate triangle vertices | ||||
|                     cvf::Vec3d p0(clippedTriangleVxes[triVxIdx+0].vx); | ||||
|                     cvf::Vec3d p1(clippedTriangleVxes[triVxIdx+1].vx); | ||||
|                     cvf::Vec3d p2(clippedTriangleVxes[triVxIdx+2].vx); | ||||
|  | ||||
|                     cvf::Vec3f p0(clippedTriangleVxes[triVxIdx+0].vx - displayOffset); | ||||
|                     cvf::Vec3f p1(clippedTriangleVxes[triVxIdx+1].vx - displayOffset); | ||||
|                     cvf::Vec3f p2(clippedTriangleVxes[triVxIdx+2].vx - displayOffset); | ||||
|                     if (m_isFlattened) | ||||
|                     { | ||||
|                         cvf::Mat4d invSectionCS = sectionLocalCS.getInverted(); | ||||
|                         cvf::Vec3d flattenedTranslation(previousSectionFlattenedEndPosX, 0.0,0.0); | ||||
|  | ||||
|                     triangleVertices.push_back(p0); | ||||
|                     triangleVertices.push_back(p1); | ||||
|                     triangleVertices.push_back(p2); | ||||
|                         p0 = p0.getTransformedPoint(invSectionCS) + flattenedTranslation - displayOffset; | ||||
|                         p1 = p1.getTransformedPoint(invSectionCS) + flattenedTranslation - displayOffset; | ||||
|                         p2 = p2.getTransformedPoint(invSectionCS) + flattenedTranslation - displayOffset; | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         p0 -= displayOffset; | ||||
|                         p1 -= displayOffset; | ||||
|                         p2 -= displayOffset; | ||||
|                     } | ||||
|  | ||||
|                     triangleVertices.emplace_back(p0); | ||||
|                     triangleVertices.emplace_back(p1); | ||||
|                     triangleVertices.emplace_back(p2); | ||||
|  | ||||
|  | ||||
|                     // Accumulate mesh lines | ||||
|  | ||||
|                     if (isClippedTriEdgeCellContour[triVxIdx]) | ||||
|                     { | ||||
|                         cellBorderLineVxes.push_back(p0); | ||||
|                         cellBorderLineVxes.push_back(p1); | ||||
|                         cellBorderLineVxes.emplace_back(p0); | ||||
|                         cellBorderLineVxes.emplace_back(p1); | ||||
|                     } | ||||
|                     if (isClippedTriEdgeCellContour[triVxIdx+1]) | ||||
|                     { | ||||
|                         cellBorderLineVxes.push_back(p1); | ||||
|                         cellBorderLineVxes.push_back(p2); | ||||
|                         cellBorderLineVxes.emplace_back(p1); | ||||
|                         cellBorderLineVxes.emplace_back(p2); | ||||
|                     } | ||||
|                     if (isClippedTriEdgeCellContour[triVxIdx+2]) | ||||
|                     { | ||||
|                         cellBorderLineVxes.push_back(p2); | ||||
|                         cellBorderLineVxes.push_back(p0); | ||||
|                         cellBorderLineVxes.emplace_back(p2); | ||||
|                         cellBorderLineVxes.emplace_back(p0); | ||||
|                     } | ||||
|  | ||||
|                     // Mapping to cell index | ||||
| @@ -267,7 +334,6 @@ void RivIntersectionGeometryGenerator::calculateArrays() | ||||
|     m_cellBorderLineVxes->assign(cellBorderLineVxes); | ||||
| } | ||||
|  | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| /// Generate surface drawable geo from the specified region | ||||
| ///  | ||||
|   | ||||
| @@ -49,7 +49,8 @@ public: | ||||
|     RivIntersectionGeometryGenerator(RimIntersection* crossSection, | ||||
|                                      std::vector<std::vector<cvf::Vec3d> > &polylines,  | ||||
|                                      const cvf::Vec3d& extrusionDirection,  | ||||
|                                      const RivIntersectionHexGridInterface* grid ); | ||||
|                                      const RivIntersectionHexGridInterface* grid, | ||||
|                                      bool isFlattened ); | ||||
|  | ||||
|     ~RivIntersectionGeometryGenerator(); | ||||
|  | ||||
| @@ -81,6 +82,7 @@ private: | ||||
|     cvf::cref<RivIntersectionHexGridInterface>      m_hexGrid; | ||||
|     const std::vector<std::vector<cvf::Vec3d> >     m_polyLines; | ||||
|     cvf::Vec3d                  m_extrusionDirection; | ||||
|     bool                        m_isFlattened; | ||||
|  | ||||
|     // Output arrays | ||||
|     cvf::ref<cvf::Vec3fArray>   m_triangleVxes; | ||||
|   | ||||
| @@ -63,9 +63,10 @@ | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| RivIntersectionPartMgr::RivIntersectionPartMgr(RimIntersection* rimCrossSection) | ||||
| RivIntersectionPartMgr::RivIntersectionPartMgr(RimIntersection* rimCrossSection, bool isFlattened) | ||||
|     : m_rimCrossSection(rimCrossSection), | ||||
|     m_defaultColor(cvf::Color3::WHITE) | ||||
|     m_defaultColor(cvf::Color3::WHITE), | ||||
|     m_isFlattened(isFlattened) | ||||
| { | ||||
|     CVF_ASSERT(m_rimCrossSection); | ||||
|  | ||||
| @@ -790,6 +791,14 @@ void RivIntersectionPartMgr::appendPolylinePartsToModel(cvf::ModelBasicList* mod | ||||
|     } | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| const RimIntersection* RivIntersectionPartMgr::intersection() const | ||||
| { | ||||
|     return m_rimCrossSection.p(); | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -800,7 +809,7 @@ void RivIntersectionPartMgr::computeData() | ||||
|     { | ||||
|         cvf::Vec3d direction = m_rimCrossSection->extrusionDirection(); | ||||
|         cvf::ref<RivIntersectionHexGridInterface> hexGrid = createHexGridInterface(); | ||||
|         m_crossSectionGenerator = new RivIntersectionGeometryGenerator(m_rimCrossSection, polyLines, direction, hexGrid.p()); | ||||
|         m_crossSectionGenerator = new RivIntersectionGeometryGenerator(m_rimCrossSection, polyLines, direction, hexGrid.p(), m_isFlattened); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -24,6 +24,7 @@ | ||||
| #include "cvfColor4.h" | ||||
| #include "cvfVector3.h" | ||||
| #include "cvfArray.h" | ||||
| #include "cafPdmPointer.h" | ||||
|  | ||||
|  | ||||
| namespace cvf | ||||
| @@ -55,7 +56,7 @@ class RivIntersectionVertexWeights; | ||||
| class RivIntersectionPartMgr : public cvf::Object | ||||
| { | ||||
| public: | ||||
|     explicit RivIntersectionPartMgr(RimIntersection* rimCrossSection); | ||||
|     explicit RivIntersectionPartMgr(RimIntersection* rimCrossSection, bool isFlattened = false); | ||||
|  | ||||
|     void applySingleColorEffect(); | ||||
|     void updateCellResultColor(size_t timeStepIndex); | ||||
| @@ -64,6 +65,8 @@ public: | ||||
|     void appendNativeCrossSectionFacesToModel(cvf::ModelBasicList* model, cvf::Transform* scaleTransform); | ||||
|     void appendMeshLinePartsToModel(cvf::ModelBasicList* model, cvf::Transform* scaleTransform); | ||||
|     void appendPolylinePartsToModel(cvf::ModelBasicList* model, cvf::Transform* scaleTransform); | ||||
|      | ||||
|     const RimIntersection* intersection() const; | ||||
|  | ||||
| private: | ||||
|     void updatePartEffect(); | ||||
| @@ -105,10 +108,10 @@ public: | ||||
|                                                  const RigFemResultAddress& resVarAddress,  | ||||
|                                                  const cvf::ScalarMapper* mapper); | ||||
|  | ||||
|     cvf::ref<RivIntersectionHexGridInterface> createHexGridInterface(); | ||||
| private: | ||||
|     cvf::ref<RivIntersectionHexGridInterface> createHexGridInterface(); | ||||
|  | ||||
|     RimIntersection*            m_rimCrossSection; | ||||
|     caf::PdmPointer<RimIntersection> m_rimCrossSection; | ||||
|  | ||||
|     cvf::Color3f                m_defaultColor; | ||||
|  | ||||
| @@ -122,5 +125,7 @@ private: | ||||
|  | ||||
|     cvf::ref<cvf::Part>         m_highlightLineAlongExtrusionDir; | ||||
|     cvf::ref<cvf::Part>         m_highlightPointsForExtrusionDir; | ||||
|  | ||||
|     bool                        m_isFlattened; | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -28,6 +28,12 @@ | ||||
| #include "cvfModelBasicList.h" | ||||
| #include "cvfTransform.h" | ||||
| #include "cvfScene.h" | ||||
| #include "RimEclipseView.h" | ||||
| #include "RimEclipseCellColors.h" | ||||
| #include "RimGeoMechView.h" | ||||
| #include "RimGeoMechCellColors.h" | ||||
|  | ||||
| #include <QDateTime> | ||||
|  | ||||
| CAF_PDM_XML_ABSTRACT_SOURCE_INIT(Rim2dIntersectionView, "Intersection2dView");  | ||||
|  | ||||
| @@ -44,6 +50,16 @@ Rim2dIntersectionView::Rim2dIntersectionView(void) | ||||
|     m_showWindow = false; | ||||
|     m_scaleTransform = new cvf::Transform(); | ||||
|     m_intersectionVizModel = new cvf::ModelBasicList; | ||||
|     hasUserRequestedAnimation = true; | ||||
|      | ||||
|     isPerspectiveView = false; | ||||
|     cvf::Mat4d mx( 1, 0, 0, 0, | ||||
|                    0, 0, 1, 0, | ||||
|                    0, -1, 0, 100,  | ||||
|                    0, 0, 0, 1); | ||||
|  | ||||
|     ((RiuViewerToViewInterface*)this)->setCameraPosition(mx ); | ||||
|     disableGridBox(); | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -67,10 +83,14 @@ void Rim2dIntersectionView::setVisible(bool isVisible) | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| void Rim2dIntersectionView::setIntersection(RimIntersection* intersection) | ||||
| { | ||||
|     CAF_ASSERT(intersection); | ||||
|  | ||||
|     m_intersection = intersection; | ||||
|     Rim3dView * parentView = nullptr; | ||||
|     intersection->firstAncestorOrThisOfTypeAsserted(parentView); | ||||
|     name = parentView->name() + ": " + intersection->name(); | ||||
|  | ||||
|      | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -96,6 +116,7 @@ bool Rim2dIntersectionView::isUsingFormationNames() const | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| void Rim2dIntersectionView::scheduleGeometryRegen(RivCellSetEnum geometryType) | ||||
| { | ||||
|     m_flatIntersectionPartMgr = nullptr; | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -109,6 +130,21 @@ RimCase* Rim2dIntersectionView::ownerCase() const | ||||
| } | ||||
|  | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| bool Rim2dIntersectionView::isTimeStepDependentDataVisible() const | ||||
| { | ||||
|     if ( m_intersection() ) | ||||
|     { | ||||
|         RimGridView * gridView = nullptr; | ||||
|         m_intersection->firstAncestorOrThisOfTypeAsserted(gridView); | ||||
|         return gridView->isTimeStepDependentDataVisible(); | ||||
|     } | ||||
|  | ||||
|     return false; | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -116,21 +152,47 @@ QList<caf::PdmOptionItemInfo> Rim2dIntersectionView::calculateValueOptions(const | ||||
|                                                                            bool* useOptionsOnly) | ||||
| { | ||||
|     QList<caf::PdmOptionItemInfo> options;  | ||||
|     if (fieldNeedingOptions == &m_intersection) | ||||
|     { | ||||
|         std::vector<RimIntersection*> intersections;  | ||||
|           | ||||
|         this->ownerCase()->descendantsIncludingThisOfType(intersections); | ||||
|  | ||||
|         for (auto intersection : intersections) | ||||
|         { | ||||
|             options.push_back(caf::PdmOptionItemInfo(intersection->name(), intersection)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     return options; | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| bool Rim2dIntersectionView::hasResults() | ||||
| { | ||||
|     if (!m_intersection()) return false; | ||||
|  | ||||
|     RimEclipseView * eclView = nullptr; | ||||
|     m_intersection->firstAncestorOrThisOfType(eclView); | ||||
|     if (eclView) | ||||
|     { | ||||
|         return (eclView->cellResult()->hasResult() || eclView->cellResult()->isTernarySaturationSelected()); | ||||
|     } | ||||
|  | ||||
|     RimGeoMechView * geoView = nullptr; | ||||
|     m_intersection->firstAncestorOrThisOfType(geoView); | ||||
|     if (geoView) | ||||
|     { | ||||
|         return geoView->cellResult()->hasResult(); | ||||
|     } | ||||
|  | ||||
|     return false; | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| int Rim2dIntersectionView::timeStepCount() | ||||
| { | ||||
|     if ( isTimeStepDependentDataVisible() ) | ||||
|     { | ||||
|         return static_cast<int>( this->ownerCase()->timeStepDates().size()); | ||||
|     } | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -163,14 +225,37 @@ void Rim2dIntersectionView::createDisplayModel() | ||||
| { | ||||
|     if (m_viewer.isNull()) return; | ||||
|     if (!m_intersection()) return; | ||||
|      | ||||
|  | ||||
|     updateScaleTransform(); | ||||
|  | ||||
|     m_viewer->removeAllFrames(); | ||||
|  | ||||
|     int tsCount = this->timeStepCount(); | ||||
|  | ||||
|     for (int i = 0; i < tsCount; ++i) | ||||
|     { | ||||
|         m_viewer->addFrame(new cvf::Scene()); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     if ( m_flatIntersectionPartMgr.isNull() || m_intersection() != m_flatIntersectionPartMgr->intersection()) | ||||
|     { | ||||
|         m_flatIntersectionPartMgr = new RivIntersectionPartMgr(m_intersection(), true); | ||||
|     } | ||||
|  | ||||
|     m_intersectionVizModel->removeAllParts(); | ||||
|      | ||||
|     m_intersection()->intersectionPartMgr()->appendNativeCrossSectionFacesToModel(m_intersectionVizModel.p(), scaleTransform()); | ||||
|     m_intersection()->intersectionPartMgr()->appendMeshLinePartsToModel(m_intersectionVizModel.p(), scaleTransform()); | ||||
|     m_flatIntersectionPartMgr->appendNativeCrossSectionFacesToModel(m_intersectionVizModel.p(), scaleTransform()); | ||||
|     m_flatIntersectionPartMgr->appendMeshLinePartsToModel(m_intersectionVizModel.p(), scaleTransform()); | ||||
|  | ||||
|     m_flatIntersectionPartMgr->applySingleColorEffect(); | ||||
|  | ||||
|     m_viewer->addStaticModelOnce(m_intersectionVizModel.p()); | ||||
|  | ||||
|     if ( this->hasUserRequestedAnimation() ) | ||||
|     { | ||||
|         m_viewer->setCurrentFrame(m_currentTimeStep); | ||||
|     } | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -180,13 +265,6 @@ void Rim2dIntersectionView::createPartCollectionFromSelection(cvf::Collection<cv | ||||
| { | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| void Rim2dIntersectionView::updateDisplayModelVisibility() | ||||
| { | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -199,6 +277,14 @@ void Rim2dIntersectionView::clampCurrentTimestep() | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| void Rim2dIntersectionView::updateCurrentTimeStep() | ||||
| { | ||||
|     if ((this->hasUserRequestedAnimation() && this->hasResults())) | ||||
|     { | ||||
|         m_flatIntersectionPartMgr->updateCellResultColor(m_currentTimeStep); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_flatIntersectionPartMgr->applySingleColorEffect(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -242,7 +328,10 @@ cvf::Transform* Rim2dIntersectionView::scaleTransform() | ||||
| void Rim2dIntersectionView::resetLegendsInViewer() | ||||
| { | ||||
|     m_viewer->showAxisCross(false); | ||||
|     m_viewer->showAnimationProgress(false); | ||||
|     m_viewer->showAnimationProgress(true); | ||||
|     m_viewer->showHistogram(false); | ||||
|     m_viewer->showInfoText(false); | ||||
|  | ||||
|     m_viewer->setMainScene(new cvf::Scene()); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -22,6 +22,7 @@ | ||||
| #include "cafPdmPtrField.h" | ||||
|  | ||||
| class RimIntersection; | ||||
| class RivIntersectionPartMgr; | ||||
|  | ||||
| namespace cvf | ||||
| { | ||||
| @@ -51,13 +52,13 @@ public: | ||||
|     virtual RimViewLinker*     assosiatedViewLinker() const override { return nullptr; } | ||||
|     virtual RimViewController* viewController() const override   { return nullptr; } | ||||
|  | ||||
| protected: | ||||
|     virtual bool               isTimeStepDependentDataVisible() const override; | ||||
|  | ||||
| protected: | ||||
|  | ||||
|     virtual void               axisLabels(cvf::String* xLabel, cvf::String* yLabel, cvf::String* zLabel) override; | ||||
|     virtual void               createDisplayModel() override; | ||||
|     virtual void               createPartCollectionFromSelection(cvf::Collection<cvf::Part>* parts) override; | ||||
|     virtual void               updateDisplayModelVisibility() override; | ||||
|     virtual void               clampCurrentTimestep() override; | ||||
|     virtual void               updateCurrentTimeStep() override; | ||||
|     virtual void               onTimeStepChanged() override; | ||||
| @@ -72,8 +73,12 @@ protected: | ||||
|     virtual void               defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; | ||||
|     virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override; | ||||
|  | ||||
|     bool                       hasResults(); | ||||
|     int                        timeStepCount(); | ||||
|  | ||||
|     caf::PdmPtrField<RimIntersection*> m_intersection; | ||||
|  | ||||
|     cvf::ref<RivIntersectionPartMgr>   m_flatIntersectionPartMgr; | ||||
|     cvf::ref<cvf::ModelBasicList>      m_intersectionVizModel; | ||||
|     cvf::ref<cvf::Transform>           m_scaleTransform; | ||||
|  | ||||
|   | ||||
| @@ -35,7 +35,6 @@ Rim2dIntersectionViewCollection::Rim2dIntersectionViewCollection() | ||||
|      | ||||
|     CAF_PDM_InitFieldNoDefault(&m_intersectionViews,  "IntersectionViews", "Intersection Views", ":/CrossSection16x16.png", "", ""); | ||||
|     m_intersectionViews.uiCapability()->setUiTreeHidden(true); | ||||
|     //m_intersectionViews.xmlCapability()->setIOWritable(false); // Temporarily until something of value are present. | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
|   | ||||
| @@ -113,7 +113,7 @@ Rim3dView::Rim3dView(void) | ||||
|     CAF_PDM_InitField(&meshMode, "MeshMode", defaultMeshType, "Grid Lines",   "", "", ""); | ||||
|     CAF_PDM_InitFieldNoDefault(&surfaceMode, "SurfaceMode", "Grid Surface",  "", "", ""); | ||||
|  | ||||
|     CAF_PDM_InitField(&showGridBox, "ShowGridBox", true, "Show Grid Box", "", "", ""); | ||||
|     CAF_PDM_InitField(&m_showGridBox, "ShowGridBox", true, "Show Grid Box", "", "", ""); | ||||
|  | ||||
|     CAF_PDM_InitField(&m_disableLighting, "DisableLighting", false, "Disable Results Lighting", "", "Disable light model for scalar result colors", ""); | ||||
|  | ||||
| @@ -234,7 +234,7 @@ void Rim3dView::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrd | ||||
|     caf::PdmUiGroup* viewGroup = uiOrdering.addNewGroup("Viewer"); | ||||
|     viewGroup->add(&name); | ||||
|     viewGroup->add(&m_backgroundColor); | ||||
|     viewGroup->add(&showGridBox); | ||||
|     viewGroup->add(&m_showGridBox); | ||||
|     viewGroup->add(&isPerspectiveView); | ||||
|     viewGroup->add(&m_disableLighting); | ||||
|  | ||||
| @@ -572,7 +572,7 @@ void Rim3dView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const | ||||
|         RiuMainWindow::instance()->refreshDrawStyleActions(); | ||||
|         RiuMainWindow::instance()->refreshAnimationActions(); | ||||
|     } | ||||
|     else if (changedField == &showGridBox) | ||||
|     else if (changedField == &m_showGridBox) | ||||
|     { | ||||
|         createHighlightAndGridBoxDisplayModelWithRedraw(); | ||||
|     } | ||||
| @@ -761,7 +761,48 @@ void Rim3dView::createHighlightAndGridBoxDisplayModel() | ||||
|         m_viewer->addStaticModelOnce(m_highlightVizModel.p()); | ||||
|     } | ||||
|  | ||||
|     m_viewer->showGridBox(showGridBox()); | ||||
|     m_viewer->showGridBox(m_showGridBox()); | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| void Rim3dView::updateDisplayModelVisibility() | ||||
| { | ||||
|     if (m_viewer.isNull()) return; | ||||
|  | ||||
|     const cvf::uint uintSurfaceBit      = surfaceBit; | ||||
|     const cvf::uint uintMeshSurfaceBit  = meshSurfaceBit; | ||||
|     const cvf::uint uintFaultBit        = faultBit; | ||||
|     const cvf::uint uintMeshFaultBit    = meshFaultBit; | ||||
|  | ||||
|     // Initialize the mask to show everything except the the bits controlled here | ||||
|     unsigned int mask = 0xffffffff & ~uintSurfaceBit & ~uintFaultBit & ~uintMeshSurfaceBit & ~uintMeshFaultBit ; | ||||
|  | ||||
|     // Then turn the appropriate bits on according to the user settings | ||||
|  | ||||
|     if (surfaceMode == SURFACE) | ||||
|     { | ||||
|         mask |= uintSurfaceBit; | ||||
|         mask |= uintFaultBit; | ||||
|     } | ||||
|     else if (surfaceMode == FAULTS) | ||||
|     { | ||||
|         mask |= uintFaultBit; | ||||
|     } | ||||
|  | ||||
|     if (meshMode == FULL_MESH) | ||||
|     { | ||||
|         mask |= uintMeshSurfaceBit; | ||||
|         mask |= uintMeshFaultBit; | ||||
|     } | ||||
|     else if (meshMode == FAULTS_MESH) | ||||
|     { | ||||
|         mask |= uintMeshFaultBit; | ||||
|     } | ||||
|  | ||||
|     m_viewer->setEnableMask(mask); | ||||
|     m_viewer->update(); | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -819,6 +860,14 @@ void Rim3dView::forceShowWindowOn() | ||||
|     m_showWindow.setValueWithFieldChanged(true); | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| void Rim3dView::disableGridBox() | ||||
| { | ||||
|     m_showGridBox = false; | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
|   | ||||
| @@ -66,6 +66,17 @@ namespace caf | ||||
| { | ||||
|     class DisplayCoordTransform; | ||||
| } | ||||
|  | ||||
|  | ||||
| enum PartRenderMaskEnum | ||||
| { | ||||
|     surfaceBit      = 0x00000001, | ||||
|     meshSurfaceBit  = 0x00000002, | ||||
|     faultBit        = 0x00000004, | ||||
|     meshFaultBit    = 0x00000008, | ||||
| }; | ||||
|  | ||||
|  | ||||
| //================================================================================================== | ||||
| ///   | ||||
| ///   | ||||
| @@ -118,6 +129,7 @@ public: | ||||
|     int                                     currentTimeStep() const { return m_currentTimeStep;} | ||||
|     void                                    setCurrentTimeStep(int frameIdx); | ||||
|     void                                    setCurrentTimeStepAndUpdate(int frameIdx) override; | ||||
|     virtual bool                            isTimeStepDependentDataVisible() const = 0; | ||||
|  | ||||
|     // Updating  | ||||
|     void                                    updateCurrentTimeStepAndRedraw() override; | ||||
| @@ -135,7 +147,8 @@ public: | ||||
|     virtual RimCase*                        ownerCase() const = 0; | ||||
|  | ||||
| protected: | ||||
|     void                                    setDefaultView(); | ||||
|     virtual void                            setDefaultView(); | ||||
|     void                                    disableGridBox(); | ||||
|  | ||||
|     RimWellPathCollection*                  wellPathCollection(); | ||||
|     void                                    addWellPathsToModel(cvf::ModelBasicList* wellPathModelBasicList,  | ||||
| @@ -153,7 +166,7 @@ protected: | ||||
|     virtual void                            createDisplayModel() = 0; | ||||
|     virtual void                            createPartCollectionFromSelection(cvf::Collection<cvf::Part>* parts) = 0; | ||||
|      | ||||
|     virtual void                            updateDisplayModelVisibility() = 0; | ||||
|     virtual void                            updateDisplayModelVisibility(); | ||||
|     virtual void                            clampCurrentTimestep() = 0; | ||||
|  | ||||
|     virtual void                            updateCurrentTimeStep() = 0; | ||||
| @@ -209,6 +222,6 @@ private: | ||||
|     caf::PdmField<cvf::Mat4d>               m_cameraPosition; | ||||
|     caf::PdmField<cvf::Vec3d>               m_cameraPointOfInterest; | ||||
|     caf::PdmField< cvf::Color3f >           m_backgroundColor; | ||||
|     caf::PdmField<bool>                     showGridBox; | ||||
|     caf::PdmField<bool>                     m_showGridBox; | ||||
|  | ||||
| }; | ||||
|   | ||||
| @@ -875,40 +875,7 @@ void RimEclipseView::updateStaticCellColors(RivCellSetEnum geometryType) | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| void RimEclipseView::updateDisplayModelVisibility() | ||||
| { | ||||
|     if (m_viewer.isNull()) return; | ||||
|  | ||||
|     const cvf::uint uintSurfaceBit      = surfaceBit; | ||||
|     const cvf::uint uintMeshSurfaceBit  = meshSurfaceBit; | ||||
|     const cvf::uint uintFaultBit        = faultBit; | ||||
|     const cvf::uint uintMeshFaultBit    = meshFaultBit; | ||||
|   | ||||
|     // Initialize the mask to show everything except the the bits controlled here | ||||
|     unsigned int mask = 0xffffffff & ~uintSurfaceBit & ~uintFaultBit & ~uintMeshSurfaceBit & ~uintMeshFaultBit ; | ||||
|  | ||||
|     // Then turn the appropriate bits on according to the user settings | ||||
|  | ||||
|     if (surfaceMode == SURFACE) | ||||
|     { | ||||
|          mask |= uintSurfaceBit; | ||||
|          mask |= uintFaultBit; | ||||
|     } | ||||
|     else if (surfaceMode == FAULTS) | ||||
|     { | ||||
|         mask |= uintFaultBit; | ||||
|     } | ||||
|  | ||||
|     if (meshMode == FULL_MESH) | ||||
|     { | ||||
|         mask |= uintMeshSurfaceBit; | ||||
|         mask |= uintMeshFaultBit; | ||||
|     } | ||||
|     else if (meshMode == FAULTS_MESH) | ||||
|     { | ||||
|         mask |= uintMeshFaultBit; | ||||
|     } | ||||
|  | ||||
|     m_viewer->setEnableMask(mask); | ||||
|     m_viewer->update(); | ||||
|     Rim3dView::updateDisplayModelVisibility(); | ||||
|  | ||||
|     faultCollection->updateConnectedEditors(); | ||||
|  | ||||
|   | ||||
| @@ -69,14 +69,6 @@ namespace cvf | ||||
|     class OverlayItem; | ||||
| } | ||||
|  | ||||
| enum PartRenderMaskEnum | ||||
| { | ||||
|     surfaceBit      = 0x00000001, | ||||
|     meshSurfaceBit  = 0x00000002, | ||||
|     faultBit        = 0x00000004, | ||||
|     meshFaultBit    = 0x00000008, | ||||
| }; | ||||
|  | ||||
| //================================================================================================== | ||||
| ///   | ||||
| ///   | ||||
|   | ||||
| @@ -317,46 +317,6 @@ void RimGeoMechView::updateStaticCellColors() | ||||
|     m_vizLogic->updateStaticCellColors(-1); | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| void RimGeoMechView::updateDisplayModelVisibility() | ||||
| { | ||||
|     if (m_viewer.isNull()) return; | ||||
|  | ||||
|     const cvf::uint uintSurfaceBit      = surfaceBit; | ||||
|     const cvf::uint uintMeshSurfaceBit  = meshSurfaceBit; | ||||
|     const cvf::uint uintFaultBit        = faultBit; | ||||
|     const cvf::uint uintMeshFaultBit    = meshFaultBit; | ||||
|   | ||||
|     // Initialize the mask to show everything except the the bits controlled here | ||||
|     unsigned int mask = 0xffffffff & ~uintSurfaceBit & ~uintFaultBit & ~uintMeshSurfaceBit & ~uintMeshFaultBit ; | ||||
|  | ||||
|     // Then turn the appropriate bits on according to the user settings | ||||
|  | ||||
|     if (surfaceMode == SURFACE) | ||||
|     { | ||||
|          mask |= uintSurfaceBit; | ||||
|          mask |= uintFaultBit; | ||||
|     } | ||||
|     else if (surfaceMode == FAULTS) | ||||
|     { | ||||
|         mask |= uintFaultBit; | ||||
|     } | ||||
|  | ||||
|     if (meshMode == FULL_MESH) | ||||
|     { | ||||
|         mask |= uintMeshSurfaceBit; | ||||
|         mask |= uintMeshFaultBit; | ||||
|     } | ||||
|     else if (meshMode == FAULTS_MESH) | ||||
|     { | ||||
|         mask |= uintMeshFaultBit; | ||||
|     } | ||||
|  | ||||
|     m_viewer->setEnableMask(mask); | ||||
|     m_viewer->update(); | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| @@ -477,7 +437,7 @@ void RimGeoMechView::clampCurrentTimestep() | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| bool RimGeoMechView::isTimeStepDependentDataVisible() | ||||
| bool RimGeoMechView::isTimeStepDependentDataVisible() const | ||||
| { | ||||
|     return this->hasUserRequestedAnimation() && (this->cellResult()->hasResult() || this->geoMechPropertyFilterCollection()->hasActiveFilters()); | ||||
| } | ||||
|   | ||||
| @@ -72,7 +72,7 @@ public: | ||||
|     const RimGeoMechPropertyFilterCollection*           geoMechPropertyFilterCollection() const; | ||||
|     void                                                setOverridePropertyFilterCollection(RimGeoMechPropertyFilterCollection* pfc); | ||||
|  | ||||
|     bool                                                isTimeStepDependentDataVisible(); | ||||
|     bool                                                isTimeStepDependentDataVisible() const override ; | ||||
|  | ||||
|     virtual cvf::Transform*                             scaleTransform() override; | ||||
|     virtual void                                        scheduleGeometryRegen(RivCellSetEnum geometryType) override; | ||||
| @@ -92,7 +92,6 @@ protected: | ||||
|  | ||||
| private: | ||||
|     virtual void                                        createDisplayModel() override; | ||||
|     virtual void                                        updateDisplayModelVisibility() override; | ||||
|     virtual void                                        updateScaleTransform() override; | ||||
|  | ||||
|     virtual void                                        clampCurrentTimestep() override; | ||||
|   | ||||
| @@ -47,6 +47,7 @@ | ||||
| #include "cvfBoundingBox.h" | ||||
| #include "cvfGeometryTools.h" | ||||
| #include "cvfPlane.h" | ||||
| #include "Rim2dIntersectionView.h" | ||||
|  | ||||
|  | ||||
| namespace caf { | ||||
| @@ -723,6 +724,24 @@ void RimIntersection::appendPointToPolyLine(const cvf::Vec3d& point) | ||||
|     rebuildGeometryAndScheduleCreateDisplayModel(); | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| Rim2dIntersectionView* RimIntersection::correspondingIntersectionView() | ||||
| { | ||||
|     std::vector<caf::PdmObjectHandle*> objects; | ||||
|  | ||||
|     this->objectsWithReferringPtrFields(objects); | ||||
|     Rim2dIntersectionView* isectView = nullptr; | ||||
|     for (auto obj : objects) | ||||
|     { | ||||
|         isectView = dynamic_cast<Rim2dIntersectionView*>(obj); | ||||
|         if (isectView) break; | ||||
|     } | ||||
|     return isectView; | ||||
|  | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| ///  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
| @@ -851,6 +870,13 @@ void RimIntersection::rebuildGeometryAndScheduleCreateDisplayModel() | ||||
|     { | ||||
|         rimView->scheduleCreateDisplayModelAndRedraw(); | ||||
|     } | ||||
|  | ||||
|     Rim2dIntersectionView * iview = correspondingIntersectionView(); | ||||
|     if (iview) | ||||
|     { | ||||
|         iview->scheduleGeometryRegen(RivCellSetEnum::ALL_CELLS); | ||||
|         iview->scheduleCreateDisplayModelAndRedraw(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| //-------------------------------------------------------------------------------------------------- | ||||
|   | ||||
| @@ -33,6 +33,7 @@ class RimWellPath; | ||||
| class RivIntersectionPartMgr; | ||||
| class RimSimWellInView; | ||||
| class RimSimWellInViewCollection; | ||||
| class Rim2dIntersectionView; | ||||
|  | ||||
| namespace caf  | ||||
| { | ||||
| @@ -86,6 +87,7 @@ public: | ||||
|     std::vector< std::vector <cvf::Vec3d> >              polyLines() const; | ||||
|     void                                                 appendPointToPolyLine(const cvf::Vec3d& point); | ||||
|  | ||||
|     Rim2dIntersectionView*                               correspondingIntersectionView(); | ||||
|     RivIntersectionPartMgr*                              intersectionPartMgr(); | ||||
|  | ||||
|     std::vector< std::vector <cvf::Vec3d> >              polyLinesForExtrusionDirection() const; | ||||
|   | ||||
| @@ -742,9 +742,11 @@ void RiuMainWindow::slotRefreshViewActions() | ||||
| void RiuMainWindow::refreshAnimationActions() | ||||
| { | ||||
|     caf::FrameAnimationControl* animationControl = NULL; | ||||
|     if (RiaApplication::instance()->activeReservoirView() && RiaApplication::instance()->activeReservoirView()->viewer()) | ||||
|     Rim3dView * activeView = RiaApplication::instance()->activeReservoirView(); | ||||
|  | ||||
|     if (activeView && activeView->viewer()) | ||||
|     { | ||||
|         animationControl = RiaApplication::instance()->activeReservoirView()->viewer()->animationControl(); | ||||
|         animationControl = activeView->viewer()->animationControl(); | ||||
|     } | ||||
|  | ||||
|     m_animationToolBar->connectAnimationControl(animationControl); | ||||
| @@ -754,37 +756,22 @@ void RiuMainWindow::refreshAnimationActions() | ||||
|     int currentTimeStepIndex = 0; | ||||
|  | ||||
|     bool enableAnimControls = false; | ||||
|     Rim3dView * activeView = RiaApplication::instance()->activeReservoirView(); | ||||
|     if (activeView &&  | ||||
|         activeView->viewer() && | ||||
|         activeView->viewer()->frameCount()) | ||||
|     { | ||||
|         enableAnimControls = true; | ||||
|         RimEclipseView * activeRiv = dynamic_cast<RimEclipseView*>(activeView); | ||||
|  | ||||
|         if (activeRiv) | ||||
|         | ||||
|         if ( activeView->isTimeStepDependentDataVisible() ) | ||||
|         { | ||||
|             if (activeRiv->currentGridCellResults()) | ||||
|             { | ||||
|                 if (activeRiv->isTimeStepDependentDataVisible()) | ||||
|                 { | ||||
|                     timeStepStrings = activeRiv->eclipseCase()->timeStepStrings(); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     timeStepStrings.push_back(tr("Static Property")); | ||||
|                 } | ||||
|             } | ||||
|             timeStepStrings = activeView->ownerCase()->timeStepStrings(); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             RimGeoMechView * activeGmv = dynamic_cast<RimGeoMechView*>(activeView); | ||||
|             if (activeGmv) | ||||
|             RimEclipseView * activeRiv = dynamic_cast<RimEclipseView*>(activeView); | ||||
|             if ( activeRiv->currentGridCellResults() ) | ||||
|             { | ||||
|                 if (activeGmv->isTimeStepDependentDataVisible()) | ||||
|                 { | ||||
|                     timeStepStrings = activeGmv->geoMechCase()->timeStepStrings(); | ||||
|                 } | ||||
|                 timeStepStrings.push_back(tr("Static Property")); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user