mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-14 17:32:13 -05:00
#3353 Improve error messages from arc based geometry calculators.
Color dogleg text red if the constaint is not satisfied
This commit is contained in:
1 parent
e55fc4990d
commit
41b24a8de2
9 files changed
+169
-60
No files matched your search
@@ -27,16 +27,17 @@
|
||||
/// + p2
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RiaArcCurveCalculator::RiaArcCurveCalculator(cvf::Vec3d p1, cvf::Vec3d t1, cvf::Vec3d p2)
|
||||
: m_isCalculationOK(false)
|
||||
, m_radius(std::numeric_limits<double>::infinity())
|
||||
: m_radius(std::numeric_limits<double>::infinity())
|
||||
, m_arcCS(cvf::Mat4d::ZERO)
|
||||
, m_endAzi(0)
|
||||
, m_endInc(0)
|
||||
, m_curveStatus(OK)
|
||||
{
|
||||
bool isOk = t1.normalize();
|
||||
if (!isOk)
|
||||
{
|
||||
// No tangent. Bail out
|
||||
m_curveStatus = FAILED_INPUT_OVERLAP;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -45,6 +46,8 @@ RiaArcCurveCalculator::RiaArcCurveCalculator(cvf::Vec3d p1, cvf::Vec3d t1, cvf::
|
||||
if (!isOk)
|
||||
{
|
||||
// p1 and p2 in the same place.
|
||||
m_curveStatus = FAILED_INPUT_OVERLAP;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -52,9 +55,12 @@ RiaArcCurveCalculator::RiaArcCurveCalculator(cvf::Vec3d p1, cvf::Vec3d t1, cvf::
|
||||
if (!isOk)
|
||||
{
|
||||
// P2 is on the p1 + k*t1 line. We have a straight line
|
||||
m_curveStatus = OK_STRAIGHT_LINE;
|
||||
|
||||
RiaOffshoreSphericalCoords endTangent(t1);
|
||||
m_endAzi = endTangent.azi();
|
||||
m_endInc = endTangent.inc();
|
||||
m_radius = std::numeric_limits<double>::infinity();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -74,8 +80,6 @@ RiaArcCurveCalculator::RiaArcCurveCalculator(cvf::Vec3d p1, cvf::Vec3d t1, cvf::
|
||||
RiaOffshoreSphericalCoords endTangent(t2);
|
||||
m_endAzi = endTangent.azi();
|
||||
m_endInc = endTangent.inc();
|
||||
|
||||
m_isCalculationOK = true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -34,25 +34,31 @@ public:
|
||||
RiaArcCurveCalculator(cvf::Vec3d p1, cvf::Vec3d t1, cvf::Vec3d p2);
|
||||
RiaArcCurveCalculator(cvf::Vec3d p1, double azi1, double inc1, cvf::Vec3d p2);
|
||||
|
||||
bool isOk() const { return m_isCalculationOK;}
|
||||
enum CurveStatus
|
||||
{
|
||||
OK,
|
||||
OK_STRAIGHT_LINE,
|
||||
FAILED_INPUT_OVERLAP
|
||||
};
|
||||
|
||||
CurveStatus curveStatus() const { return m_curveStatus;}
|
||||
|
||||
cvf::Mat4d arcCS() const { return m_arcCS; }
|
||||
double radius() const { return m_radius;}
|
||||
cvf::Vec3d center() const { return m_arcCS.translation();}
|
||||
cvf::Vec3d normal() const { return cvf::Vec3d(m_arcCS.col(2));}
|
||||
|
||||
double endAzimuth() const { return m_endAzi; }
|
||||
double endInclination() const { return m_endInc; }
|
||||
cvf::Mat4d arcCS() const { return m_arcCS; }
|
||||
double radius() const { return m_radius;}
|
||||
cvf::Vec3d center() const { return m_arcCS.translation();}
|
||||
cvf::Vec3d normal() const { return cvf::Vec3d(m_arcCS.col(2));}
|
||||
|
||||
double endAzimuth() const { return m_endAzi; }
|
||||
double endInclination() const { return m_endInc; }
|
||||
|
||||
private:
|
||||
bool m_isCalculationOK;
|
||||
CurveStatus m_curveStatus;
|
||||
|
||||
double m_radius;
|
||||
cvf::Mat4d m_arcCS;
|
||||
|
||||
double m_endAzi;
|
||||
double m_endInc;
|
||||
double m_radius;
|
||||
cvf::Mat4d m_arcCS;
|
||||
|
||||
double m_endAzi;
|
||||
double m_endInc;
|
||||
};
|
||||
|
||||
|
||||
@@ -26,10 +26,10 @@
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RiaJCurveCalculator::RiaJCurveCalculator(cvf::Vec3d p1, double azi1, double inc1, double r1,
|
||||
cvf::Vec3d p2)
|
||||
: m_isCalculationOK(false)
|
||||
, m_c1( cvf::Vec3d::UNDEFINED)
|
||||
: m_c1( cvf::Vec3d::UNDEFINED)
|
||||
, m_n1( cvf::Vec3d::UNDEFINED)
|
||||
|
||||
, m_radius( std::numeric_limits<double>::infinity())
|
||||
, m_curveStatus(OK)
|
||||
{
|
||||
cvf::Vec3d t1 (RiaOffshoreSphericalCoords::unitVectorFromAziInc(azi1, inc1));
|
||||
|
||||
@@ -40,9 +40,11 @@ RiaJCurveCalculator::RiaJCurveCalculator(cvf::Vec3d p1, double azi1, double inc1
|
||||
if (!isOk)
|
||||
{
|
||||
// p2 is on the p1 + t12 line. Degenerates to a line.
|
||||
m_curveStatus = OK_STRAIGHT_LINE;
|
||||
m_firstArcEndpoint = p2;
|
||||
m_endAzi = azi1;
|
||||
m_endInc = inc1;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -53,15 +55,18 @@ RiaJCurveCalculator::RiaJCurveCalculator(cvf::Vec3d p1, double azi1, double inc1
|
||||
if (p2c1Length < r1)
|
||||
{
|
||||
// Radius is too big. We can not get to point 2 using the requested radius.
|
||||
m_isCalculationOK = false;
|
||||
m_curveStatus = FAILED_RADIUS_TOO_LARGE;
|
||||
|
||||
RiaArcCurveCalculator arc(p1, t1, p2);
|
||||
if ( arc.isOk() )
|
||||
if ( arc.curveStatus() == RiaArcCurveCalculator::OK
|
||||
|| arc.curveStatus() == RiaArcCurveCalculator::OK_STRAIGHT_LINE )
|
||||
{
|
||||
m_c1 = arc.center();
|
||||
m_n1 = arc.normal();
|
||||
m_firstArcEndpoint = p2;
|
||||
m_endAzi = arc.endAzimuth();
|
||||
m_endInc = arc.endInclination();
|
||||
m_radius = arc.radius();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -83,7 +88,6 @@ RiaJCurveCalculator::RiaJCurveCalculator(cvf::Vec3d p1, double azi1, double inc1
|
||||
m_firstArcEndpoint = p2 - d*tp11p2;
|
||||
m_c1 = c1;
|
||||
m_n1 = nc1;
|
||||
m_isCalculationOK = true;
|
||||
|
||||
RiaOffshoreSphericalCoords endTangent(tp11p2);
|
||||
m_endAzi = endTangent.azi();
|
||||
|
||||
@@ -20,29 +20,50 @@
|
||||
#include "cvfBase.h"
|
||||
#include "cvfVector3.h"
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// + p1
|
||||
/// t1 //
|
||||
/// | r1 + C
|
||||
/// \
|
||||
/// + firstArcEndpoint
|
||||
/// \
|
||||
/// \
|
||||
/// + p2
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
class RiaJCurveCalculator
|
||||
{
|
||||
public:
|
||||
RiaJCurveCalculator(cvf::Vec3d p1, double azi1, double inc1, double r1,
|
||||
cvf::Vec3d p2);
|
||||
enum CurveStatus
|
||||
{
|
||||
OK,
|
||||
OK_STRAIGHT_LINE,
|
||||
FAILED_INPUT_OVERLAP,
|
||||
FAILED_RADIUS_TOO_LARGE
|
||||
};
|
||||
|
||||
bool isOk() const { return m_isCalculationOK;}
|
||||
|
||||
cvf::Vec3d firstArcEndpoint() const { return m_firstArcEndpoint; }
|
||||
cvf::Vec3d firstCenter() const { return m_c1; }
|
||||
cvf::Vec3d firstNormal() const { return m_n1; }
|
||||
CurveStatus curveStatus() const { return m_curveStatus;}
|
||||
|
||||
double endAzimuth() const { return m_endAzi; }
|
||||
double endInclination() const { return m_endInc; }
|
||||
cvf::Vec3d firstArcEndpoint() const { return m_firstArcEndpoint; }
|
||||
|
||||
private:
|
||||
bool m_isCalculationOK;
|
||||
double radius() const { return m_radius; }
|
||||
cvf::Vec3d firstCenter() const { return m_c1; }
|
||||
cvf::Vec3d firstNormal() const { return m_n1; }
|
||||
|
||||
double endAzimuth() const { return m_endAzi; }
|
||||
double endInclination() const { return m_endInc; }
|
||||
private:
|
||||
CurveStatus m_curveStatus;
|
||||
|
||||
cvf::Vec3d m_firstArcEndpoint;
|
||||
cvf::Vec3d m_c1;
|
||||
cvf::Vec3d m_n1;
|
||||
double m_endAzi;
|
||||
double m_endInc;
|
||||
cvf::Vec3d m_firstArcEndpoint;
|
||||
|
||||
double m_radius;
|
||||
cvf::Vec3d m_c1;
|
||||
cvf::Vec3d m_n1;
|
||||
|
||||
double m_endAzi;
|
||||
double m_endInc;
|
||||
};
|
||||
|
||||
|
||||
@@ -83,6 +83,9 @@ void RiaPolyArcLineSampler::sampledPointsAndMDs(double sampleInterval,
|
||||
void RiaPolyArcLineSampler::sampleSegment(cvf::Vec3d t1, cvf::Vec3d p1, cvf::Vec3d p2, cvf::Vec3d* endTangent)
|
||||
{
|
||||
cvf::Vec3d p1p2 = p2 - p1;
|
||||
|
||||
CVF_ASSERT (p1p2.lengthSquared() > 1e-20);
|
||||
|
||||
if (cvf::GeometryTools::getAngle(t1, p1p2) < 1e-5)
|
||||
{
|
||||
sampleLine(p1, p2, endTangent);
|
||||
|
||||
Reference in new issue
Block a user