* mln/topo/is_simple_cell.hh: Add static preconditions.
Reduce the number of pointer manipulations.
Aesthetic changes.
* mln/topo/detach_cell.hh: Move a static precondition.
Aesthetic changes.
* mln/io/vtk/save.hh: Cosmetic changes.
---
milena/ChangeLog | 11 +++++++++++
milena/mln/io/vtk/save.hh | 8 ++++++--
milena/mln/topo/detach_cell.hh | 22 ++++++++++++----------
milena/mln/topo/is_simple_cell.hh | 24 ++++++++++++++----------
4 files changed, 43 insertions(+), 22 deletions(-)
diff --git a/milena/ChangeLog b/milena/ChangeLog
index aa71fb7..63b6054 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,5 +1,16 @@
2011-03-14 Roland Levillain <roland(a)lrde.epita.fr>
+ Miscellaneous changes in mesh-related operations.
+
+ * mln/topo/is_simple_cell.hh: Add static preconditions.
+ Reduce the number of pointer manipulations.
+ Aesthetic changes.
+ * mln/topo/detach_cell.hh: Move a static precondition.
+ Aesthetic changes.
+ * mln/io/vtk/save.hh: Cosmetic changes.
+
+2011-03-14 Roland Levillain <roland(a)lrde.epita.fr>
+
New apps: max curvature-based thinnings using 2- and 1-collapses.
* apps/mesh-segm-skel/mesh-complex-max-curv-2-collapse.cc,
diff --git a/milena/mln/io/vtk/save.hh b/milena/mln/io/vtk/save.hh
index fbe5a85..142608a 100644
--- a/milena/mln/io/vtk/save.hh
+++ b/milena/mln/io/vtk/save.hh
@@ -1,4 +1,4 @@
-// Copyright (C) 2008, 2009, 2010 EPITA Research and Development
+// Copyright (C) 2008, 2009, 2010, 2011 EPITA Research and Development
// Laboratory (LRDE)
//
// This file is part of Olena.
@@ -269,7 +269,7 @@ namespace mln
/* ``1. The first part is the file version and
identifier. This part contains the single line:
- # vtk DataFile Version x.x.
+ # vtk DataFile Version x.x.
This line must be exactly as shown with the
exception of the version number x.x, which will vary
@@ -492,6 +492,10 @@ namespace mln
ostr << std::endl;
}
+ // -------------------- //
+ // Dataset attributes. //
+ // -------------------- //
+
/* ``5. The final part describes the dataset attributes.
This part begins with the keywords POINT_DATA or
CELL_DATA,followed by an integer number specifying
diff --git a/milena/mln/topo/detach_cell.hh b/milena/mln/topo/detach_cell.hh
index 761142e..0bf442c 100644
--- a/milena/mln/topo/detach_cell.hh
+++ b/milena/mln/topo/detach_cell.hh
@@ -30,10 +30,15 @@
/// \file
/// \brief Detaching a cell from a binary (probably complex-based) image.
+# include <mln/core/concept/function.hh>
+# include <mln/core/concept/image.hh>
+# include <mln/core/concept/neighborhood.hh>
+
# include <mln/core/site_set/p_set.hh>
-# include <mln/core/image/complex_image.hh>
+
# include <mln/make/detachment.hh>
+
namespace mln
{
@@ -66,7 +71,7 @@ namespace mln
\pre \a ima is an image of Boolean values.
\param ima The input image from which the cell is to be
- detached.
+ detached.
\param nbh An adjacency relationship between faces
(should return the set of (n-1)- and (n+1)-faces
adjacent to an n-face). */
@@ -80,14 +85,10 @@ namespace mln
\pre \a ima is an image of Boolean values. */
void set_image(mln::Image<I>& ima);
- /** Detach the cell corresponding to \a f from \a ima.
+ /** Detach the cell corresponding to \a f from \a ima_.
- \param f The psite corresponding to the cell to detach.
- \param nbh An adjacency relationship between faces
- (should return the set of (n-1)- and (n+1)-faces
- adjacent to an n-face). */
- void
- operator()(const mln_psite(I)& f);
+ \param f The psite corresponding to the cell to detach. */
+ void operator()(const mln_psite(I)& f);
private:
I* ima_;
@@ -95,6 +96,7 @@ namespace mln
};
+
# ifndef MLN_INCLUDE_ONLY
template <typename I, typename N>
@@ -102,6 +104,7 @@ namespace mln
detach_cell<I, N>::detach_cell(const Neighborhood<N>& nbh)
: ima_(0), nbh_(exact(nbh))
{
+ mlc_equal(mln_value(I), bool)::check();
}
template <typename I, typename N>
@@ -118,7 +121,6 @@ namespace mln
void
detach_cell<I, N>::set_image(mln::Image<I>& ima)
{
- mlc_equal(mln_value(I), bool)::check();
ima_ = exact(&ima);
}
diff --git a/milena/mln/topo/is_simple_cell.hh b/milena/mln/topo/is_simple_cell.hh
index 8796c16..9f1491a 100644
--- a/milena/mln/topo/is_simple_cell.hh
+++ b/milena/mln/topo/is_simple_cell.hh
@@ -34,15 +34,15 @@
# include <mln/core/concept/image.hh>
# include <mln/core/site_set/p_set.hh>
-# include <mln/core/site_set/complex_psite.hh>
-# include <mln/core/site_set/p_complex_piter.hh>
-# include <mln/core/image/complex_neighborhoods.hh>
-# include <mln/core/image/complex_neighborhood_piter.hh>
# include <mln/topo/is_facet.hh>
# include <mln/make/attachment.hh>
+// FIXME: Have the functor take N, NL and NH neighborhood objects at
+// the construction (instead of building them in operator()), as in
+// does is_simple_pair.
+
namespace mln
{
@@ -69,7 +69,8 @@ namespace mln
\tparam NH The neighborhood type returning the set of
(n+1)-faces adjacent to a an n-face. */
template <typename I, typename N, typename NL, typename NH>
- class is_simple_cell : public mln::Function_v2b< is_simple_cell<I, N, NL,
NH> >
+ class is_simple_cell
+ : public mln::Function_v2b< is_simple_cell<I, N, NL, NH> >
{
public:
/// Result type of the functor.
@@ -108,6 +109,7 @@ namespace mln
is_simple_cell<I, N, NL, NH>::is_simple_cell()
: ima_(0)
{
+ mlc_equal(mln_value(I), bool)::check();
}
template <typename I, typename N, typename NL, typename NH>
@@ -115,6 +117,7 @@ namespace mln
is_simple_cell<I, N, NL, NH>::is_simple_cell(const mln::Image<I>&
ima)
: ima_(exact(&ima))
{
+ mlc_equal(mln_value(I), bool)::check();
}
template <typename I, typename N, typename NL, typename NH>
@@ -131,23 +134,24 @@ namespace mln
is_simple_cell<I, N, NL, NH>::operator()(const mln_psite(I)& p) const
{
mln_precondition(ima_);
- // FIXME: Introduce `const I& ima = *ima_;' and use it instead of
- // `ima_'. Or introduce an `ima()' accessor?
+ // Shortcut.
+ // FIXME: Introduce an `ima()' accessor instead?
+ const I& ima = *ima_;
// The cell corresponding to P cannot be simple unless P is
// facet.
{
NH higher_adj_nbh;
- if (!is_facet(*ima_, p, higher_adj_nbh))
+ if (!is_facet(ima, p, higher_adj_nbh))
return false;
}
typedef p_set<mln_psite(I)> faces_t;
// Compute the attachment of the cell corresponding to P to the
- // domain of *IMA_.
+ // domain of IMA.
N adj_nbh;
- faces_t att = make::attachment(*ima_, p, adj_nbh);
+ faces_t att = make::attachment(ima, p, adj_nbh);
// A cell with an empty attachment is not simple.
/* FIXME: Why p_set does not provide an empty() predicate? */
--
1.5.6.5