CGAL 6.2 - Shape Detection

Loading...
Searching...
No Matches
List of all members
CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_region< GeomTraits, PolygonMesh, VertexToPointMap > Class Template Reference
Reference Manual » Region Growing » Polygon Mesh

`#include <CGAL/Shape_detection/Region_growing/Polygon_mesh/Least_squares_plane_fit_region.h>`

## Definition

template<typename GeomTraits, typename PolygonMesh, typename VertexToPointMap = typename boost::property_map<PolygonMesh, CGAL::vertex_point_t>::const_type>
class CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_region< GeomTraits, PolygonMesh, VertexToPointMap >

Region type based on the quality of the least squares plane fit applied to faces of a polygon mesh.

This class fits a plane, using PCA, to chunks of faces in a polygon mesh and controls the quality of this fit. If all quality conditions are satisfied, the chunk is accepted as a valid region, otherwise rejected.

Template Parameters

  GeomTraits | a model of `Kernel`
  PolygonMesh | a model of `FaceListGraph`
  VertexToPointMap | a model of `ReadablePropertyMap` whose key type is the vertex type of a polygon mesh (`boost::graph_traits<PolygonMesh>::vertex_descriptor`) and value type is `GeomTraits::Point_3`

Is model of
  `RegionType`

Examples
  Shape_detection/region_growing_planes_on_polygon_mesh.cpp.

## Types
using | FT = typename GeomTraits::FT
| Number type.
using | Item = face_descriptor
| Item type.
using | Region = std::vector< Item >
using | Primitive = typename GeomTraits::Plane_3
| Primitive.
using | Region_index_map = typename boost::property_map< PolygonMesh, CGAL::dynamic_face_property_t< std::size_t > >::const_type
| Region map.

## Initialization
template<typename NamedParameters = CGAL::parameters::Default_named_parameters>
| Least_squares_plane_fit_region (const PolygonMesh &pmesh, const NamedParameters &np=parameters::default_values())
| initializes all internal data structures.

## Access
Region_index_map | region_index_map ()
| implements `RegionType::region_index_map()`.
Primitive | primitive () const
| implements `RegionType::primitive()`.
bool | is_part_of_region (const Item query, const Region &) const
| implements `RegionType::is_part_of_region()`.
bool | is_valid_region (const Region &region) const
| implements `RegionType::is_valid_region()`.
bool | update (const Region &region)
| implements `RegionType::update()`.

## Constructor & Destructor Documentation

## ◆ Least_squares_plane_fit_region()

template<typename GeomTraits , typename PolygonMesh , typename VertexToPointMap = typename boost::property_map<PolygonMesh, CGAL::vertex_point_t>::const_type>
template<typename NamedParameters = CGAL::parameters::Default_named_parameters>

CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_region< GeomTraits, PolygonMesh, VertexToPointMap >::Least_squares_plane_fit_region | ( | const PolygonMesh & | pmesh,
|  | const NamedParameters & | np = `parameters::default_values()`
| ) |  |

initializes all internal data structures.

Template Parameters

  NamedParameters | a sequence of Named Parameters

Parameters

  pmesh | an instance of `PolygonMesh` that represents a polygon mesh
  np | a sequence of Named Parameters among the ones listed below

Optional Named Parameters

  the maximum distance from a point to the plane of the primitive Type: `GeomTraits::FT` Default: 1 |
  the maximum angle in degrees between the normal of a face and the normal of the plane of the primitive Type: `GeomTraits::FT` Default: 25 degrees |
  the cosine value `cos(maximum_angle * PI / 180)`, to be used instead of the parameter `maximum_angle()` Type: `GeomTraits::FT` Default: `cos(25 * PI / 180)` |
  the minimum number of faces a region must have Type: `std::size_t` Default: 1 |
  an instance of `VertexToPointMap` that maps a polygon mesh vertex (`boost::graph_traits<PolygonMesh>::vertex_descriptor`) to `GeomTraits::Point_3` Default: `boost::get(CGAL::vertex_point, pmesh)` |
  a property map associating normal vectors to the faces of `pmesh`. Type: a class model of `ReadablePropertyMap` with `boost::graph_traits<PolygonMesh>::face_descriptor` as key type and `GeomTraits::Vector_3` as value type. Default: If this parameter is omitted, face normals will be estimated using cross products of vectors created from consecutive vertices of the face. |
  an instance of `GeomTraits` Default: `GeomTraits()` |

Precondition
  `faces(pmesh).size() > 0`
  `maximum_distance >= 0`
  `maximum_angle >= 0 && maximum_angle <= 90`
  `cosine_of_maximum_angle >= 0 && cosine_of_maximum_angle <= 1`
  `minimum_region_size > 0`

## Member Function Documentation

## ◆ is_part_of_region()

template<typename GeomTraits , typename PolygonMesh , typename VertexToPointMap = typename boost::property_map<PolygonMesh, CGAL::vertex_point_t>::const_type>

bool CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_region< GeomTraits, PolygonMesh, VertexToPointMap >::is_part_of_region | ( | const Item | query,
|  | const Region & |
| ) |  | const

implements `RegionType::is_part_of_region()`.

This function determines if the face `query` is within the `maximum_distance` from the corresponding plane and if the angle between its normal and the plane's normal is below the `maximum_angle`. If both conditions are satisfied, it returns `true`, otherwise `false`.

Parameters

  query | item of the query face

Precondition
  `query` is a valid face_descriptor (`boost::graph_traits<PolygonMesh>::face_descriptor`) of `pmesh`

## ◆ is_valid_region()

template<typename GeomTraits , typename PolygonMesh , typename VertexToPointMap = typename boost::property_map<PolygonMesh, CGAL::vertex_point_t>::const_type>

bool CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_region< GeomTraits, PolygonMesh, VertexToPointMap >::is_valid_region | ( | const Region & | region | ) | const

implements `RegionType::is_valid_region()`.

This function controls if the `region` contains at least `minimum_region_size` faces.

Parameters

  region | Faces of the region represented as `Items`.

## ◆ primitive()

template<typename GeomTraits , typename PolygonMesh , typename VertexToPointMap = typename boost::property_map<PolygonMesh, CGAL::vertex_point_t>::const_type>

Primitive CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_region< GeomTraits, PolygonMesh, VertexToPointMap >::primitive | ( |  | ) | const

implements `RegionType::primitive()`.

This function provides the last primitive that has been fitted with the region.

Returns
  Primitive parameters that fits the region.

Precondition
  `is_valid_region(region)`
  `update(region)`

## ◆ region_index_map()

template<typename GeomTraits , typename PolygonMesh , typename VertexToPointMap = typename boost::property_map<PolygonMesh, CGAL::vertex_point_t>::const_type>

Region_index_map CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_region< GeomTraits, PolygonMesh, VertexToPointMap >::region_index_map | ( |  | ) |

implements `RegionType::region_index_map()`.

This function creates an empty property map that maps each face to a `std::size_t`.

## ◆ update()

template<typename GeomTraits , typename PolygonMesh , typename VertexToPointMap = typename boost::property_map<PolygonMesh, CGAL::vertex_point_t>::const_type>

bool CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_region< GeomTraits, PolygonMesh, VertexToPointMap >::update | ( | const Region & | region | ) |

implements `RegionType::update()`.

This function fits the least squares plane to all vertices of the faces from the `region`.

Parameters

  region | Faces of the region represented as `Items`.

Returns
  Boolean `true` if the plane fitting succeeded and `false` otherwise

Precondition
  `region.size() > 0`