WSF
ContourFilter2D.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef CONTOURFILTER2D_HPP
13#define CONTOURFILTER2D_HPP
14
15#include <cstddef> // for size_t
16#include <list>
17#include <vector>
18
20
22{
23public:
27 {
28 public:
29 Function2D() = default;
30 Function2D(const Function2D&) = default;
31 virtual ~Function2D() {}
32 virtual double GetX(size_t aX_Index, size_t aY_Index) = 0;
33 virtual double GetY(size_t aX_Index, size_t aY_Index) = 0;
34 virtual double GetValue(size_t aX_Index, size_t aY_Index) = 0;
35 };
36
38
39 struct Point
40 {
41 double mX;
42 double mY;
43 };
44
46
47 using Line = std::vector<Point>;
48
50
51 using LineList = std::list<Line>;
52 using LineListIter = std::list<Line>::const_iterator;
53
55
56 virtual ~ContourFilter2D();
57
58 void Contour(Function2D* aFunctionPtr,
59 size_t aBegX_Index,
60 size_t aEndX_Index,
61 size_t aBegY_Index,
62 size_t aEndY_Index,
63 double aValue,
64 LineList& aLineList);
65
66private:
67 ContourFilter2D(const ContourFilter2D& aSrc) = delete; // not impl.
68 ContourFilter2D& operator=(const ContourFilter2D& aRhs) = delete; // not impl.
69
70 enum EdgeType
71 {
72 EtBottomEdge = 1,
73 EtRightEdge = 2,
74 EtTopEdge = 3,
75 EtLeftEdge = 4
76 };
77
78 struct PendingEdge
79 {
80 size_t mX_Index;
81 size_t mY_Index;
82 };
83
84 void TraceContour(EdgeType aEdgeType, size_t aX_IndexAbove, size_t aY_IndexAbove, Line& aLine);
85
86 Function2D* mFunctionPtr;
87 size_t mBegX_Index;
88 size_t mEndX_Index;
89 size_t mBegY_Index;
90 size_t mEndY_Index;
91 double mValue;
92
93 std::vector<PendingEdge> mPendingEdges;
94};
95
96#endif
Definition ContourFilter2D.hpp:27
Function2D(const Function2D &)=default
virtual double GetY(size_t aX_Index, size_t aY_Index)=0
virtual double GetValue(size_t aX_Index, size_t aY_Index)=0
virtual double GetX(size_t aX_Index, size_t aY_Index)=0
virtual ~Function2D()
Definition ContourFilter2D.hpp:31
std::vector< Point > Line
A 'Line' represents a continuous contour line.
Definition ContourFilter2D.hpp:47
ContourFilter2D()
Definition ContourFilter2D.cpp:113
void Contour(Function2D *aFunctionPtr, size_t aBegX_Index, size_t aEndX_Index, size_t aBegY_Index, size_t aEndY_Index, double aValue, LineList &aLineList)
Definition ContourFilter2D.cpp:126
virtual ~ContourFilter2D()
Definition ContourFilter2D.cpp:124
std::list< Line >::const_iterator LineListIter
Definition ContourFilter2D.hpp:52
std::list< Line > LineList
LineList is just a list of 'Line's.
Definition ContourFilter2D.hpp:51
A 'Point' is one point on an continuous contour line.
Definition ContourFilter2D.hpp:40
double mX
Definition ContourFilter2D.hpp:41
double mY
Definition ContourFilter2D.hpp:42
Copyrights Multiple, All Rights Reserved