Basic Shapes¶
Basic shapes (rect, circle, ellipse, line, polyline and polygon) can be automatically converted to path commands.
Basic Shapes Policy Concept¶
struct basic_shapes_policy
{
typedef /* Associative Sequence */ convert_to_path;
typedef /* Associative Sequence */ collect_attributes;
static const bool convert_only_rounded_rect_to_path = /* true or false */;
};
convert_to_pathAssociative Sequence (e.g.
boost::mpl::set), containing SVG basic shapes elements tags, which will be converted to path. Generated path uses Path Policy and Path Events Policy settings.collect_attributesAssociative Sequence, containing any of rect, circle, ellipse or line element tags. Geometry of elements included in the sequence will be passed with single call instead of separate attribute handling (see Basic Shapes Events Policy).
convert_only_rounded_rect_to_pathIf static member constant
convert_only_rounded_rect_to_pathequals totrueandtag::element::rectis included inconvert_to_pathsequence, then only rounded rectangles will be converted to path, and regular rectangles will be handle like iftag::element::rectis included incollect_attributes.
In document_traversal processing of attributes describing basic shapes geometry (x, y,
r etc) must be enabled,
i. e. they must be included in processed_attributes or excluded from ignored_attributes.
Associative Sequence traits::shapes_attributes_by_element contains tags of all such attributes
for basic shapes.
Named class template parameter for Basic Shapes Policy is basic_shapes_policy.
Basic Shapes Events Policy Concept¶
struct basic_shapes_events_policy
{
static void set_rect(Context & context, Coordinate x, Coordinate y, Coordinate width, Coordinate height,
Coordinate rx, Coordinate ry);
static void set_rect(Context & context, Coordinate x, Coordinate y, Coordinate width, Coordinate height);
static void set_line(Context & context, Coordinate x1, Coordinate y1, Coordinate x2, Coordinate y2);
static void set_circle(Context & context, Coordinate cx, Coordinate cy, Coordinate r);
static void set_ellipse(Context & context, Coordinate cx, Coordinate cy, Coordinate rx, Coordinate ry);
};
Basic Shapes Events Policy is used for basic shapes (except polyline and polygon) elements,
that are listed in collect_attributes field of Basic Shapes Policy.
Adapters that implement these conversions, use length_to_user_coordinate method of Length Factory
to get user coordinates value by length. These adapters passes default values if attributes are missing
and check correctness of attributes. If value disables rendering of the element
according to SVG specification, then Basic Shapes Events Policy methods aren’t called,
and if an attribute has negative value that is not permitted by specification,
then negative_value function of Error Policy is called.
Default Basic Shapes Events Policy (policy::basic_shapes_events::forward_to_method)
forwards calls to its static methods to context object methods:
struct forward_to_method
{
template<class Coordinate>
static void set_rect(Context & context, Coordinate x, Coordinate y, Coordinate width, Coordinate height,
Coordinate rx, Coordinate ry)
{
context.set_rect(x, y, width, height, rx, ry);
}
/*...*/
};
Named class template parameter for Basic Shapes Events Policy is basic_shapes_events_policy.