Class: HexaPDF::Content::LineDashPattern
- Inherits:
-
Object
- Object
- HexaPDF::Content::LineDashPattern
- 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
-
#array ⇒ Object
readonly
The dash array.
-
#phase ⇒ Object
readonly
The dash phase.
Class Method Summary collapse
-
.normalize(array, phase = 0) ⇒ Object
Returns the arguments normalized to a valid LineDashPattern instance.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Returns
true
if the other line dash pattern is the same as this one. -
#initialize(array = [], phase = 0) ⇒ LineDashPattern
constructor
Inititalizes the line dash pattern with the given
array
andphase
. -
#to_operands ⇒ Object
Converts the LineDashPattern object to an array of operands for the associated PDF content operator.
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.
184 185 186 187 188 189 190 191 |
# File 'lib/hexapdf/content/graphics_state.rb', line 184 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
#array ⇒ Object (readonly)
The dash array.
175 176 177 |
# File 'lib/hexapdf/content/graphics_state.rb', line 175 def array @array end |
#phase ⇒ Object (readonly)
The dash phase.
178 179 180 |
# File 'lib/hexapdf/content/graphics_state.rb', line 178 def phase @phase end |
Class Method Details
.normalize(array, phase = 0) ⇒ Object
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.
163 164 165 166 167 168 169 170 171 172 |
# File 'lib/hexapdf/content/graphics_state.rb', line 163 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 |
Instance Method Details
#==(other) ⇒ Object
Returns true
if the other line dash pattern is the same as this one.
194 195 196 |
# File 'lib/hexapdf/content/graphics_state.rb', line 194 def ==(other) other.kind_of?(self.class) && other.array == array && other.phase == phase end |
#to_operands ⇒ Object
Converts the LineDashPattern object to an array of operands for the associated PDF content operator.
200 201 202 |
# File 'lib/hexapdf/content/graphics_state.rb', line 200 def to_operands [@array, @phase] end |