#3934 Implement area threshold for contour polygons

This commit is contained in:
Gaute Lindkvist
2019-01-08 11:32:55 +01:00
parent c8f9505d1e
commit 7fccdf7153
3 changed files with 18 additions and 11 deletions

View File

@@ -216,7 +216,8 @@ void caf::ContourLines::create(const std::vector<double>& dataXY, const std::vec
std::vector<caf::ContourLines::ClosedPolygons> caf::ContourLines::create(const std::vector<double>& dataXY,
const std::vector<double>& xPositions,
const std::vector<double>& yPositions,
const std::vector<double>& contourLevels)
const std::vector<double>& contourLevels,
double areaThreshold)
{
const double eps = 1.0e-4;
std::vector<std::vector<cvf::Vec2d>> contourLineSegments;
@@ -291,15 +292,17 @@ std::vector<caf::ContourLines::ClosedPolygons> caf::ContourLines::create(const s
signedArea += (closedPolygonDeque[j + 1].x() - closedPolygonDeque[j].x()) *
(closedPolygonDeque[j + 1].y() + closedPolygonDeque[j].y());
}
if (signedArea < 0.0)
if (std::abs(signedArea) > areaThreshold)
{
closedPolygonsPerLevel[i].emplace_back(closedPolygonDeque.rbegin(), closedPolygonDeque.rend());
if (signedArea < 0.0)
{
closedPolygonsPerLevel[i].emplace_back(closedPolygonDeque.rbegin(), closedPolygonDeque.rend());
}
else
{
closedPolygonsPerLevel[i].emplace_back(closedPolygonDeque.begin(), closedPolygonDeque.end());
}
}
else
{
closedPolygonsPerLevel[i].emplace_back(closedPolygonDeque.begin(), closedPolygonDeque.end());
}
closedPolygonDeque.clear();
}
}

View File

@@ -25,7 +25,9 @@
#include "cvfBase.h"
#include "cvfVector2.h"
#include <deque>
#include <limits>
#include <vector>
namespace caf
@@ -39,7 +41,8 @@ public:
static std::vector<ClosedPolygons> create(const std::vector<double>& dataXY,
const std::vector<double>& xPositions,
const std::vector<double>& yPositions,
const std::vector<double>& contourLevels);
const std::vector<double>& contourLevels,
double areaTreshold = std::numeric_limits<double>::infinity());
private:
static void create(const std::vector<double>& dataXY,