class HexaPDF::Content::LineDashPattern
The line dash pattern defines how a line should be dashed. For use with Content::GraphicsState#line_dash_pattern
.
A dash pattern consists of two parts: the dash array and the dash phase. The dash array defines the length of alternating dashes and gaps (important: starting with dashes). And the dash phase defines the distance into the dash array at which to start.
It is easier to show. Following are dash arrays and dash phases and how they would be interpreted:
[] 0 No dash, one solid line [3] 0 3 unit dash, 3 unit gap, 3 unit dash, 3 unit gap, ... [3] 1 2 unit dash, 3 unit gap, 3 unit dash, 3 unit gap, ... [2 1] 0 2 unit dash, 1 unit gap, 2 unit dash, 1 unit gap, ... [3 5] 6 2 unit gap, 3 unit dash, 5 unit gap, 3 unit dash, ... [2 3] 6 1 unit dash, 3 unit gap, 2 unit dash, 3 unit gap, ...
See: PDF1.7 s8.4.3.6
Attributes
The dash array.
The dash phase.
Public Class Methods
Inititalizes the line dash pattern with the given array
and phase
.
The argument phase
must be non-negative and the numbers in the array
must be non-negative and must not all be zero.
# File lib/hexapdf/content/graphics_state.rb, line 186 def initialize(array = [], phase = 0) if phase < 0 || (!array.empty? && array.inject(0) {|m, n| m < 0 ? m : (n < 0 ? -1 : m + n) } <= 0) raise ArgumentError, "Invalid line dash pattern: #{array.inspect} #{phase.inspect}" end @array = array.freeze @phase = phase end
Returns the arguments normalized to a valid LineDashPattern
instance.
If array
is 0, the default line dash pattern representing a solid line will be used. If it is a single number, it will be converted into an array holding that number.
# File lib/hexapdf/content/graphics_state.rb, line 165 def self.normalize(array, phase = 0) case array when LineDashPattern then array when Array then new(array, phase) when 0 then new when Numeric then new([array], phase) else raise ArgumentError, "Unknown line dash pattern: #{array} / #{phase}" end end
Public Instance Methods
Returns true
if the other line dash pattern is the same as this one.
# File lib/hexapdf/content/graphics_state.rb, line 196 def ==(other) other.kind_of?(self.class) && other.array == array && other.phase == phase end
Converts the LineDashPattern
object to an array of operands for the associated PDF content operator.
# File lib/hexapdf/content/graphics_state.rb, line 202 def to_operands [@array, @phase] end