Go to the documentation of this file.00001
00002 #ifndef vgl_clip_h_
00003 #define vgl_clip_h_
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <vgl/vgl_box_2d.h>
00016 #include <vgl/vgl_line_2d.h>
00017 #include <vgl/vgl_line_segment_2d.h>
00018 #include <vgl/vgl_polygon.h>
00019
00020
00021 enum vgl_clip_type
00022 {
00023 vgl_clip_type_intersect,
00024 vgl_clip_type_union,
00025 vgl_clip_type_difference,
00026 vgl_clip_type_xor
00027 };
00028
00029
00030
00031
00032 template <class T>
00033 bool vgl_clip_lineseg_to_line(T &x1, T &y1,
00034 T &x2, T &y2,
00035 T a, T b, T c);
00036
00037
00038
00039 template <class T>
00040 bool vgl_clip_line_to_box(T a, T b, T c,
00041 T x1,T y1,
00042 T x2,T y2,
00043 T &bx, T &by,
00044 T &ex, T &ey);
00045
00046
00047
00048
00049
00050
00051 template <class T>
00052 inline
00053 vgl_line_segment_2d<T> vgl_clip_line_to_box(vgl_line_2d<T> const& l,
00054 vgl_box_2d<T> const& b)
00055 {
00056 T sx, sy, ex, ey;
00057 bool r = vgl_clip_line_to_box(l.a(), l.b(), l.c(),
00058 b.min_x(), b.min_y(), b.max_x(), b.max_y(),
00059 sx, sy, ex, ey);
00060 return r ? vgl_line_segment_2d<T>(vgl_point_2d<T>(sx, sy),
00061 vgl_point_2d<T>(ex, ey))
00062 : vgl_line_segment_2d<T>();
00063 }
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077 template <class T>
00078 vgl_polygon<T>
00079 vgl_clip( const vgl_polygon<T>& poly1, const vgl_polygon<T>& poly2,
00080 vgl_clip_type op = vgl_clip_type_intersect );
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 template <class T>
00092 vgl_polygon<T>
00093 vgl_clip(vgl_polygon<T> const& poly1, vgl_polygon<T> const& poly2, vgl_clip_type op, int *p_retval);
00094
00095 #define VGL_CLIP_INSTANTIATE(T) extern "please include vgl/vgl_clip.txx instead"
00096
00097 #endif // vgl_clip_h_