#1724 Fix mapping from picked triangle index to segment index

This commit is contained in:
Magne Sjaastad
2017-08-04 10:07:40 +02:00
parent 50eb8b7225
commit e35bcf1f58
4 changed files with 13 additions and 23 deletions

View File

@@ -38,7 +38,7 @@ RivPipeGeometryGenerator::RivPipeGeometryGenerator()
m_crossSectionNodeCount = 8;
m_minimumBendAngle = 80.0;
m_bendScalingFactor = 0.00001;
m_firstSegmentIndex = 0;
m_firstVisibleSegmentIndex = 0;
}
//--------------------------------------------------------------------------------------------------
@@ -590,31 +590,22 @@ void RivPipeGeometryGenerator::clearComputedData()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t RivPipeGeometryGenerator::segmentIndexFromTriangleIndex(size_t triangleIndex) const
size_t RivPipeGeometryGenerator::pipeSegmentIndexFromTriangleIndex(size_t triangleIndex) const
{
size_t filteredIndex = triangleIndex / (m_crossSectionNodeCount * 2);
return filteredIndex + m_firstSegmentIndex;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t RivPipeGeometryGenerator::pipeResultIndexFromTriangleIndex(size_t triangleIndex) const
{
size_t segIndex = segmentIndexFromTriangleIndex(triangleIndex);
size_t segIndex = triangleIndex / (m_crossSectionNodeCount * 2);
CVF_ASSERT(segIndex < m_filteredPipeSegmentToResult.size());
size_t resultIndex = m_filteredPipeSegmentToResult[segIndex];
return resultIndex;
return resultIndex + m_firstVisibleSegmentIndex;
}
//--------------------------------------------------------------------------------------------------
/// Well pipes are clipped, set index to first segment in visible well path
//--------------------------------------------------------------------------------------------------
void RivPipeGeometryGenerator::setFirstSegmentIndex(size_t segmentIndex)
void RivPipeGeometryGenerator::setFirstVisibleSegmentIndex(size_t segmentIndex)
{
m_firstSegmentIndex = segmentIndex;
m_firstVisibleSegmentIndex = segmentIndex;
}
//--------------------------------------------------------------------------------------------------

View File

@@ -62,9 +62,8 @@ public:
void pipeSurfaceTextureCoords(cvf::Vec2fArray* textureCoords, const std::vector<double>& segmentResults, const cvf::ScalarMapper* mapper) const;
void centerlineTextureCoords(cvf::Vec2fArray* textureCoords, const std::vector<double>& segmentResults, const cvf::ScalarMapper* mapper) const;
void setFirstSegmentIndex(size_t segmentIndex);
size_t segmentIndexFromTriangleIndex(size_t triangleIndex) const;
size_t pipeResultIndexFromTriangleIndex(size_t triangleIndex) const;
void setFirstVisibleSegmentIndex(size_t segmentIndex);
size_t pipeSegmentIndexFromTriangleIndex(size_t triangleIndex) const;
void cylinderWithCenterLineParts(cvf::Collection<cvf::Part>* destinationParts, const std::vector<cvf::Vec3d>& centerCoords, const cvf::Color3f& color, double radius);
private:
@@ -95,7 +94,7 @@ private:
// Map from generated cylinder segments to pipe result indices
std::vector<size_t> m_filteredPipeSegmentToResult;
size_t m_firstSegmentIndex;
size_t m_firstVisibleSegmentIndex;
double m_radius;
double m_minimumBendAngle;

View File

@@ -370,7 +370,7 @@ void RivSimWellPipesPartMgr::findGridIndexAndCellIndex(size_t branchIndex, size_
RivPipeBranchData* branchData = pipeBranchData(branchIndex);
if (branchData)
{
size_t resultIndex = branchData->m_pipeGeomGenerator->pipeResultIndexFromTriangleIndex(triangleIndex);
size_t resultIndex = branchData->m_pipeGeomGenerator->pipeSegmentIndexFromTriangleIndex(triangleIndex);
*gridIndex = branchData->m_cellIds[resultIndex].m_gridIndex;
*cellIndex = branchData->m_cellIds[resultIndex].m_gridCellIndex;

View File

@@ -277,7 +277,7 @@ void RivWellPathPartMgr::buildWellPathParts(const caf::DisplayCoordTransform* di
clippedPoints.push_back(wellPathGeometry->m_wellPathPoints[idx]);
}
pbd.m_pipeGeomGenerator->setFirstSegmentIndex(firstVisibleSegmentIndex);
pbd.m_pipeGeomGenerator->setFirstVisibleSegmentIndex(firstVisibleSegmentIndex);
}
if (clippedPoints.size() < 2) return;
@@ -445,7 +445,7 @@ void RivWellPathPartMgr::clearAllBranchData()
//--------------------------------------------------------------------------------------------------
size_t RivWellPathPartMgr::segmentIndexFromTriangleIndex(size_t triangleIndex)
{
return m_pipeBranchData.m_pipeGeomGenerator->segmentIndexFromTriangleIndex(triangleIndex);
return m_pipeBranchData.m_pipeGeomGenerator->pipeSegmentIndexFromTriangleIndex(triangleIndex);
}
//--------------------------------------------------------------------------------------------------