Class: HexaPDF::Content::LineDashPattern

Inherits:
Object
  • Object
show all
Defined in:
lib/hexapdf/content/graphics_state.rb

Overview

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(array = [], phase = 0) ⇒ LineDashPattern

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.



172
173
174
175
176
177
178
179
# File 'lib/hexapdf/content/graphics_state.rb', line 172

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

Instance Attribute Details

#arrayObject (readonly)

The dash array.



163
164
165
# File 'lib/hexapdf/content/graphics_state.rb', line 163

def array
  @array
end

#phaseObject (readonly)

The dash phase.



166
167
168
# File 'lib/hexapdf/content/graphics_state.rb', line 166

def phase
  @phase
end

Instance Method Details

#==(other) ⇒ Object

Returns true if the other line dash pattern is the same as this one.



182
183
184
# File 'lib/hexapdf/content/graphics_state.rb', line 182

def ==(other)
  other.kind_of?(self.class) && other.array == array && other.phase == phase
end

#to_operandsObject

Converts the LineDashPattern object to an array of operands for the associated PDF content operator.



188
189
190
# File 'lib/hexapdf/content/graphics_state.rb', line 188

def to_operands
  [@array, @phase]
end