class Celestine::Path

Overview

A class which represents an SVG path. Supports traditional short SVG methods (a_move, r_line, etc.) as well as a fluent, chainable API (move_to, line_to, etc.), Point/Tuple overloads, procedural shape builders (star, polygon, arc sector, rounded rect, heart), and turtle graphics.

Included Modules

Defined in:

drawables/path.cr

Constant Summary

TAG = "path"

Instance Method Summary

Instance methods inherited from module Celestine::Modules::Animate::Transform

animate_transform_rotate(&block : Celestine::Animate::Transform::Rotate -> ) animate_transform_rotate, animate_transform_scale(&block : Celestine::Animate::Transform::Scale -> ) animate_transform_scale, animate_transform_skew_x(&block : Celestine::Animate::Transform::SkewX -> ) animate_transform_skew_x, animate_transform_skew_y(&block : Celestine::Animate::Transform::SkewY -> ) animate_transform_skew_y, animate_transform_translate(&block : Celestine::Animate::Transform::Translate -> ) animate_transform_translate

Instance methods inherited from module Celestine::Modules::Animate::Motion

animate_motion(&block : Celestine::Animate::Motion -> ) animate_motion

Instance methods inherited from module Celestine::Modules::Animate

animate(&block : Celestine::Animate -> ) animate

Instance methods inherited from module Celestine::Modules::Marker

marker_attribute(io : IO) marker_attribute, set_marker_end(id : String)
set_marker_end(marker : Celestine::Marker)
set_marker_end
, set_marker_mid(id : String)
set_marker_mid(marker : Celestine::Marker)
set_marker_mid
, set_marker_start(id : String)
set_marker_start(marker : Celestine::Marker)
set_marker_start

Instance methods inherited from module Celestine::Modules::Clip

clip_path_attribute(io : IO) clip_path_attribute, clip_rule : String | Nil clip_rule, clip_rule=(val : String) clip_rule=, set_clip_path(id : String)
set_clip_path(clip_path : Celestine::ClipPath)
set_clip_path

Instance methods inherited from module Celestine::Modules::Filter

filter_attribute(io : IO) filter_attribute, set_filter(id : String)
set_filter(filter : Celestine::Filter)
set_filter

Instance methods inherited from module Celestine::Modules::Mask

mask_attribute(io : IO) mask_attribute, set_mask(id : String)
set_mask(mask : Celestine::Mask)
set_mask

Instance methods inherited from module Celestine::Modules::Transform

transform(&block : Celestine::Drawable::Transform -> ) transform, transform_attribute(io : IO) transform_attribute

Instance methods inherited from module Celestine::Modules::StrokeFill

color : String | Nil color, color=(color : String | Nil)
color=(c : Celestine::Color)
color=
, color_interpolation : String | Nil color_interpolation, color_interpolation=(color_interpolation : String | Nil) color_interpolation=, color_interpolation_filters : String | Nil color_interpolation_filters, color_interpolation_filters=(color_interpolation_filters : String | Nil) color_interpolation_filters=, dash_array : Array(Float64) dash_array, dash_array=(dash_array : Array(Float64)) dash_array=, dash_offset : IFNumber | Nil dash_offset, dash_offset=(dash_offset : IFNumber | Nil) dash_offset=, dash_offset_units : String | Nil dash_offset_units, dash_offset_units=(dash_offset_units : String | Nil) dash_offset_units=, fill : String | Nil fill, fill=(fill : String | Nil)
fill=(color : Celestine::Color)
fill=
, fill_opacity : IFNumber | Nil fill_opacity, fill_opacity=(fill_opacity : IFNumber | Nil) fill_opacity=, fill_rule : Bool fill_rule, fill_rule=(fill_rule : Bool) fill_rule=, line_cap : String | Nil line_cap, line_cap=(line_cap : String | Nil) line_cap=, line_join : String | Nil line_join, line_join=(line_join : String | Nil) line_join=, miter_limit : IFNumber | Nil miter_limit, miter_limit=(miter_limit : IFNumber | Nil) miter_limit=, miter_limit_units : String | Nil miter_limit_units, miter_limit_units=(miter_limit_units : String | Nil) miter_limit_units=, opacity : IFNumber | Nil opacity, opacity=(opacity : IFNumber | Nil) opacity=, set_fill(pattern : Celestine::Pattern)
set_fill(gradient : Celestine::Gradient)
set_fill
, set_stroke(pattern : Celestine::Pattern)
set_stroke(gradient : Celestine::Gradient)
set_stroke
, shape_rendering : String | Nil shape_rendering, shape_rendering=(shape_rendering : String | Nil) shape_rendering=, stroke : String | Nil stroke, stroke=(stroke : String | Nil)
stroke=(color : Celestine::Color)
stroke=
, stroke_fill_attribute(io : IO) stroke_fill_attribute, stroke_opacity : IFNumber | Nil stroke_opacity, stroke_opacity=(stroke_opacity : IFNumber | Nil) stroke_opacity=, stroke_width : IFNumber | Nil stroke_width, stroke_width=(stroke_width : IFNumber | Nil) stroke_width=, stroke_width_units : String | Nil stroke_width_units, stroke_width_units=(stroke_width_units : String | Nil) stroke_width_units=, vector_effect : String | Nil vector_effect, vector_effect=(vector_effect : String | Nil) vector_effect=

