git.ucc.asn.au
/
ipdf
/
code.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
64b7c42
)
Improve adding things to quadtree (still broken, though)
author
David Gow
<
[email protected]
>
Sat, 4 Oct 2014 13:08:59 +0000
(21:08 +0800)
committer
David Gow
<
[email protected]
>
Sat, 4 Oct 2014 13:08:59 +0000
(21:08 +0800)
src/document.cpp
patch
|
blob
|
history
diff --git
a/src/document.cpp
b/src/document.cpp
index
c41c848
..
7dda475
100644
(file)
--- a/
src/document.cpp
+++ b/
src/document.cpp
@@
-173,11
+173,14
@@
QuadTreeIndex Document::GenQuadChild(QuadTreeIndex parent, QuadTreeNodeChildren
m_quadtree.nodes.push_back(QuadTreeNode{QUADTREE_EMPTY, QUADTREE_EMPTY, QUADTREE_EMPTY, QUADTREE_EMPTY, parent, type, 0, 0, -1});
m_quadtree.nodes[new_index].object_begin = m_objects.bounds.size();
m_quadtree.nodes.push_back(QuadTreeNode{QUADTREE_EMPTY, QUADTREE_EMPTY, QUADTREE_EMPTY, QUADTREE_EMPTY, parent, type, 0, 0, -1});
m_quadtree.nodes[new_index].object_begin = m_objects.bounds.size();
- for (
unsigned i = m_quadtree.nodes[parent].object_begin; i < m_quadtree.nodes[parent].object_end; ++i
)
+ for (
QuadTreeIndex overlay = parent; overlay != -1; overlay = m_quadtree.nodes[overlay].next_overlay
)
{
{
-
if (IntersectsQuadChild(m_objects.bounds[i], type)
)
+
for (unsigned i = m_quadtree.nodes[overlay].object_begin; i < m_quadtree.nodes[overlay].object_end; ++i
)
{
{
- m_count += ClipObjectToQuadChild(i, type);
+ if (IntersectsQuadChild(m_objects.bounds[i], type))
+ {
+ m_count += ClipObjectToQuadChild(i, type);
+ }
}
}
m_quadtree.nodes[new_index].object_end = m_objects.bounds.size();
}
}
m_quadtree.nodes[new_index].object_end = m_objects.bounds.size();
@@
-208,12
+211,15
@@
QuadTreeIndex Document::GenQuadParent(QuadTreeIndex child, QuadTreeNodeChildren
m_quadtree.nodes.push_back(QuadTreeNode{QUADTREE_EMPTY, QUADTREE_EMPTY, QUADTREE_EMPTY, QUADTREE_EMPTY, -1, QTC_UNKNOWN, 0, 0, -1});
m_quadtree.nodes[new_index].object_begin = m_objects.bounds.size();
m_quadtree.nodes.push_back(QuadTreeNode{QUADTREE_EMPTY, QUADTREE_EMPTY, QUADTREE_EMPTY, QUADTREE_EMPTY, -1, QTC_UNKNOWN, 0, 0, -1});
m_quadtree.nodes[new_index].object_begin = m_objects.bounds.size();
- for (
unsigned i = m_quadtree.nodes[child].object_begin; i < m_quadtree.nodes[child].object_end; ++i
)
+ for (
QuadTreeIndex overlay = child; overlay != -1; overlay = m_quadtree.nodes[overlay].next_overlay
)
{
{
- m_objects.bounds.push_back(TransformFromQuadChild(m_objects.bounds[i], type));
- m_objects.types.push_back(m_objects.types[i]);
- m_objects.data_indices.push_back(m_objects.data_indices[i]);
- m_count++;
+ for (unsigned i = m_quadtree.nodes[overlay].object_begin; i < m_quadtree.nodes[overlay].object_end; ++i)
+ {
+ m_objects.bounds.push_back(TransformFromQuadChild(m_objects.bounds[i], type));
+ m_objects.types.push_back(m_objects.types[i]);
+ m_objects.data_indices.push_back(m_objects.data_indices[i]);
+ m_count++;
+ }
}
m_quadtree.nodes[new_index].object_end = m_objects.bounds.size();
switch (type)
}
m_quadtree.nodes[new_index].object_end = m_objects.bounds.size();
switch (type)
@@
-334,20
+340,23
@@
unsigned Document::Add(ObjectType type, const Rect & bounds, unsigned data_index
#ifndef QUADTREE_DISABLED
if (qti != -1)
{
#ifndef QUADTREE_DISABLED
if (qti != -1)
{
-
if (m_count == m_quadtree.nodes[qti].object_end+
1)
+
while (m_quadtree.nodes[qti].next_overlay != -
1)
{
{
- m_quadtree.nodes[qti].object_end++;
- }
- else
- {
- QuadTreeIndex overlay = m_quadtree.nodes.size();
- m_quadtree.nodes.push_back(m_quadtree.nodes[qti]);
- m_quadtree.nodes[overlay].object_begin = m_count;
- m_quadtree.nodes[overlay].object_end = m_count+1;
- m_quadtree.nodes[qti].next_overlay = overlay;
+ if (m_count == m_quadtree.nodes[qti].object_end+1)
+ {
+ m_quadtree.nodes[qti].object_end++;
+ goto done;
+ }
+ qti = m_quadtree.nodes[qti].next_overlay;
}
}
+ QuadTreeIndex overlay = m_quadtree.nodes.size();
+ m_quadtree.nodes.push_back(m_quadtree.nodes[qti]);
+ m_quadtree.nodes[overlay].object_begin = m_count;
+ m_quadtree.nodes[overlay].object_end = m_count+1;
+ m_quadtree.nodes[qti].next_overlay = overlay;
}
#endif
}
#endif
+done:
return (m_count++); // Why can't we just use the size of types or something?
}
return (m_count++); // Why can't we just use the size of types or something?
}
UCC
git Repository :: git.ucc.asn.au