#2457 Make 2d intersection view length start at well start

This commit is contained in:
Jacob Støren 2018-02-13 16:56:48 +01:00
parent 3b627ce1c4
commit cb38d435cd
5 changed files with 44 additions and 11 deletions

View File

@ -45,12 +45,14 @@ RivIntersectionGeometryGenerator::RivIntersectionGeometryGenerator( RimIntersect
std::vector<std::vector<cvf::Vec3d> > &polylines,
const cvf::Vec3d& extrusionDirection,
const RivIntersectionHexGridInterface* grid,
bool isFlattened)
bool isFlattened,
double horizontalLengthAlongWellToPolylineStart)
: m_crossSection(crossSection),
m_polyLines(polylines),
m_extrusionDirection(extrusionDirection),
m_hexGrid(grid),
m_isFlattened(isFlattened)
m_isFlattened(isFlattened),
m_horizontalLengthAlongWellToPolylineStart(horizontalLengthAlongWellToPolylineStart)
{
m_triangleVxes = new cvf::Vec3fArray;
m_cellBorderLineVxes = new cvf::Vec3fArray;
@ -109,7 +111,7 @@ void RivIntersectionGeometryGenerator::calculateSegementTransformPrLinePoint()
m_segementTransformPrLinePoint.clear();
double previousSectionFlattenedEndPosX = 0.0;
double previousSectionFlattenedEndPosX = m_horizontalLengthAlongWellToPolylineStart;
cvf::Vec3d previousSectionOrigo(cvf::Vec3d::ZERO);

View File

@ -50,7 +50,8 @@ public:
std::vector<std::vector<cvf::Vec3d> > &polylines,
const cvf::Vec3d& extrusionDirection,
const RivIntersectionHexGridInterface* grid,
bool isFlattened );
bool isFlattened,
double horizontalLengthAlongWellToPolylineStart);
~RivIntersectionGeometryGenerator();
@ -88,6 +89,7 @@ private:
const std::vector<std::vector<cvf::Vec3d> > m_polyLines;
cvf::Vec3d m_extrusionDirection;
bool m_isFlattened;
double m_horizontalLengthAlongWellToPolylineStart;
// Output arrays
cvf::ref<cvf::Vec3fArray> m_triangleVxes;

View File

@ -81,13 +81,20 @@ RivIntersectionPartMgr::RivIntersectionPartMgr(RimIntersection* rimCrossSection,
CVF_ASSERT(m_rimCrossSection);
m_crossSectionFacesTextureCoords = new cvf::Vec2fArray;
double horizontalLengthAlongWellToPolylineStart;
std::vector< std::vector <cvf::Vec3d> > polyLines = m_rimCrossSection->polyLines();
std::vector< std::vector <cvf::Vec3d> > polyLines = m_rimCrossSection->polyLines(&horizontalLengthAlongWellToPolylineStart);
if (polyLines.size() > 0)
{
cvf::Vec3d direction = m_rimCrossSection->extrusionDirection();
cvf::ref<RivIntersectionHexGridInterface> hexGrid = createHexGridInterface();
m_crossSectionGenerator = new RivIntersectionGeometryGenerator(m_rimCrossSection, polyLines, direction, hexGrid.p(), m_isFlattened);
m_crossSectionGenerator = new RivIntersectionGeometryGenerator(m_rimCrossSection,
polyLines,
direction,
hexGrid.p(),
m_isFlattened,
horizontalLengthAlongWellToPolylineStart);
}
}

View File

@ -392,15 +392,19 @@ void RimIntersection::updateAzimuthLine()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector< std::vector <cvf::Vec3d> > RimIntersection::polyLines() const
std::vector< std::vector <cvf::Vec3d> > RimIntersection::polyLines(double * horizontalLengthAlongWellToPolylineStart) const
{
CVF_ASSERT(horizontalLengthAlongWellToPolylineStart != nullptr);
std::vector< std::vector <cvf::Vec3d> > lines;
double horizontalProjectedLengthAlongWellPathToClipPoint = 0.0;
if (horizontalLengthAlongWellToPolylineStart) *horizontalLengthAlongWellToPolylineStart = 0.0;
if (type == CS_WELL_PATH)
{
if (wellPath() && wellPath->wellPathGeometry() )
{
lines.push_back(wellPath->wellPathGeometry()->m_wellPathPoints);
clipToReservoir(lines[0]);
clipToReservoir(lines[0], &horizontalProjectedLengthAlongWellPathToClipPoint);
}
}
else if (type == CS_SIMULATION_WELL)
@ -436,6 +440,11 @@ std::vector< std::vector <cvf::Vec3d> > RimIntersection::polyLines() const
std::vector<cvf::Vec3d>& polyLine = lines[lIdx];
addExtents(polyLine);
}
if (horizontalLengthAlongWellToPolylineStart)
{
*horizontalLengthAlongWellToPolylineStart = horizontalProjectedLengthAlongWellPathToClipPoint - m_extentLength;
}
}
return lines;
@ -592,8 +601,11 @@ void RimIntersection::updateName()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimIntersection::clipToReservoir(std::vector<cvf::Vec3d> &polyLine) const
void RimIntersection::clipToReservoir(std::vector<cvf::Vec3d> &polyLine, double * horizontalLengthAlongWellToClipPoint) const
{
CVF_ASSERT(horizontalLengthAlongWellToClipPoint != nullptr);
*horizontalLengthAlongWellToClipPoint = 0.0;
RimCase* ownerCase = nullptr;
firstAncestorOrThisOfType(ownerCase);
@ -607,6 +619,12 @@ void RimIntersection::clipToReservoir(std::vector<cvf::Vec3d> &polyLine) const
{
if (!caseBB.contains(polyLine[vxIdx]))
{
if (vxIdx > 0)
{
cvf::Vec3d segment = polyLine[vxIdx] - polyLine[vxIdx-1];
segment[2] = 0.0;
*horizontalLengthAlongWellToClipPoint += segment.length();
}
continue;
}
@ -621,6 +639,10 @@ void RimIntersection::clipToReservoir(std::vector<cvf::Vec3d> &polyLine) const
if (topPlane.intersect(polyLine[vxIdx-1], polyLine[vxIdx], &intersection))
{
cvf::Vec3d segment = intersection - polyLine[vxIdx-1];
segment[2] = 0.0;
*horizontalLengthAlongWellToClipPoint += segment.length();
clippedPolyLine.push_back(intersection);
}
}

View File

@ -84,7 +84,7 @@ public:
caf::PdmField< bool > inputExtrusionPointsFromViewerEnabled;
caf::PdmField< bool > inputTwoAzimuthPointsFromViewerEnabled;
std::vector< std::vector <cvf::Vec3d> > polyLines() const;
std::vector< std::vector <cvf::Vec3d> > polyLines(double * horizontalLengthAlongWellToPolylineStart = nullptr) const;
void appendPointToPolyLine(const cvf::Vec3d& point);
Rim2dIntersectionView* correspondingIntersectionView();
@ -133,7 +133,7 @@ private:
void updateWellCenterline() const;
void updateWellExtentDefaultValue();
void addExtents(std::vector<cvf::Vec3d> &polyLine) const;
void clipToReservoir(std::vector<cvf::Vec3d> &polyLine) const;
void clipToReservoir(std::vector<cvf::Vec3d> &polyLinee, double * horizontalLengthAlongWellToClipPoint) const;
void updateName();
void rebuildGeometryAndScheduleCreateDisplayModel();
static double azimuthInRadians(cvf::Vec3d vec);