Instance methods inherited from class Celestine::Drawable

class_attribute(io : IO) class_attribute, classes : Array(String) classes, classes=(val : Array(String)) classes=, custom_attribute(io : IO) custom_attribute, custom_attrs : Hash(String, String) custom_attrs, custom_attrs=(val : Hash(String, String)) custom_attrs=, draw(io : IO) : Nil draw, has_inner_elements? : Bool has_inner_elements?, id : String | Nil id, id=(id : String | Nil) id=, id_attribute(io : IO) id_attribute, inner_elements : IO::Memory inner_elements, inner_elements=(val : IO::Memory) inner_elements=, style : Hash(String, String) style, style=(val : Hash(String, String)) style=, style_attribute(io : IO) style_attribute, to_s(io : IO) : Nil
to_s : String
to_s

Instance Method Detail

def a_arc(x : Number, y : Number, rx : Number, ry : Number, rotation : Number = 0, large : Bool = false, flip : Bool = false) : self #

[View source]
def a_bcurve(cx1 : Number, cy1 : Number, cx2 : Number, cy2 : Number, x : Number, y : Number) : self #

[View source]
def a_h_line(x : Number) : self #

Draws a horizontal line to an absolute point


[View source]
def a_line(x : Number, y : Number) : self #

Draws a line to an absolute point


[View source]
def a_move(x : Number, y : Number) : self #

Moves to an absolute point


[View source]
def a_q_bcurve(cx : Number, cy : Number, x : Number, y : Number) : self #

[View source]
def a_s_bcurve(cx2 : Number, cy2 : Number, x : Number, y : Number) : self #

[View source]
def a_t_bcurve(x : Number, y : Number) : self #

[View source]
def a_v_line(y : Number) : self #

Draws a vertical line to an absolute point


[View source]
def arc_by(rx : Number, ry : Number, rotation : Number = 0, large : Bool = false, sweep : Bool = false, dx : Number = 0, dy : Number = 0) : self #

Elliptical arc by relative offset (a)


[View source]
def arc_sector(cx : Number, cy : Number, r_inner : Number, r_outer : Number, start_angle : Number, end_angle : Number) : self #

Generates an arc ring sector (annular sector) between start_angle and end_angle (in degrees)


[View source]
def arc_to(rx : Number, ry : Number, rotation : Number = 0, large : Bool = false, sweep : Bool = false, x : Number = 0, y : Number = 0) : self #

Elliptical arc to absolute destination (A)


[View source]
def arc_to(rx : Number, ry : Number, to : Tuple(IFNumber, IFNumber) | Celestine::FPoint | Celestine::Point, rotation : Number = 0, large : Bool = false, sweep : Bool = false) : self #

[View source]
def close : self #

Closes the path.


[View source]
def close_path : self #

Closes current path


[View source]
def code : String #

Finalized path code points.


[View source]
def code=(other : String) #

[View source]
def curve_by(dcx1 : Number, dcy1 : Number, dcx2 : Number, dcy2 : Number, dx : Number, dy : Number) : self #

Cubic Bézier curve by relative offset (c)


[View source]
def curve_to(cx1 : Number, cy1 : Number, cx2 : Number, cy2 : Number, x : Number, y : Number) : self #

Cubic Bézier curve to absolute destination (C)


[View source]

[View source]
def draw(io : IO) : Nil #
Description copied from class Celestine::Drawable

Main draw method for a drawable. Takes in and interacts with an io.


[View source]
def heart(cx : Number, cy : Number, size : Number) : self #

Generates a heart shape centered at (cx, cy)


[View source]
def horizontal_by(dx : Number) : self #

[View source]
def horizontal_to(x : Number) : self #

Horizontal line to absolute coordinate (H)


[View source]
def line_by(dx : Number, dy : Number) : self #

Draws line by relative offset (l)


