git.ucc.asn.au
/
ipdf
/
code.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Critics are panning the quadtree's panning.
[ipdf/code.git]
/
src
/
quadtree.cpp
diff --git
a/src/quadtree.cpp
b/src/quadtree.cpp
index
8474a7f
..
3d5dbee
100644
(file)
--- a/
src/quadtree.cpp
+++ b/
src/quadtree.cpp
@@
-1,5
+1,6
@@
#ifndef QUADTREE_REMOVED
#include "quadtree.h"
#ifndef QUADTREE_REMOVED
#include "quadtree.h"
+#include "document.h"
namespace IPDF {
namespace IPDF {
@@
-47,7
+48,7
@@
bool IntersectsQuadChild(const Rect& src, QuadTreeNodeChildren child_type)
if (src.y + src.h < dst.y) return false;
if (src.x > dst.x + dst.w) return false;
if (src.y > dst.y + dst.h) return false;
if (src.y + src.h < dst.y) return false;
if (src.x > dst.x + dst.w) return false;
if (src.y > dst.y + dst.h) return false;
- Debug("%s is contained in %s\n", src.Str().c_str(), dst.Str().c_str());
+
//
Debug("%s is contained in %s\n", src.Str().c_str(), dst.Str().c_str());
return true;
}
return true;
}
@@
-59,13
+60,13
@@
bool ContainedInQuadChild(const Rect& src, QuadTreeNodeChildren child_type)
if (src.y < dst.y) return false;
if (src.x + src.w > dst.x + dst.w) return false;
if (src.y + src.h > dst.y + dst.h) return false;
if (src.y < dst.y) return false;
if (src.x + src.w > dst.x + dst.w) return false;
if (src.y + src.h > dst.y + dst.h) return false;
- Debug("%s is contained in %s... \n", src.Str().c_str(), dst.Str().c_str());
+
//
Debug("%s is contained in %s... \n", src.Str().c_str(), dst.Str().c_str());
return true;
}
return true;
}
-QuadTreeIndex QuadTree::GetNeighbour(QuadTreeIndex start, int xdir, int ydir) const
+QuadTreeIndex QuadTree::GetNeighbour(QuadTreeIndex start, int xdir, int ydir
, Document *addTo
) const
{
if (!xdir && !ydir) return start;
{
if (!xdir && !ydir) return start;
@@
-79,22
+80,45
@@
QuadTreeIndex QuadTree::GetNeighbour(QuadTreeIndex start, int xdir, int ydir) co
case QTC_BOTTOM_LEFT:
{
if (nodes[start].child_type == QTC_TOP_LEFT)
case QTC_BOTTOM_LEFT:
{
if (nodes[start].child_type == QTC_TOP_LEFT)
+ {
newNode = nodes[nodes[start].parent].top_right;
newNode = nodes[nodes[start].parent].top_right;
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(nodes[start].parent, QTC_TOP_RIGHT);
+ }
+ }
else
else
+ {
newNode = nodes[nodes[start].parent].bottom_right;
newNode = nodes[nodes[start].parent].bottom_right;
-
- return GetNeighbour(newNode, xdir - 1, ydir);
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(nodes[start].parent, QTC_BOTTOM_RIGHT);
+ }
+ }
+ return GetNeighbour(newNode, xdir - 1, ydir, addTo);
}
case QTC_TOP_RIGHT:
case QTC_BOTTOM_RIGHT:
{
}
case QTC_TOP_RIGHT:
case QTC_BOTTOM_RIGHT:
{
- QuadTreeIndex right_parent = GetNeighbour(nodes[start].parent, 1, 0);
+ QuadTreeIndex right_parent = GetNeighbour(nodes[start].parent, 1, 0
, addTo
);
if (right_parent == -1) return -1;
if (nodes[start].child_type == QTC_TOP_RIGHT)
if (right_parent == -1) return -1;
if (nodes[start].child_type == QTC_TOP_RIGHT)
+ {
newNode = nodes[right_parent].top_left;
newNode = nodes[right_parent].top_left;
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(right_parent, QTC_TOP_LEFT);
+ }
+ }
else
else
+ {
newNode = nodes[right_parent].bottom_left;
newNode = nodes[right_parent].bottom_left;
- return GetNeighbour(newNode, xdir - 1, ydir);
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(right_parent, QTC_BOTTOM_LEFT);
+ }
+ }
+ return GetNeighbour(newNode, xdir - 1, ydir, addTo);
}
default:
return -1;
}
default:
return -1;
@@
-111,22
+135,46
@@
QuadTreeIndex QuadTree::GetNeighbour(QuadTreeIndex start, int xdir, int ydir) co
case QTC_BOTTOM_RIGHT:
{
if (nodes[start].child_type == QTC_TOP_RIGHT)
case QTC_BOTTOM_RIGHT:
{
if (nodes[start].child_type == QTC_TOP_RIGHT)
+ {
newNode = nodes[nodes[start].parent].top_left;
newNode = nodes[nodes[start].parent].top_left;
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(nodes[start].parent, QTC_TOP_LEFT);
+ }
+ }
else
else
+ {
newNode = nodes[nodes[start].parent].bottom_left;
newNode = nodes[nodes[start].parent].bottom_left;
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(nodes[start].parent, QTC_BOTTOM_LEFT);
+ }
+ }
- return GetNeighbour(newNode, xdir + 1, ydir);
+ return GetNeighbour(newNode, xdir + 1, ydir
, addTo
);
}
case QTC_TOP_LEFT:
case QTC_BOTTOM_LEFT:
{
}
case QTC_TOP_LEFT:
case QTC_BOTTOM_LEFT:
{
- QuadTreeIndex left_parent = GetNeighbour(nodes[start].parent, -1, 0);
+ QuadTreeIndex left_parent = GetNeighbour(nodes[start].parent, -1, 0
, addTo
);
if (left_parent == -1) return -1;
if (nodes[start].child_type == QTC_TOP_LEFT)
if (left_parent == -1) return -1;
if (nodes[start].child_type == QTC_TOP_LEFT)
+ {
newNode = nodes[left_parent].top_right;
newNode = nodes[left_parent].top_right;
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(left_parent, QTC_TOP_RIGHT);
+ }
+ }
else
else
+ {
newNode = nodes[left_parent].bottom_right;
newNode = nodes[left_parent].bottom_right;
- return GetNeighbour(newNode, xdir + 1, ydir);
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(left_parent, QTC_BOTTOM_RIGHT);
+ }
+ }
+ return GetNeighbour(newNode, xdir + 1, ydir, addTo);
}
default:
return -1;
}
default:
return -1;
@@
-142,22
+190,45
@@
QuadTreeIndex QuadTree::GetNeighbour(QuadTreeIndex start, int xdir, int ydir) co
case QTC_TOP_RIGHT:
{
if (nodes[start].child_type == QTC_TOP_LEFT)
case QTC_TOP_RIGHT:
{
if (nodes[start].child_type == QTC_TOP_LEFT)
+ {
newNode = nodes[nodes[start].parent].bottom_left;
newNode = nodes[nodes[start].parent].bottom_left;
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(nodes[start].parent, QTC_BOTTOM_LEFT);
+ }
+ }
else
else
+ {
newNode = nodes[nodes[start].parent].bottom_right;
newNode = nodes[nodes[start].parent].bottom_right;
-
- return GetNeighbour(newNode, xdir, ydir - 1);
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(nodes[start].parent, QTC_BOTTOM_RIGHT);
+ }
+ }
+ return GetNeighbour(newNode, xdir, ydir - 1, addTo);
}
case QTC_BOTTOM_LEFT:
case QTC_BOTTOM_RIGHT:
{
}
case QTC_BOTTOM_LEFT:
case QTC_BOTTOM_RIGHT:
{
- QuadTreeIndex bottom_parent = GetNeighbour(nodes[start].parent, 0, 1);
+ QuadTreeIndex bottom_parent = GetNeighbour(nodes[start].parent, 0, 1
, addTo
);
if (bottom_parent == -1) return -1;
if (nodes[start].child_type == QTC_BOTTOM_LEFT)
if (bottom_parent == -1) return -1;
if (nodes[start].child_type == QTC_BOTTOM_LEFT)
+ {
newNode = nodes[bottom_parent].top_left;
newNode = nodes[bottom_parent].top_left;
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(bottom_parent, QTC_TOP_LEFT);
+ }
+ }
else
else
+ {
newNode = nodes[bottom_parent].top_right;
newNode = nodes[bottom_parent].top_right;
- return GetNeighbour(newNode, xdir, ydir - 1);
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(bottom_parent, QTC_TOP_RIGHT);
+ }
+ }
+ return GetNeighbour(newNode, xdir, ydir - 1, addTo);
}
default:
return -1;
}
default:
return -1;
@@
-173,22
+244,45
@@
QuadTreeIndex QuadTree::GetNeighbour(QuadTreeIndex start, int xdir, int ydir) co
case QTC_BOTTOM_RIGHT:
{
if (nodes[start].child_type == QTC_BOTTOM_LEFT)
case QTC_BOTTOM_RIGHT:
{
if (nodes[start].child_type == QTC_BOTTOM_LEFT)
+ {
newNode = nodes[nodes[start].parent].top_left;
newNode = nodes[nodes[start].parent].top_left;
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(nodes[start].parent, QTC_TOP_LEFT);
+ }
+ }
else
else
+ {
newNode = nodes[nodes[start].parent].top_right;
newNode = nodes[nodes[start].parent].top_right;
-
- return GetNeighbour(newNode, xdir, ydir + 1);
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(nodes[start].parent, QTC_TOP_RIGHT);
+ }
+ }
+ return GetNeighbour(newNode, xdir, ydir + 1, addTo);
}
case QTC_TOP_LEFT:
case QTC_TOP_RIGHT:
{
}
case QTC_TOP_LEFT:
case QTC_TOP_RIGHT:
{
- QuadTreeIndex top_parent = GetNeighbour(nodes[start].parent, 0, -1);
+ QuadTreeIndex top_parent = GetNeighbour(nodes[start].parent, 0, -1
, addTo
);
if (top_parent == -1) return -1;
if (nodes[start].child_type == QTC_TOP_LEFT)
if (top_parent == -1) return -1;
if (nodes[start].child_type == QTC_TOP_LEFT)
+ {
newNode = nodes[top_parent].bottom_left;
newNode = nodes[top_parent].bottom_left;
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(top_parent, QTC_BOTTOM_LEFT);
+ }
+ }
else
else
+ {
newNode = nodes[top_parent].bottom_right;
newNode = nodes[top_parent].bottom_right;
- return GetNeighbour(newNode, xdir, ydir + 1);
+ if (addTo && newNode == -1)
+ {
+ newNode = addTo->GenQuadChild(top_parent, QTC_BOTTOM_RIGHT);
+ }
+ }
+ return GetNeighbour(newNode, xdir, ydir + 1, addTo);
}
default:
return -1;
}
default:
return -1;
UCC
git Repository :: git.ucc.asn.au