NNC: Fixed crash and made colorupdate work

This commit is contained in:
Jacob Støren
2013-12-16 11:31:06 +01:00
parent 56616097d3
commit b6437d370c
2 changed files with 28 additions and 32 deletions

View File

@@ -56,13 +56,14 @@ RivFaultPartMgr::RivFaultPartMgr(const RigGridBase* grid, const RimFault* rimFau
: m_grid(grid),
m_rimFault(rimFault),
m_opacityLevel(1.0f),
m_defaultColor(cvf::Color3::WHITE),
m_nativeFaultGenerator(grid, rimFault->faultGeometry(), true),
m_oppositeFaultGenerator(grid, rimFault->faultGeometry(), false)
m_defaultColor(cvf::Color3::WHITE)
{
cvf::ref< cvf::Array<size_t> > connIdxes = new cvf::Array<size_t>;
connIdxes->assign(rimFault->faultGeometry()->connectionIndices());
m_nativeFaultGenerator = new RivFaultGeometryGenerator(grid, rimFault->faultGeometry(), true);
m_oppositeFaultGenerator = new RivFaultGeometryGenerator(grid, rimFault->faultGeometry(), false);
m_NNCGenerator = new RivNNCGeometryGenerator(grid->mainGrid()->nncData(), grid->mainGrid()->displayModelOffset(), connIdxes.p());
m_nativeFaultFacesTextureCoords = new cvf::Vec2fArray;
@@ -75,8 +76,8 @@ RivFaultPartMgr::RivFaultPartMgr(const RigGridBase* grid, const RimFault* rimFau
//--------------------------------------------------------------------------------------------------
void RivFaultPartMgr::setCellVisibility(cvf::UByteArray* cellVisibilities)
{
m_nativeFaultGenerator.setCellVisibility(cellVisibilities);
m_oppositeFaultGenerator.setCellVisibility(cellVisibilities);
m_nativeFaultGenerator->setCellVisibility(cellVisibilities);
m_oppositeFaultGenerator->setCellVisibility(cellVisibilities);
generatePartGeometry();
}
@@ -87,20 +88,7 @@ void RivFaultPartMgr::setCellVisibility(cvf::UByteArray* cellVisibilities)
void RivFaultPartMgr::applySingleColorEffect()
{
m_defaultColor = m_rimFault->faultColor();
// Set default effect
caf::SurfaceEffectGenerator geometryEffgen(m_defaultColor, true);
cvf::ref<cvf::Effect> geometryOnlyEffect = geometryEffgen.generateEffect();
if (m_nativeFaultFaces.notNull()) m_nativeFaultFaces->setEffect(geometryOnlyEffect.p());
if (m_oppositeFaultFaces.notNull()) m_oppositeFaultFaces->setEffect(geometryOnlyEffect.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);
if (m_oppositeFaultFaces.notNull()) m_oppositeFaultFaces->setPriority(100);
}
this->updatePartEffect();
}
//--------------------------------------------------------------------------------------------------
@@ -127,13 +115,13 @@ void RivFaultPartMgr::updateCellResultColor(size_t timeStepIndex, RimResultSlot*
// Faults
if (m_nativeFaultFaces.notNull())
{
m_nativeFaultGenerator.textureCoordinates(m_nativeFaultFacesTextureCoords.p(), dataAccessObject.p(), mapper);
m_nativeFaultGenerator->textureCoordinates(m_nativeFaultFacesTextureCoords.p(), dataAccessObject.p(), mapper);
if (m_opacityLevel < 1.0f )
{
const std::vector<cvf::ubyte>& isWellPipeVisible = cellResultSlot->reservoirView()->wellCollection()->isWellPipesVisible(timeStepIndex);
cvf::ref<cvf::UIntArray> gridCellToWellindexMap = eclipseCase->gridCellToWellIndex(m_grid->gridIndex());
const std::vector<size_t>& quadsToGridCells = m_nativeFaultGenerator.quadToGridCellIndices();
const std::vector<size_t>& quadsToGridCells = m_nativeFaultGenerator->quadToGridCellIndices();
for(size_t i = 0; i < m_nativeFaultFacesTextureCoords->size(); ++i)
{
@@ -169,13 +157,13 @@ void RivFaultPartMgr::updateCellResultColor(size_t timeStepIndex, RimResultSlot*
if (m_oppositeFaultFaces.notNull())
{
m_oppositeFaultGenerator.textureCoordinates(m_oppositeFaultFacesTextureCoords.p(), dataAccessObject.p(), mapper);
m_oppositeFaultGenerator->textureCoordinates(m_oppositeFaultFacesTextureCoords.p(), dataAccessObject.p(), mapper);
if (m_opacityLevel < 1.0f )
{
const std::vector<cvf::ubyte>& isWellPipeVisible = cellResultSlot->reservoirView()->wellCollection()->isWellPipesVisible(timeStepIndex);
cvf::ref<cvf::UIntArray> gridCellToWellindexMap = eclipseCase->gridCellToWellIndex(m_grid->gridIndex());
const std::vector<size_t>& quadsToGridCells = m_oppositeFaultGenerator.quadToGridCellIndices();
const std::vector<size_t>& quadsToGridCells = m_oppositeFaultGenerator->quadToGridCellIndices();
for(size_t i = 0; i < m_oppositeFaultFacesTextureCoords->size(); ++i)
{
@@ -227,7 +215,7 @@ void RivFaultPartMgr::generatePartGeometry()
bool useBufferObjects = true;
// Surface geometry
{
cvf::ref<cvf::DrawableGeo> geo = m_nativeFaultGenerator.generateSurface();
cvf::ref<cvf::DrawableGeo> geo = m_nativeFaultGenerator->generateSurface();
if (geo.notNull())
{
geo->computeNormals();
@@ -243,7 +231,7 @@ void RivFaultPartMgr::generatePartGeometry()
part->setDrawable(geo.p());
// Set mapping from triangle face index to cell index
part->setSourceInfo(m_nativeFaultGenerator.triangleToSourceGridCellMap().p());
part->setSourceInfo(m_nativeFaultGenerator->triangleToSourceGridCellMap().p());
part->updateBoundingBox();
part->setEnableMask(faultBit);
@@ -254,7 +242,7 @@ void RivFaultPartMgr::generatePartGeometry()
// Mesh geometry
{
cvf::ref<cvf::DrawableGeo> geoMesh = m_nativeFaultGenerator.createMeshDrawable();
cvf::ref<cvf::DrawableGeo> geoMesh = m_nativeFaultGenerator->createMeshDrawable();
if (geoMesh.notNull())
{
if (useBufferObjects)
@@ -276,7 +264,7 @@ void RivFaultPartMgr::generatePartGeometry()
// Surface geometry
{
cvf::ref<cvf::DrawableGeo> geo = m_oppositeFaultGenerator.generateSurface();
cvf::ref<cvf::DrawableGeo> geo = m_oppositeFaultGenerator->generateSurface();
if (geo.notNull())
{
geo->computeNormals();
@@ -292,7 +280,7 @@ void RivFaultPartMgr::generatePartGeometry()
part->setDrawable(geo.p());
// Set mapping from triangle face index to cell index
part->setSourceInfo(m_oppositeFaultGenerator.triangleToSourceGridCellMap().p());
part->setSourceInfo(m_oppositeFaultGenerator->triangleToSourceGridCellMap().p());
part->updateBoundingBox();
part->setEnableMask(faultBit);
@@ -303,7 +291,7 @@ void RivFaultPartMgr::generatePartGeometry()
// Mesh geometry
{
cvf::ref<cvf::DrawableGeo> geoMesh = m_oppositeFaultGenerator.createMeshDrawable();
cvf::ref<cvf::DrawableGeo> geoMesh = m_oppositeFaultGenerator->createMeshDrawable();
if (geoMesh.notNull())
{
if (useBufferObjects)
@@ -399,7 +387,7 @@ void RivFaultPartMgr::updatePartEffect()
nncColor.g() += (1.0 - nncColor.g()) * 0.2;
nncColor.g() += (1.0 - nncColor.b()) * 0.2;
caf::SurfaceEffectGenerator nncEffgen(nncColor, true);
caf::SurfaceEffectGenerator nncEffgen(nncColor, false);
cvf::ref<cvf::Effect> nncEffect = nncEffgen.generateEffect();
if (m_NNCFaces.notNull())
@@ -423,6 +411,14 @@ void RivFaultPartMgr::updatePartEffect()
{
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);
if (m_oppositeFaultFaces.notNull()) m_oppositeFaultFaces->setPriority(100);
if (m_NNCFaces.notNull()) m_NNCFaces->setPriority(100);
}
}
//--------------------------------------------------------------------------------------------------

View File

@@ -81,12 +81,12 @@ private:
cvf::ref<cvf::UByteArray> m_cellVisibility;
RivFaultGeometryGenerator m_nativeFaultGenerator;
cvf::ref<RivFaultGeometryGenerator> m_nativeFaultGenerator;
cvf::ref<cvf::Part> m_nativeFaultFaces;
cvf::ref<cvf::Part> m_nativeFaultGridLines;
cvf::ref<cvf::Vec2fArray> m_nativeFaultFacesTextureCoords;
RivFaultGeometryGenerator m_oppositeFaultGenerator;
cvf::ref<RivFaultGeometryGenerator> m_oppositeFaultGenerator;
cvf::ref<cvf::Part> m_oppositeFaultFaces;
cvf::ref<cvf::Part> m_oppositeFaultGridLines;
cvf::ref<cvf::Vec2fArray> m_oppositeFaultFacesTextureCoords;