12#include "../_collection.h"
17#include "acme/exception/interface_only.h"
20template <
typename HOLDEE >
22virtual public ::particle
30 ___shape(enum_shape eshape) : m_eshape(eshape) { }
31 ~___shape()
override {}
36 inline enum_shape eshape()
const {
return m_eshape; }
37 virtual void * raw_type()
const {
return nullptr;}
40 virtual HOLDEE * holdee() {
return nullptr; }
41 virtual const HOLDEE * holdee()
const {
return nullptr; }
42 virtual void holdee(HOLDEE *) {}
44 template <
typename SHAPE >
45 SHAPE & shape() {
return *(SHAPE *)raw_type(); }
48 template <
typename SHAPE >
49 const SHAPE & shape()
const {
return *(SHAPE *)raw_type(); }
52 virtual bool expand_bounding_rect(::f64_rectangle & rectangle)
const;
54 virtual bool expand_bounding_rect(::i32_rectangle & rectangle)
const;
56 virtual bool get_bounding_box(::f64_rectangle & rectangle)
const;
58 virtual bool get_bounding_box(::i32_rectangle & prectangle)
const;
60 virtual bool contains(const ::i32_point & point)
const;
62 virtual bool contains(const ::f64_point & point)
const;
68template <
typename HOLDEE >
69class begin_clip_shape :
70virtual public ___shape < HOLDEE >
74 begin_clip_shape():___shape< HOLDEE>(e_shape_begin_clip) {}
76 ::particle * clone()
const override
79 return ___new begin_clip_shape();
86template <
typename HOLDEE >
87class intersect_clip_shape :
88virtual public ___shape < HOLDEE >
93 intersect_clip_shape():___shape< HOLDEE>(e_shape_intersect_clip) {}
96 ::particle * clone()
const override
99 return ___new intersect_clip_shape();
106template <
typename HOLDEE >
107class begin_figure_shape :
108 virtual public ___shape < HOLDEE >
112 begin_figure_shape() :___shape< HOLDEE>(e_shape_begin_figure) {}
114 ::particle * clone()
const override
117 return ___new begin_figure_shape();
124template <
typename HOLDEE >
125class close_figure_shape :
126 virtual public ___shape < HOLDEE >
130 close_figure_shape() :___shape< HOLDEE>(e_shape_close_figure) {}
132 ::particle * clone()
const override
135 return ___new close_figure_shape();
142template <
typename HOLDEE >
143class end_figure_shape :
144 virtual public ___shape < HOLDEE >
148 end_figure_shape() :___shape< HOLDEE>(e_shape_end_figure) {}
150 ::particle * clone()
const override
153 return ___new end_figure_shape();
162template <
typename SHAPE, enum_shape ESHAPE,
typename HOLDEE >
164virtual public ___shape < HOLDEE >
171 ::pointer<HOLDEE> m_pholdee;
174 _shape():___shape< HOLDEE>(ESHAPE) {}
175 _shape(
const SHAPE & shape) : ___shape< HOLDEE>(ESHAPE), m_shape(shape) {}
176 ~_shape()
override {}
179 HOLDEE * holdee()
override {
return m_pholdee; }
180 const HOLDEE * holdee()
const override {
return m_pholdee; }
181 void holdee(HOLDEE * pholdee)
override { m_pholdee = pholdee; }
184 virtual void * raw_type()
const override {
return (
void*) &m_shape; }
187 bool expand_bounding_rect(::f64_rectangle & prectangle)
const override;
190 bool expand_bounding_rect(::i32_rectangle & prectangle)
const override;
193 bool get_bounding_box(::f64_rectangle & prectangle)
const override;
196 bool get_bounding_box(::i32_rectangle & prectangle)
const override;
199 bool contains(const ::i32_point & point)
const override;
202 bool contains(const ::f64_point & point)
const override;
205 ::particle * clone()
const override
208 return ___new _shape(m_shape);
243template <
typename GEOMETRY,
typename HOLDEE >
244inline pointer< ___shape < HOLDEE > > __create_shape(
const GEOMETRY& geometry, holdee < HOLDEE >)
253template <
typename HOLDEE >
254inline pointer< ___shape < HOLDEE > > __create_shape(
const enum_shape& eshape);
257template <
typename HOLDEE >
258bool ___shape <HOLDEE>::expand_bounding_rect(::f64_rectangle & rectangle)
const
263 if (!get_bounding_box(r))
270 expand_rect(rectangle, r);
277template <
typename HOLDEE >
278bool ___shape<HOLDEE>::expand_bounding_rect(::i32_rectangle & rectangle)
const
283 if (!expand_bounding_rect(r))
290 expand_rect(rectangle, r);
297template <
typename HOLDEE >
298bool ___shape<HOLDEE>::get_bounding_box(::f64_rectangle & rectangle)
const
308template <
typename HOLDEE >
309bool ___shape<HOLDEE>::get_bounding_box(::i32_rectangle & rectangle)
const
319template <
typename HOLDEE >
320bool ___shape<HOLDEE>::contains(const ::i32_point & point)
const
327 if (!get_bounding_box(r))
334 return r.contains(point);
340template <
typename HOLDEE >
341bool ___shape<HOLDEE>::contains(const ::f64_point & point)
const
348 if (!get_bounding_box(r))
355 return r.contains(point);
364template < prototype_number NUMBER,
typename HOLDEE >
365using arc_shape = _shape < ::arc_type < NUMBER >, e_shape_arc, HOLDEE >;
367template < prototype_number NUMBER,
typename HOLDEE >
368using line_shape = _shape < ::line_base < NUMBER >, e_shape_line, HOLDEE >;
370template < prototype_number NUMBER,
typename HOLDEE >
371using rectangle_shape = _shape < ::rectangle_type < NUMBER >, e_shape_rectangle, HOLDEE >;
373template < prototype_number NUMBER,
typename HOLDEE >
374using ellipse_shape = _shape < ::ellipse_base < NUMBER >, e_shape_ellipse, HOLDEE >;
376template < prototype_number NUMBER,
typename HOLDEE >
377using lines_shape = _shape < ::lines_base < NUMBER >, e_shape_lines, HOLDEE >;
379template < prototype_number NUMBER,
typename HOLDEE >
380using polygon_shape = _shape < ::polygon_base < NUMBER >, e_shape_polygon, HOLDEE >;
383template <
typename HOLDEE >
384using arc_f64_shape = arc_shape < ::f64, HOLDEE >;
386template <
typename HOLDEE >
387using f64_line_shape = line_shape < ::f64, HOLDEE >;
389template <
typename HOLDEE >
390using f64_rectangle_shape = rectangle_shape < ::f64, HOLDEE >;
392template <
typename HOLDEE >
393using ellipse_f64_shape = ellipse_shape < ::f64, HOLDEE >;
395template <
typename HOLDEE >
396using lines_f64_shape = lines_shape < ::f64, HOLDEE >;
398template <
typename HOLDEE >
399using f64_polygon_shape = polygon_shape < ::f64, HOLDEE >;
Definition interface_only.h:9