//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RivCrossSectionPartMgr::updatePartEffect() { if (m_crossSectionGenerator.isNull()) return; // Set deCrossSection effect caf::SurfaceEffectGenerator geometryEffgen(m_defaultColor, caf::PO_1); cvf::ref<cvf::Effect> geometryOnlyEffect = geometryEffgen.generateCachedEffect(); if (m_crossSectionFaces.notNull()) { m_crossSectionFaces->setEffect(geometryOnlyEffect.p()); } // Update mesh colors as well, in case of change //RiaPreferences* prefs = RiaApplication::instance()->preferences(); cvf::ref<cvf::Effect> eff; caf::MeshEffectGenerator CrossSectionEffGen(cvf::Color3::WHITE);//prefs->defaultCrossSectionGridLineColors()); eff = CrossSectionEffGen.generateCachedEffect(); if (m_crossSectionGridLines.notNull()) { m_crossSectionGridLines->setEffect(eff.p()); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RivFemPartPartMgr::updateCellColor(cvf::Color4f color) { if (m_surfaceFaces.isNull()) return; // Set default effect caf::SurfaceEffectGenerator geometryEffgen(color, caf::PO_1); cvf::ref<cvf::Effect> geometryOnlyEffect = geometryEffgen.generateCachedEffect(); if (m_surfaceFaces.notNull()) m_surfaceFaces->setEffect(geometryOnlyEffect.p()); if (color.a() < 1.0f) { // Set priority to make sure this transparent geometry are rendered last if (m_surfaceFaces.notNull()) m_surfaceFaces->setPriority(100); } m_opacityLevel = color.a(); m_defaultColor = color.toColor3f(); // Update mesh colors as well, in case of change RiaPreferences* prefs = RiaApplication::instance()->preferences(); cvf::ref<cvf::Effect> eff; if (m_surfaceFaces.notNull()) { caf::MeshEffectGenerator effGen(prefs->defaultGridLineColors()); eff = effGen.generateCachedEffect(); m_surfaceGridLines->setEffect(eff.p()); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RivFaultPartMgr::updatePartEffect() { // Set default effect caf::SurfaceEffectGenerator geometryEffgen(m_defaultColor, caf::PO_1); geometryEffgen.setCullBackfaces(faceCullingMode()); cvf::ref<cvf::Effect> geometryOnlyEffect = geometryEffgen.generateCachedEffect(); if (m_nativeFaultFaces.notNull()) { m_nativeFaultFaces->setEffect(geometryOnlyEffect.p()); } if (m_oppositeFaultFaces.notNull()) { m_oppositeFaultFaces->setEffect(geometryOnlyEffect.p()); } updateNNCColors(NULL); // Update mesh colors as well, in case of change RiaPreferences* prefs = RiaApplication::instance()->preferences(); cvf::ref<cvf::Effect> eff; caf::MeshEffectGenerator faultEffGen(prefs->defaultFaultGridLineColors()); eff = faultEffGen.generateCachedEffect(); if (m_nativeFaultGridLines.notNull()) { m_nativeFaultGridLines->setEffect(eff.p()); } if (m_oppositeFaultGridLines.notNull()) { m_oppositeFaultGridLines->setEffect(eff.p()); } if (m_opacityLevel < 1.0f) { // Set priority to make sure this transparent geometry are rendered last if (m_nativeFaultFaces.notNull()) m_nativeFaultFaces->setPriority(100 + priFaultGeo); if (m_oppositeFaultFaces.notNull()) m_oppositeFaultFaces->setPriority(100 + priFaultGeo); if (m_NNCFaces.notNull()) m_NNCFaces->setPriority(100 + priNncGeo); if (m_nativeFaultGridLines.notNull()) { m_nativeFaultGridLines->setPriority(100 + priMesh); } if (m_oppositeFaultGridLines.notNull()) { m_oppositeFaultGridLines->setPriority(100 + priMesh); } } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RivGridPartMgr::updateCellColor(cvf::Color4f color) { if (m_surfaceFaces.isNull() && m_faultFaces.isNull()) return; // Set default effect caf::SurfaceEffectGenerator geometryEffgen(color, true); cvf::ref<cvf::Effect> geometryOnlyEffect = geometryEffgen.generateEffect(); if (m_surfaceFaces.notNull()) m_surfaceFaces->setEffect(geometryOnlyEffect.p()); if (m_faultFaces.notNull()) m_faultFaces->setEffect(geometryOnlyEffect.p()); if (color.a() < 1.0f) { // Set priority to make sure this transparent geometry are rendered last if (m_surfaceFaces.notNull()) m_surfaceFaces->setPriority(100); if (m_faultFaces.notNull()) m_faultFaces->setPriority(100); } m_opacityLevel = color.a(); m_defaultColor = color.toColor3f(); }
void RivGridPartMgr::generatePartGeometry(cvf::StructGridGeometryGenerator& geoBuilder, bool faultGeometry) { bool useBufferObjects = true; // Surface geometry { cvf::ref<cvf::DrawableGeo> geo = geoBuilder.generateSurface(); if (geo.notNull()) { geo->computeNormals(); if (useBufferObjects) { geo->setRenderMode(cvf::DrawableGeo::BUFFER_OBJECT); } cvf::ref<cvf::Part> part = new cvf::Part; part->setName("Grid " + cvf::String(static_cast<int>(m_gridIdx))); part->setId(m_gridIdx); // !! For now, use grid index as part ID (needed for pick info) part->setDrawable(geo.p()); part->setTransform(m_scaleTransform.p()); // Set mapping from triangle face index to cell index part->setSourceInfo(geoBuilder.triangleToSourceGridCellMap().p()); part->updateBoundingBox(); // Set default effect caf::SurfaceEffectGenerator geometryEffgen(cvf::Color4f(cvf::Color3f::WHITE), true); cvf::ref<cvf::Effect> geometryOnlyEffect = geometryEffgen.generateEffect(); part->setEffect(geometryOnlyEffect.p()); if (faultGeometry) { part->setEnableMask(faultBit); m_faultFaces = part; } else { part->setEnableMask(surfaceBit); m_surfaceFaces = part; } } } // Mesh geometry { cvf::ref<cvf::DrawableGeo> geoMesh = geoBuilder.createMeshDrawable(); if (geoMesh.notNull()) { if (useBufferObjects) { geoMesh->setRenderMode(cvf::DrawableGeo::BUFFER_OBJECT); } cvf::ref<cvf::Part> part = new cvf::Part; part->setName("Grid mesh " + cvf::String(static_cast<int>(m_gridIdx))); part->setDrawable(geoMesh.p()); part->setTransform(m_scaleTransform.p()); part->updateBoundingBox(); cvf::ref<cvf::Effect> eff; if (faultGeometry) { caf::MeshEffectGenerator effGen(cvf::Color3f::BLACK); eff = effGen.generateEffect(); part->setEnableMask(meshFaultBit); part->setEffect(eff.p()); m_faultGridLines = part; } else { caf::MeshEffectGenerator effGen(cvf::Color3f::WHITE); eff = effGen.generateEffect(); // Set priority to make sure fault lines are rendered first part->setPriority(10); part->setEnableMask(meshSurfaceBit); part->setEffect(eff.p()); m_surfaceGridLines = part; } } } }
void RivFemPartPartMgr::generatePartGeometry(RivFemPartGeometryGenerator& geoBuilder) { bool useBufferObjects = true; // Surface geometry { m_surfaceFaces = NULL; // To possibly free memory before adding the new stuff cvf::ref<cvf::DrawableGeo> geo = geoBuilder.generateSurface(); if (geo.notNull()) { geo->computeNormals(); if (useBufferObjects) { geo->setRenderMode(cvf::DrawableGeo::BUFFER_OBJECT); } cvf::ref<cvf::Part> part = new cvf::Part; part->setName("FemPart " + cvf::String(m_gridIdx)); part->setId(m_gridIdx); // Use grid index as part ID part->setDrawable(geo.p()); part->setTransform(m_scaleTransform.p()); // Set mapping from triangle face index to element index cvf::ref<RivFemPickSourceInfo> si = new RivFemPickSourceInfo(m_gridIdx, geoBuilder.triangleToElementMapper()); part->setSourceInfo(si.p()); part->updateBoundingBox(); // Set default effect caf::SurfaceEffectGenerator geometryEffgen(cvf::Color4f(cvf::Color3f::WHITE), caf::PO_1); cvf::ref<cvf::Effect> geometryOnlyEffect = geometryEffgen.generateCachedEffect(); part->setEffect(geometryOnlyEffect.p()); part->setEnableMask(surfaceBit); m_surfaceFaces = part; } } // Mesh geometry { m_surfaceGridLines = NULL; // To possibly free memory before adding the new stuff cvf::ref<cvf::DrawableGeo> geoMesh = geoBuilder.createMeshDrawable(); if (geoMesh.notNull()) { if (useBufferObjects) { geoMesh->setRenderMode(cvf::DrawableGeo::BUFFER_OBJECT); } cvf::ref<cvf::Part> part = new cvf::Part; part->setName("Grid mesh " + cvf::String(m_gridIdx)); part->setDrawable(geoMesh.p()); part->setTransform(m_scaleTransform.p()); part->updateBoundingBox(); RiaPreferences* prefs = RiaApplication::instance()->preferences(); cvf::ref<cvf::Effect> eff; caf::MeshEffectGenerator effGen(prefs->defaultGridLineColors()); eff = effGen.generateCachedEffect(); // Set priority to make sure fault lines are rendered first part->setPriority(10); part->setEnableMask(meshSurfaceBit); part->setEffect(eff.p()); m_surfaceGridLines = part; } } }