Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
OpenVolumeMesh
OpenVolumeMesh
Commits
1a7b3fca
Commit
1a7b3fca
authored
Jul 18, 2018
by
Martin Heistermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Track number of deleted entities and add n_logical_*() methods as per
#8
parent
ad214e55
Pipeline
#7325
passed with stage
in 8 minutes and 12 seconds
Changes
2
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
50 additions
and
31 deletions
+50
-31
src/OpenVolumeMesh/Core/TopologyKernel.cc
src/OpenVolumeMesh/Core/TopologyKernel.cc
+30
-29
src/OpenVolumeMesh/Core/TopologyKernel.hh
src/OpenVolumeMesh/Core/TopologyKernel.hh
+20
-2
No files found.
src/OpenVolumeMesh/Core/TopologyKernel.cc
View file @
1a7b3fca
...
...
@@ -64,8 +64,7 @@ TopologyKernel::TopologyKernel() :
e_bottom_up_
(
true
),
f_bottom_up_
(
true
),
deferred_deletion
(
true
),
fast_deletion
(
true
),
needs_garbage_collection_
(
false
)
fast_deletion
(
true
)
{
}
...
...
@@ -720,42 +719,44 @@ CellIter TopologyKernel::delete_cell(const CellHandle& _h) {
*/
void
TopologyKernel
::
collect_garbage
()
{
if
(
!
deferred_deletion_enabled
()
||
!
needs_garbage_collection
_
)
if
(
!
deferred_deletion_enabled
()
||
!
needs_garbage_collection
()
)
return
;
// nothing todo
deferred_deletion
=
false
;
for
(
int
i
=
(
int
)
n_cells
();
i
>
0
;
--
i
)
if
(
is_deleted
(
CellHandle
(
i
-
1
)))
{
cell_deleted_
[
i
-
1
]
=
false
;
delete_cell_core
(
CellHandle
(
i
-
1
));
for
(
int
i
=
(
int
)
n_cells
();
i
>
0
;
--
i
)
{
if
(
is_deleted
(
CellHandle
(
i
-
1
)))
{
cell_deleted_
[
i
-
1
]
=
false
;
delete_cell_core
(
CellHandle
(
i
-
1
));
}
for
(
int
i
=
(
int
)
n_faces
();
i
>
0
;
--
i
)
if
(
is_deleted
(
FaceHandle
(
i
-
1
)))
{
face_deleted_
[
i
-
1
]
=
false
;
delete_face_core
(
FaceHandle
(
i
-
1
));
}
n_deleted_cells_
=
0
;
for
(
int
i
=
(
int
)
n_
edg
es
();
i
>
0
;
--
i
)
if
(
is_deleted
(
Edg
eHandle
(
i
-
1
)))
{
edge_
delete
d_
[
i
-
1
]
=
false
;
delete_edge_core
(
EdgeHandle
(
i
-
1
));
for
(
int
i
=
(
int
)
n_
fac
es
();
i
>
0
;
--
i
)
{
if
(
is_deleted
(
Fac
eHandle
(
i
-
1
)))
{
face_deleted_
[
i
-
1
]
=
false
;
delete
_face_core
(
FaceHandle
(
i
-
1
))
;
}
}
n_deleted_faces_
=
0
;
for
(
int
i
=
(
int
)
n_
vertic
es
();
i
>
0
;
--
i
)
if
(
is_deleted
(
Vertex
Handle
(
i
-
1
)))
{
vertex_deleted_
[
i
-
1
]
=
false
;
delete_vertex_core
(
VertexHandle
(
i
-
1
));
for
(
int
i
=
(
int
)
n_
edg
es
();
i
>
0
;
--
i
)
{
if
(
is_deleted
(
Edge
Handle
(
i
-
1
)))
{
edge_deleted_
[
i
-
1
]
=
false
;
delete_edge_core
(
EdgeHandle
(
i
-
1
))
;
}
}
n_deleted_edges_
=
0
;
for
(
int
i
=
(
int
)
n_vertices
();
i
>
0
;
--
i
)
{
if
(
is_deleted
(
VertexHandle
(
i
-
1
)))
{
vertex_deleted_
[
i
-
1
]
=
false
;
delete_vertex_core
(
VertexHandle
(
i
-
1
));
}
}
n_deleted_vertices_
=
0
;
deferred_deletion
=
true
;
needs_garbage_collection_
=
false
;
}
...
...
@@ -922,7 +923,7 @@ VertexIter TopologyKernel::delete_vertex_core(const VertexHandle& _h) {
if
(
deferred_deletion_enabled
())
{
needs_garbage_collection_
=
true
;
++
n_deleted_vertices_
;
vertex_deleted_
[
h
.
idx
()]
=
true
;
// deleted_vertices_.push_back(h);
...
...
@@ -1050,7 +1051,7 @@ EdgeIter TopologyKernel::delete_edge_core(const EdgeHandle& _h) {
if
(
deferred_deletion_enabled
())
{
needs_garbage_collection_
=
true
;
++
n_deleted_edges_
;
edge_deleted_
[
h
.
idx
()]
=
true
;
// deleted_edges_.push_back(h);
...
...
@@ -1235,7 +1236,7 @@ FaceIter TopologyKernel::delete_face_core(const FaceHandle& _h) {
if
(
deferred_deletion_enabled
())
{
needs_garbage_collection_
=
true
;
++
n_deleted_faces_
;
face_deleted_
[
h
.
idx
()]
=
true
;
// deleted_faces_.push_back(h);
...
...
@@ -1394,7 +1395,7 @@ CellIter TopologyKernel::delete_cell_core(const CellHandle& _h) {
if
(
deferred_deletion_enabled
())
{
needs_garbage
_c
o
ll
ection_
=
true
;
++
n_deleted
_c
e
ll
s_
;
cell_deleted_
[
h
.
idx
()]
=
true
;
// deleted_cells_.push_back(h);
// deleted_cells_set.insert(h);
...
...
src/OpenVolumeMesh/Core/TopologyKernel.hh
View file @
1a7b3fca
...
...
@@ -331,6 +331,19 @@ public:
/// Get number of cells in mesh
virtual
size_t
n_cells
()
const
{
return
cells_
.
size
();
}
/// Get number of undeleted vertices in mesh
size_t
n_logical_vertices
()
const
{
return
n_vertices_
-
n_deleted_vertices_
;
}
/// Get number of undeleted edges in mesh
size_t
n_logical_edges
()
const
{
return
edges_
.
size
()
-
n_deleted_edges_
;
}
/// Get number of undeleted halfedges in mesh
size_t
n_logical_halfedges
()
const
{
return
n_logical_edges
()
*
2u
;
}
/// Get number of undeleted faces in mesh
size_t
n_logical_faces
()
const
{
return
faces_
.
size
()
-
n_deleted_faces_
;
}
/// Get number of undeleted halffaces in mesh
size_t
n_logical_halffaces
()
const
{
return
n_faces
()
*
2u
;
}
/// Get number of undeleted cells in mesh
size_t
n_logical_cells
()
const
{
return
cells_
.
size
()
-
n_deleted_cells_
;
}
int
genus
()
const
{
int
g
=
(
1
-
(
int
)(
n_vertices
()
-
...
...
@@ -952,7 +965,7 @@ public:
}
bool
inline
needs_garbage_collection
()
const
{
return
n
eeds_garbage_collection_
;
return
n
_deleted_vertices_
>
0
||
n_deleted_edges_
>
0
||
n_deleted_faces_
>
0
||
n_deleted_cells_
>
0
;
}
protected:
...
...
@@ -970,7 +983,12 @@ protected:
std
::
vector
<
bool
>
edge_deleted_
;
std
::
vector
<
bool
>
face_deleted_
;
std
::
vector
<
bool
>
cell_deleted_
;
bool
needs_garbage_collection_
;
// number of elements deleted, but not yet garbage collected
size_t
n_deleted_vertices_
=
0
;
size_t
n_deleted_edges_
=
0
;
size_t
n_deleted_faces_
=
0
;
size_t
n_deleted_cells_
=
0
;
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment