object_links_center_aligned.hh 3.12 KB
Newer Older
Guillaume Lazzara's avatar
Guillaume Lazzara committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of Olena.
//
// Olena is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation, version 2 of the License.
//
// Olena is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Olena.  If not, see <http://www.gnu.org/licenses/>.
//
// As a special exception, you may use this file as part of a free
// software project without restriction.  Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to produce
// an executable, this file does not by itself cause the resulting
// executable to be covered by the GNU General Public License.  This
// exception does not however invalidate any other reasons why the
// executable file might be covered by the GNU General Public License.

#ifndef SCRIBO_FILTER_OBJECT_LINKS_CENTER_ALIGNED_HH
# define SCRIBO_FILTER_OBJECT_LINKS_CENTER_ALIGNED_HH

/// \file
///
/// Invalidate links between two objects if their center are not
/// aligned.


# include <mln/util/array.hh>

# include <scribo/core/macros.hh>
# include <scribo/core/object_links.hh>
# include <scribo/core/object_image.hh>

# include <scribo/filter/object_links_non_aligned_simple.hh>

namespace scribo
{

  namespace filter
  {

    using namespace mln;

    /*! \brief Invalidate links between two objects if their center are not
               aligned.

	\param[in] objects   An object image.
	\param[in] links     Object links information.
        \param[in] max_alpha Maximum angle value (degrees).

	\verbatim

	  ------       ------
	  |    |       |    |  v
	  | x ~| ~ ~ ~ | ~ ~|~ ~
	  |   ~| ~     |    |  | => Alpha
	  |    |   ~ ~ | x ~|~ ~
	  ------       |    |  ^
	  object1      |    |
		       ------
                      object2

	\endverbatim

	The angle between the two bottoms must be lower than \p max_alpha.

    */
    template <typename L>
    object_links<L>
    object_links_center_aligned(const object_image(L)& objects,
				const object_links<L>& links,
				float max_alpha);


# ifndef MLN_INCLUDE_ONLY


    template <typename L>
    object_links<L>
    object_links_center_aligned(const object_image(L)& objects,
				const object_links<L>& links,
				float max_alpha)
    {
      trace::entering("scribo::filter::object_links_center_aligned");

      mln_precondition(objects.is_valid());
      mln_precondition(links.is_valid());

      object_links<L>
	output = object_links_non_aligned_simple(objects, links,
Guillaume Lazzara's avatar
Guillaume Lazzara committed
98
						 0, max_alpha);
Guillaume Lazzara's avatar
Guillaume Lazzara committed
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113

      trace::exiting("scribo::filter::object_links_center_aligned");
      return output;
    }


# endif // ! MLN_INCLUDE_ONLY


  } // end of namespace scribo::filter

} // end of namespace scribo


#endif // ! SCRIBO_FILTER_OBJECT_LINKS_CENTER_ALIGNED_HH