//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- cvf::ref<cvf::Part> RivWellFracturePartMgr::createStimPlanMeshPart(const RimEclipseView& activeView) { if (!m_rimFracture->fractureTemplate()) return nullptr; RimStimPlanFractureTemplate* stimPlanFracTemplate = dynamic_cast<RimStimPlanFractureTemplate*>(m_rimFracture->fractureTemplate()); if (!stimPlanFracTemplate) return nullptr; cvf::ref<cvf::DrawableGeo> stimPlanMeshGeo = createStimPlanMeshDrawable(stimPlanFracTemplate, activeView); if (stimPlanMeshGeo.notNull()) { cvf::ref<cvf::Part> stimPlanMeshPart = new cvf::Part(0, "StimPlanMesh"); stimPlanMeshPart->setDrawable(stimPlanMeshGeo.p()); stimPlanMeshPart->updateBoundingBox(); stimPlanMeshPart->setPriority(RivPartPriority::PartType::TransparentMeshLines); caf::MeshEffectGenerator lineEffGen(cvf::Color3::BLACK); lineEffGen.setLineWidth(1.0f); cvf::ref<cvf::Effect> eff = lineEffGen.generateCachedEffect(); stimPlanMeshPart->setEffect(eff.p()); return stimPlanMeshPart; } return nullptr; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RivCrossSectionPartMgr::generatePartGeometry() { if (m_crossSectionGenerator.isNull()) return; bool useBufferObjects = true; // Surface geometry { cvf::ref<cvf::DrawableGeo> geo = m_crossSectionGenerator->generateSurface(); if (geo.notNull()) { geo->computeNormals(); if (useBufferObjects) { geo->setRenderMode(cvf::DrawableGeo::BUFFER_OBJECT); } cvf::ref<cvf::Part> part = new cvf::Part; part->setName("Cross Section"); part->setDrawable(geo.p()); // Set mapping from triangle face index to cell index cvf::ref<RivCrossSectionSourceInfo> si = new RivCrossSectionSourceInfo(m_crossSectionGenerator.p()); part->setSourceInfo(si.p()); part->updateBoundingBox(); part->setEnableMask(faultBit); part->setPriority(priCrossSectionGeo); m_crossSectionFaces = part; } } // Mesh geometry { cvf::ref<cvf::DrawableGeo> geoMesh = m_crossSectionGenerator->createMeshDrawable(); if (geoMesh.notNull()) { if (useBufferObjects) { geoMesh->setRenderMode(cvf::DrawableGeo::BUFFER_OBJECT); } cvf::ref<cvf::Part> part = new cvf::Part; part->setName("Cross Section mesh"); part->setDrawable(geoMesh.p()); part->updateBoundingBox(); part->setEnableMask(meshFaultBit); part->setPriority(priMesh); m_crossSectionGridLines = part; } } // Highlight line m_highlightLineAlongPolyline = NULL; m_highlightPointsForPolyline = NULL; if (m_rimCrossSection->type == RimCrossSection::CS_POLYLINE) { { cvf::ref<cvf::DrawableGeo> polylineGeo = m_crossSectionGenerator->createLineAlongPolylineDrawable(); if (polylineGeo.notNull()) { if (useBufferObjects) { polylineGeo->setRenderMode(cvf::DrawableGeo::BUFFER_OBJECT); } cvf::ref<cvf::Part> part = new cvf::Part; part->setName("Cross Section Polyline"); part->setDrawable(polylineGeo.p()); part->updateBoundingBox(); part->setPriority(10000); // Always show this part, also when mesh is turned off //part->setEnableMask(meshFaultBit); cvf::ref<cvf::Effect> eff; caf::MeshEffectGenerator lineEffGen(cvf::Color3::MAGENTA); eff = lineEffGen.generateUnCachedEffect(); cvf::ref<cvf::RenderStateDepth> depth = new cvf::RenderStateDepth; depth->enableDepthTest(false); eff->setRenderState(depth.p()); part->setEffect(eff.p()); m_highlightLineAlongPolyline = part; } } cvf::ref<cvf::DrawableGeo> polylinePointsGeo = m_crossSectionGenerator->createPointsFromPolylineDrawable(); if (polylinePointsGeo.notNull()) { if (useBufferObjects) { polylinePointsGeo->setRenderMode(cvf::DrawableGeo::BUFFER_OBJECT); } cvf::ref<cvf::Part> part = new cvf::Part; part->setName("Cross Section Polyline"); part->setDrawable(polylinePointsGeo.p()); part->updateBoundingBox(); part->setPriority(10000); // Always show this part, also when mesh is turned off //part->setEnableMask(meshFaultBit); cvf::ref<cvf::Effect> eff; caf::MeshEffectGenerator lineEffGen(cvf::Color3::MAGENTA); eff = lineEffGen.generateUnCachedEffect(); cvf::ref<cvf::RenderStateDepth> depth = new cvf::RenderStateDepth; depth->enableDepthTest(false); eff->setRenderState(depth.p()); cvf::ref<cvf::RenderStatePoint> pointRendState = new cvf::RenderStatePoint(cvf::RenderStatePoint::FIXED_SIZE); pointRendState->setSize(5.0f); eff->setRenderState(pointRendState.p()); part->setEffect(eff.p()); m_highlightPointsForPolyline = part; } } updatePartEffect(); }