OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimQuadTreeWarp.h
Go to the documentation of this file.
1 //*******************************************************************
2 // Copyright (C) 2000 ImageLinks Inc.
3 //
4 // License: See top level LICENSE.txt file.
5 //
6 // Author: Garrett Potts
7 //
8 //*************************************************************************
9 // $Id: ossimQuadTreeWarp.h 15766 2009-10-20 12:37:09Z gpotts $
10 #ifndef ossimQuadTreeWarp_HEADER
11 #define ossimQuadTreeWarp_HEADER
12 
13 #include <ossim/base/ossimDpt.h>
14 #include <ossim/base/ossimDrect.h>
19 #include <vector>
20 #include <iosfwd>
21 
23 
25 {
26 public:
28  const ossimQuadTreeWarpVertex& rhs);
29 
30  ossimQuadTreeWarpVertex(const ossimDpt& position=ossimDpt(0,0),
31  const ossimDpt& delta=ossimDpt(0,0));
32 
34 
35  void setPosition(const ossimDpt& position);
36 
37  void setDelta(const ossimDpt& delta);
38 
39  const ossimDpt& getDelta()const;
40 
41  const ossimDpt& getPosition()const;
42 
43  void addSharedNode(ossimQuadTreeWarpNode* node);
44 
45  void removeNode(ossimQuadTreeWarpNode* node);
46 
47  bool isShared()const;
48 
49  bool saveState(ossimKeywordlist& kwl,
50  const char* prefix)const;
51 
52  bool loadState(const ossimKeywordlist& kwl,
53  const char* prefix);
54 
55  std::vector<ossimQuadTreeWarpNode*> theSharedNodeList;
56 
60 
61 };
62 
64 {
65 public:
67  const ossimQuadTreeWarpNode& rhs);
68 
70 
71  ossimQuadTreeWarpNode(const ossimDrect& bounds,
72  ossimQuadTreeWarpNode* parent=NULL,
77 
79 
80  bool hasValidVertices()const;
81 
83 
84  void removeVertices();
85 
86  bool isLeaf()const;
87 
88  void clear();
89 
91  bool saveState(ossimKeywordlist& kwl,
92  const char* prefix = 0)const;
93 
94  bool loadState(const ossimKeywordlist& kwl,
95  const char* prefix = 0);
96 
103 
104  std::vector<ossimQuadTreeWarpNode*> theChildren;
105 };
106 
108 {
109 public:
110  friend std::ostream& operator<<(std::ostream& out,
111  const ossimQuadTreeWarp& rhs);
112 
114 
115  ossimQuadTreeWarp(const ossimDrect& boundingRect,
116  const ossimDpt& ulShift=ossimDpt(0,0),
117  const ossimDpt& urShift=ossimDpt(0,0),
118  const ossimDpt& lrShift=ossimDpt(0,0),
119  const ossimDpt& llShift=ossimDpt(0,0));
120 
122 
123  virtual ossimObject* dup()const;
124 
125 
126  virtual ossimDpt getOrigin()const;
127 
128  void create(const ossimDrect& boundingRect,
129  const ossimDpt& ulShift=ossimDpt(0,0),
130  const ossimDpt& urShift=ossimDpt(0,0),
131  const ossimDpt& lrShift=ossimDpt(0,0),
132  const ossimDpt& llShift=ossimDpt(0,0));
133 
137  virtual void forward(const ossimDpt& pt,
138  ossimDpt& result)const;
142  virtual void forward(ossimDpt& pt)const;
143 
144 // void inverse(const ossimDpt& input,
145 // ossimDpt& output) const;
146 
147  virtual std::ostream& print(std::ostream& out) const;
148  virtual void printVertices(std::ostream& out)const;
149 
151 
152  const ossimQuadTreeWarpNode* getRoot()const;
153 
154  bool isEmpty()const;
155 
157 
163  ossimQuadTreeWarpVertex* findVertex(const ossimDpt& position);
164 
169  ossimQuadTreeWarpVertex* getVertex(const ossimDpt& position);
170 
174  void getShift(ossimDpt& result,
175  const ossimDpt& pt)const;
176 
182  void pruneTree(ossimQuadTreeWarpNode* node);
183 
184  // Search methods
186 
187  const ossimQuadTreeWarpNode* findNode(const ossimDpt& pt)const;
188 
192  ossimDpt getShift(const ossimDpt& pt)const;
193 
194  void clear();
195 
196  void split(const ossimDpt& point,
197  double splitHoriCoefficient=0.0,
198  double splitVertCoefficient=0.0);
199 
206  void split(ossimQuadTreeWarpNode* node,
207  double splitHoriCoefficient=.5,
208  double splitVertCoefficient=.5);
209 
210 
212  const ossimDpt& pt)const;
213 
215  const ossimDpt& pt);
216 
217  void findAllNodes(std::vector<ossimQuadTreeWarpNode*>& result,
218  const ossimDpt& pt);
219  void findAllNodes(std::vector<const ossimQuadTreeWarpNode*>& result,
220  const ossimDpt& pt)const;
221  void findAllNodes(std::vector<ossimQuadTreeWarpNode*>& result,
222  ossimQuadTreeWarpNode* node,
223  const ossimDpt& pt);
224  void findAllNodes(std::vector<const ossimQuadTreeWarpNode*>& result,
225  ossimQuadTreeWarpNode* node,
226  const ossimDpt& pt)const;
227 
228  bool isOnEdge(ossimQuadTreeWarpNode* node,
229  const ossimDpt& point)const;
230 
231  bool isOnPoint(ossimQuadTreeWarpNode* node,
232  const ossimDpt& point)const;
233 
235 
236  const std::vector<ossimQuadTreeWarpVertex*>& getVertices()const;
237 
238  void setWarpEnabledFlag(bool flag);
239 
240  void setToIdentity();
241 
242  virtual bool saveState(ossimKeywordlist& kwl,
243  const char* prefix=0)const;
244 
245  virtual bool loadState(const ossimKeywordlist& kwl,
246  const char* prefix=0);
247 
248 
249 protected:
250  virtual ~ossimQuadTreeWarp();
253  std::vector<ossimQuadTreeWarpVertex*> theVertexList;
254 
255  void getShift(ossimDpt& result,
256  const ossimQuadTreeWarpNode* node,
257  const ossimDpt& pt)const;
258 
260  void pruneSharedVertices();
262 
263  void recursivePrint(std::ostream& out,
264  ossimQuadTreeWarpNode* node)const;
266 
267  void getNewQuads(ossimQuadTreeWarpNode* parent,
268  const ossimDrect& ul,
269  const ossimDrect& ur,
270  const ossimDrect& lr,
271  const ossimDrect& ll,
272  ossimQuadTreeWarpNode*& ulNode,
273  ossimQuadTreeWarpNode*& urNode,
274  ossimQuadTreeWarpNode*& lrNode,
275  ossimQuadTreeWarpNode*& llNode);
276 
279 
281  ossimKeywordlist& kwl,
282  const char* prefix)const;
283 
285  const ossimKeywordlist& kwl,
286  const char* prefix);
287 
288 // bool resetAllSharedLists();
289 
290 TYPE_DATA
291 };
292 
293 #endif
virtual std::ostream & print(std::ostream &out) const
Generic print method.
ossimQuadTreeWarpNode * theParent
friend std::ostream & operator<<(std::ostream &out, const ossimQuadTreeWarpNode &rhs)
ossimQuadTreeWarpVertex * findClosestVertex(ossimDpt &position)
bool isOnEdge(ossimQuadTreeWarpNode *node, const ossimDpt &point) const
#define OSSIMDLLEXPORT
ossimQuadTreeWarpNode * theTree
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Represents serializable keyword/value map.
void removeChild(ossimQuadTreeWarpNode *node)
bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
void updateDelta(ossimQuadTreeWarpVertex *v)
ossimQuadTreeWarpVertex * theLrVertex
virtual void forward(const ossimDpt &pt, ossimDpt &result) const
void findAllNodes(std::vector< ossimQuadTreeWarpNode *> &result, const ossimDpt &pt)
void getShift(ossimDpt &result, const ossimDpt &pt) const
void split(const ossimDpt &point, double splitHoriCoefficient=0.0, double splitVertCoefficient=0.0)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
void recursivePrint(std::ostream &out, ossimQuadTreeWarpNode *node) const
void pruneTree(ossimQuadTreeWarpNode *node)
bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
bool recursiveLoad(ossimQuadTreeWarpNode *node, const ossimKeywordlist &kwl, const char *prefix)
ostream & operator<<(ostream &out, const ossimAxes &axes)
Definition: ossimAxes.h:88
void recursivePruneTree(ossimQuadTreeWarpNode *node)
#define TYPE_DATA
Definition: ossimRtti.h:339
virtual ossimObject * dup() const
std::vector< ossimQuadTreeWarpNode * > theChildren
void removeVertex(ossimQuadTreeWarpVertex *v)
ossimQuadTreeWarpVertex * theUlVertex
const std::vector< ossimQuadTreeWarpVertex * > & getVertices() const
bool recursiveSave(ossimQuadTreeWarpNode *node, ossimKeywordlist &kwl, const char *prefix) const
ossimQuadTreeWarpNode * findNode(const ossimDpt &pt)
ossimQuadTreeWarpVertex * theLlVertex
void getNewQuads(ossimQuadTreeWarpNode *parent, const ossimDrect &ul, const ossimDrect &ur, const ossimDrect &lr, const ossimDrect &ll, ossimQuadTreeWarpNode *&ulNode, ossimQuadTreeWarpNode *&urNode, ossimQuadTreeWarpNode *&lrNode, ossimQuadTreeWarpNode *&llNode)
ossimQuadTreeWarpVertex * getVertex(const ossimDpt &position)
ossimQuadTreeWarpVertex * theUrVertex
bool isOnPoint(ossimQuadTreeWarpNode *node, const ossimDpt &point) const
void create(const ossimDrect &boundingRect, const ossimDpt &ulShift=ossimDpt(0, 0), const ossimDpt &urShift=ossimDpt(0, 0), const ossimDpt &lrShift=ossimDpt(0, 0), const ossimDpt &llShift=ossimDpt(0, 0))
void recursiveDelete(ossimQuadTreeWarpNode *node)
virtual ossimDpt getOrigin() const
ossimQuadTreeWarpVertex * findVertex(const ossimDpt &position)
void removeSharedVertex(ossimQuadTreeWarpVertex *v)
ossimQuadTreeWarpNode * getRoot()
std::vector< ossimQuadTreeWarpVertex * > theVertexList
std::vector< ossimQuadTreeWarpNode * > theSharedNodeList
friend std::ostream & operator<<(std::ostream &out, const ossimQuadTreeWarp &rhs)
void updateLockFlag(ossimQuadTreeWarpVertex *v)
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
void setWarpEnabledFlag(bool flag)
virtual void printVertices(std::ostream &out) const