Class: HexaPDF::Content::GraphicObject::SolidArc
- Inherits:
-
Object
- Object
- HexaPDF::Content::GraphicObject::SolidArc
- Defined in:
- lib/hexapdf/content/graphic_object/solid_arc.rb
Overview
This graphic object represents a solid elliptical arc, i.e. an arc that has an inner and an outer set of a/b values.
Note that only the path itself is added to the canvas. So depending on the use-case the path itself still has to be, for example, stroked.
This graphic object is registered under the :solid_arc key for use with the HexaPDF::Content::Canvas class.
It can be used to create
-
an (elliptical) disk (when the inner a/b are zero and the difference between start and end angles is greater than or equal to 360),
#>pdf-center canvas.fill_color("hp-blue"). draw(:solid_arc, outer_a: 80, outer_b: 50). fill_stroke
-
an (elliptical) sector (when the inner a/b are zero and the difference between start and end angles is less than 360),
#>pdf-center canvas.fill_color("hp-blue"). draw(:solid_arc, outer_a: 80, outer_b: 50, start_angle: 20, end_angle: 230). fill_stroke
-
an (elliptical) annulus (when the inner a/b are nonzero and the difference between start and end angles is greater than or equal to 360),
#>pdf-center canvas.fill_color("hp-blue"). draw(:solid_arc, outer_a: 80, outer_b: 50, inner_a: 70, inner_b: 30). fill_stroke
-
and an (elliptical) *annular sector* (when the inner a/b are nonzero and the difference between start and end angles is less than 360)
#>pdf-center canvas.fill_color("hp-blue"). draw(:solid_arc, outer_a: 80, outer_b: 50, inner_a: 70, inner_b: 30, start_angle: 20, end_angle: 230). fill_stroke
See: Arc
Instance Attribute Summary collapse
-
#cx ⇒ Object
readonly
x-coordinate of center point, defaults to 0.
-
#cy ⇒ Object
readonly
y-coordinate of center point, defaults to 0.
-
#end_angle ⇒ Object
readonly
End angle of the solid arc in degrees, defaults to 0.
-
#inclination ⇒ Object
readonly
Inclination in degrees of semi-major axis in respect to x-axis, defaults to 0.
-
#inner_a ⇒ Object
readonly
Length of inner semi-major axis which (without altering the #inclination) is parallel to the x-axis, defaults to 0.
-
#inner_b ⇒ Object
readonly
Length of inner semi-minor axis which (without altering the #inclination) is parallel to the y-axis, defaults to 0.
-
#outer_a ⇒ Object
readonly
Length of outer semi-major axis which (without altering the #inclination) is parallel to the x-axis, defaults to 1.
-
#outer_b ⇒ Object
readonly
Length of outer semi-minor axis which (without altering the #inclination) is parallel to the y-axis, defaults to 1.
-
#start_angle ⇒ Object
readonly
Start angle of the solid arc in degrees, defaults to 0.
Class Method Summary collapse
-
.configure(**kwargs) ⇒ Object
Creates and configures a new solid arc object.
Instance Method Summary collapse
-
#configure(cx: nil, cy: nil, inner_a: nil, inner_b: nil, outer_a: nil, outer_b: nil, start_angle: nil, end_angle: nil, inclination: nil) ⇒ Object
Configures the solid arc with.
-
#draw(canvas) ⇒ Object
Draws the solid arc on the given Canvas.
-
#initialize ⇒ SolidArc
constructor
Creates a solid arc with default values (a unit disk at the origin).
Constructor Details
#initialize ⇒ SolidArc
Creates a solid arc with default values (a unit disk at the origin).
Examples:
#>pdf-center
canvas.draw(:solid_arc).stroke
204 205 206 207 208 209 210 211 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 204 def initialize @cx = @cy = 0 @inner_a = @inner_b = 0 @outer_a = @outer_b = 1 @start_angle = 0 @end_angle = 0 @inclination = 0 end |
Instance Attribute Details
#cx ⇒ Object (readonly)
x-coordinate of center point, defaults to 0.
Examples:
#>pdf-center
solid_arc = canvas.graphic_object(:solid_arc, outer_a: 30, outer_b: 20,
inner_a: 20, inner_b: 10)
canvas.draw(solid_arc).stroke
canvas.stroke_color("hp-blue").draw(solid_arc, cx: 50).stroke
104 105 106 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 104 def cx @cx end |
#cy ⇒ Object (readonly)
y-coordinate of center point, defaults to 0.
Examples:
#>pdf-center
solid_arc = canvas.graphic_object(:solid_arc, outer_a: 30, outer_b: 20,
inner_a: 20, inner_b: 10)
canvas.draw(solid_arc).stroke
canvas.stroke_color("hp-blue").draw(solid_arc, cy: 50).stroke
115 116 117 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 115 def cy @cy end |
#end_angle ⇒ Object (readonly)
End angle of the solid arc in degrees, defaults to 0.
Examples:
#>pdf-center
solid_arc = canvas.graphic_object(:solid_arc, cx: -50, outer_a: 30, outer_b: 20,
inner_a: 20, inner_b: 10)
canvas.draw(solid_arc).stroke
canvas.stroke_color("hp-blue").draw(solid_arc, cx: 50, end_angle: 120).stroke
185 186 187 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 185 def end_angle @end_angle end |
#inclination ⇒ Object (readonly)
Inclination in degrees of semi-major axis in respect to x-axis, defaults to 0.
Examples:
#>pdf-center
solid_arc = canvas.graphic_object(:solid_arc, cx: -50, outer_a: 30, outer_b: 20,
inner_a: 20, inner_b: 10)
canvas.draw(solid_arc).stroke
canvas.stroke_color("hp-blue").draw(solid_arc, cx: 50, inclination: 40).stroke
196 197 198 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 196 def inclination @inclination end |
#inner_a ⇒ Object (readonly)
Length of inner semi-major axis which (without altering the #inclination) is parallel to the x-axis, defaults to 0.
Examples:
#>pdf-center
solid_arc = canvas.graphic_object(:solid_arc, cx: -50, outer_a: 30, outer_b: 20,
inner_a: 20, inner_b: 10)
canvas.draw(solid_arc).stroke
canvas.stroke_color("hp-blue").draw(solid_arc, cx: 50, inner_a: 5).stroke
127 128 129 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 127 def inner_a @inner_a end |
#inner_b ⇒ Object (readonly)
Length of inner semi-minor axis which (without altering the #inclination) is parallel to the y-axis, defaults to 0.
Examples:
#>pdf-center
solid_arc = canvas.graphic_object(:solid_arc, cx: -50, outer_a: 30, outer_b: 20,
inner_a: 20, inner_b: 10)
canvas.draw(solid_arc).stroke
canvas.stroke_color("hp-blue").draw(solid_arc, cx: 50, inner_b: 20).stroke
139 140 141 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 139 def inner_b @inner_b end |
#outer_a ⇒ Object (readonly)
Length of outer semi-major axis which (without altering the #inclination) is parallel to the x-axis, defaults to 1.
Examples:
#>pdf-center
solid_arc = canvas.graphic_object(:solid_arc, cx: -50, outer_a: 30, outer_b: 20,
inner_a: 20, inner_b: 10)
canvas.draw(solid_arc).stroke
canvas.stroke_color("hp-blue").draw(solid_arc, cx: 50, outer_a: 45).stroke
151 152 153 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 151 def outer_a @outer_a end |
#outer_b ⇒ Object (readonly)
Length of outer semi-minor axis which (without altering the #inclination) is parallel to the y-axis, defaults to 1.
Examples:
#>pdf-center
solid_arc = canvas.graphic_object(:solid_arc, cx: -50, outer_a: 30, outer_b: 20,
inner_a: 20, inner_b: 10)
canvas.draw(solid_arc).stroke
canvas.stroke_color("hp-blue").draw(solid_arc, cx: 50, outer_b: 40).stroke
163 164 165 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 163 def outer_b @outer_b end |
#start_angle ⇒ Object (readonly)
Start angle of the solid arc in degrees, defaults to 0.
Examples:
#>pdf-center
solid_arc = canvas.graphic_object(:solid_arc, cx: -50, outer_a: 30, outer_b: 20,
inner_a: 20, inner_b: 10)
canvas.draw(solid_arc).stroke
canvas.stroke_color("hp-blue").draw(solid_arc, cx: 50, start_angle: 60).stroke
174 175 176 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 174 def start_angle @start_angle end |
Class Method Details
.configure(**kwargs) ⇒ Object
Creates and configures a new solid arc object.
See #configure for the allowed keyword arguments.
91 92 93 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 91 def self.configure(**kwargs) new.configure(**kwargs) end |
Instance Method Details
#configure(cx: nil, cy: nil, inner_a: nil, inner_b: nil, outer_a: nil, outer_b: nil, start_angle: nil, end_angle: nil, inclination: nil) ⇒ Object
Configures the solid arc with
-
center point (
cx
,cy
), -
inner semi-major axis
inner_a
, -
inner semi-minor axis
inner_b
, -
outer semi-major axis
outer_a
, -
outer semi-minor axis
outer_b
, -
start angle of
start_angle
degrees, -
end angle of
end_angle
degrees and -
an inclination in respect to the x-axis of
inclination
degrees.
Any arguments not specified are not modified and retain their old value, see #initialize for the inital values.
Returns self.
Examples:
#>pdf-center
solid_arc = canvas.graphic_object(:solid_arc)
solid_arc.configure(outer_a: 30, outer_b: 20, inner_a: 20, inner_b: 10)
canvas.draw(solid_arc).stroke
235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 235 def configure(cx: nil, cy: nil, inner_a: nil, inner_b: nil, outer_a: nil, outer_b: nil, start_angle: nil, end_angle: nil, inclination: nil) @cx = cx if cx @cy = cy if cy @inner_a = inner_a.abs if inner_a @inner_b = inner_b.abs if inner_b @outer_a = outer_a.abs if outer_a @outer_b = outer_b.abs if outer_b @start_angle = start_angle % 360 if start_angle @end_angle = end_angle % 360 if end_angle @inclination = inclination if inclination self end |
#draw(canvas) ⇒ Object
Draws the solid arc on the given Canvas.
Examples:
#>pdf-center
solid_arc = canvas.graphic_object(:solid_arc, outer_a: 30, outer_b: 20,
inner_a: 20, inner_b: 10)
solid_arc.draw(canvas)
canvas.stroke
259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 |
# File 'lib/hexapdf/content/graphic_object/solid_arc.rb', line 259 def draw(canvas) angle_difference = (@end_angle - @start_angle).abs if @inner_a == 0 && @inner_b == 0 arc = canvas.graphic_object(:arc, cx: @cx, cy: @cy, a: @outer_a, b: @outer_b, start_angle: @start_angle, end_angle: @end_angle, inclination: @inclination, clockwise: false) if angle_difference == 0 arc.draw(canvas) else canvas.move_to(@cx, @cy) canvas.line_to(*arc.start_point) arc.draw(canvas, move_to_start: false) end else inner = canvas.graphic_object(:arc, cx: @cx, cy: @cy, a: @inner_a, b: @inner_b, start_angle: @end_angle, end_angle: @start_angle, inclination: @inclination, clockwise: true) outer = canvas.graphic_object(:arc, cx: @cx, cy: @cy, a: @outer_a, b: @outer_b, start_angle: @start_angle, end_angle: @end_angle, inclination: @inclination, clockwise: false) outer.draw(canvas) if angle_difference == 0 canvas.close_subpath inner.draw(canvas) else canvas.line_to(*inner.start_point) inner.draw(canvas, move_to_start: false) end end canvas.close_subpath end |