| advanced |

## PlanarMapPointLocation_2

### Definition

PlanarMapPointLocation_2 is the point location strategy used by Planar_map_2<Dcel, Traits>.

In order for the advanced user to write a model of a PlanarMapPointLocation_2 the user's class should inherit the CGAL supplied class Pm_point_location_base<Planar_map>. This class is an abstract base class for the different point location strategies including the supplied ones.

Planar_map_2<Dcel, Traits> is the type that aggregates the strategy. The return values of the queries are given in terms that the Planar_map_2<Dcel, Traits> handles.

#include <CGAL/Pm_point_location_base.h>

### Types

typedef typename Planar_map::Traits
| Traits;
typedef typename Planar_map::Locate_type
| Locate_type;
typedef typename Planar_map::Halfedge_handle
| Halfedge_handle;
typedef typename Traits::X_monotone_curve_2
| X_monotone_curve_2;
typedef typename Traits::Point_2
| Point_2;

### Operations

virtual void | pl.init ( Planar_map& pmp, Traits& tr)
|  | initializes the strategy; will be called by the planar map directly after its construction, with *this and the traits instantiation inside the planar map, as its parameters.

### Query Functions

virtual Halfedge_handle
| pl.locate ( Point_2 p, Locate_type& lt)
|  | point location query. A const version is also required.
virtual Halfedge_handle

pl.vertical_ray_shoot ( | Point_2 p, Locate_type& lt, bool up)

|  | vertical ray shooting query. A const version is also required.

The non const versions may update the internal structure of the Point location.

### Modifiers

virtual void | pl.insert ( Halfedge_handle h, X_monotone_curve_2 cv)
|  | updates the internal structure of the strategy after an insertion in the planar map. The planar map will call this function after the insertion has taken place. h is the handle which is returned by the map after insertion, cv is the curve inserted into the map.

virtual void

pl.split_edge ( | X_monotone_curve_2 cv, Halfedge_handle e1, Halfedge_handle e2, X_monotone_curve_2 cv1, X_monotone_curve_2 cv2)

|  | updates the internal structure of the strategy after a split_edge operation in the planar map. The planar map will call this function after the splitting has taken place. e1 and e2 are the two edges created after the split. cv is the original curve that was in the map before the splitting, cv1 and cv2 are the curves in e1 and e2 (respectively.) after the splitting has taken place.

virtual void

pl.merge_edge ( | X_monotone_curve_2 cv1, X_monotone_curve_2 cv2, Halfedge_handle e, X_monotone_curve_2 cv)

|  | updates the internal structure of the strategy after a merge_edge operation in the planar map. The planar map will call this function after the merging has taken place. e is the merged edge. cv1 and cv2 are the original curves that were in the map before the merging and cv is the curve in e after the merging.
virtual void | pl.remove_edge ( Halfedge_handle e)
|  | updates the internal structure of the strategy during a remove_edge operation in the planar map.The planar map will call this function before the removal has taken place (so the internal structure can be updated before the Halfedge has been removed from the planar map itself.)

### Has Models

Pm_trapezoid_ric_point_location<Planar_map>
Pm_naive_point_location<Planar_map>
Pm_walk_along_a_line_point_location<Planar_map>

| advanced |