[View source]
def line_by(pt : Celestine::Point | Celestine::FPoint | Tuple(IFNumber, IFNumber)) : self #

[View source]
def line_to(x : Number, y : Number) : self #

Draws line to absolute coordinates (L)


[View source]
def line_to(pt : Celestine::Point | Celestine::FPoint | Tuple(IFNumber, IFNumber)) : self #

[View source]
def move_by(dx : Number, dy : Number) : self #

Moves cursor by relative offset (m)


[View source]
def move_by(pt : Celestine::Point | Celestine::FPoint | Tuple(IFNumber, IFNumber)) : self #

[View source]
def move_to(x : Number, y : Number) : self #

Moves cursor to absolute coordinates (M)


[View source]
def move_to(pt : Celestine::Point | Celestine::FPoint | Tuple(IFNumber, IFNumber)) : self #

[View source]
def quad_by(dcx : Number, dcy : Number, dx : Number, dy : Number) : self #

[View source]
def quad_to(cx : Number, cy : Number, x : Number, y : Number) : self #

Quadratic Bézier curve to absolute destination (Q)


[View source]
def r_arc(dx : Number, dy : Number, rx : Number, ry : Number, rotation : Number = 0, large : Bool = false, flip : Bool = false) : self #

[View source]
def r_bcurve(dcx1 : Number, dcy1 : Number, dcx2 : Number, dcy2 : Number, dx : Number, dy : Number) : self #

[View source]
def r_h_line(dx : Number) : self #

Draws a horizontal line to a relative point


[View source]
def r_line(dx : Number, dy : Number) : self #

Draws a line to a relative point


[View source]
def r_move(dx : Number, dy : Number) : self #

Moves to a relative point


[View source]
def r_q_bcurve(dcx : Number, dcy : Number, dx : Number, dy : Number) : self #

[View source]
def r_s_bcurve(dcx2 : Number, dcy2 : Number, dx : Number, dy : Number) : self #

[View source]
def r_t_bcurve(dx : Number, dy : Number) : self #

[View source]
def r_v_line(dy : Number) : self #

Draws a vertical line to a relative point


[View source]
def regular_polygon(cx : Number, cy : Number, sides : Int32, radius : Number, start_angle : Float64 = -90.0) : self #

Generates a regular polygon with sides vertices centered at (cx, cy)


[View source]
def rough_circle(cx : Number, cy : Number, r : Number, roughness : Float64 = 1.0, bowing : Float64 = 1.0, seed : UInt64 = 42_u64) : self #

Draws a hand-drawn sketchy circle


[View source]
def rough_line(x1 : Number, y1 : Number, x2 : Number, y2 : Number, roughness : Float64 = 1.0, bowing : Float64 = 1.0, seed : UInt64 = 42_u64) : self #

Draws a hand-drawn sketchy line


[View source]
def rough_polygon(points : Array(Tuple(IFNumber, IFNumber)) | Array(Celestine::Point) | Array(Celestine::FPoint), roughness : Float64 = 1.0, bowing : Float64 = 1.0, seed : UInt64 = 42_u64) : self #

Draws a hand-drawn sketchy polygon


[View source]
def rough_rect(x : Number, y : Number, width : Number, height : Number, roughness : Float64 = 1.0, bowing : Float64 = 1.0, seed : UInt64 = 42_u64) : self #

Draws a hand-drawn sketchy rectangle


[View source]
def rounded_rect(x : Number, y : Number, width : Number, height : Number, rx : Number, ry : Number = rx) : self #

Generates a rounded rectangle path


[View source]
def smooth_curve_by(dcx2 : Number, dcy2 : Number, dx : Number, dy : Number) : self #

[View source]
def smooth_curve_to(cx2 : Number, cy2 : Number, x : Number, y : Number) : self #

Smooth Cubic Bézier curve to absolute destination (S)


[View source]
def smooth_quad_by(dx : Number, dy : Number) : self #

[View source]
def smooth_quad_to(x : Number, y : Number) : self #

Smooth Quadratic Bézier curve to absolute destination (T)


[View source]
def star(cx : Number, cy : Number, points : Int32, outer_radius : Number, inner_radius : Number, start_angle : Float64 = -90.0) : self #

Generates a symmetrical star with points outer peaks centered at (cx, cy)


[View source]
def turtle(start_x : Number = 0.0, start_y : Number = 0.0, angle : Float64 = 0.0, &block : Turtle -> ) : self #

Opens a turtle graphics drawing session


[View source]
def vertical_by(dy : Number) : self #

[View source]
def vertical_to(y : Number) : self #

Vertical line to absolute coordinate (V)


[View source]