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 e.g. Content::Canvas#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
:call-seq: LineDashPattern.normalize(line_dash_pattern) -> line_dash_pattern LineDashPattern.normalize(array, phase = 0) -> LineDashPattern.new(array, phase) LineDashPattern.normalize(number, phase = 0) -> LineDashPattern.new(, phase) LineDashPattern.normalize(0) -> LineDashPattern.new.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Returns
trueif 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
arrayandphase. -
#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.
241 242 243 244 245 246 247 248 |
# File 'lib/hexapdf/content/graphics_state.rb', line 241 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.
232 233 234 |
# File 'lib/hexapdf/content/graphics_state.rb', line 232 def array @array end |
#phase ⇒ Object (readonly)
The dash phase.
235 236 237 |
# File 'lib/hexapdf/content/graphics_state.rb', line 235 def phase @phase end |
Class Method Details
.normalize(array, phase = 0) ⇒ Object
:call-seq:
LineDashPattern.normalize(line_dash_pattern) -> line_dash_pattern
LineDashPattern.normalize(array, phase = 0) -> LineDashPattern.new(array, phase)
LineDashPattern.normalize(number, phase = 0) -> LineDashPattern.new([number], phase)
LineDashPattern.normalize(0) -> LineDashPattern.new
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.
220 221 222 223 224 225 226 227 228 229 |
# File 'lib/hexapdf/content/graphics_state.rb', line 220 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.
251 252 253 |
# File 'lib/hexapdf/content/graphics_state.rb', line 251 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.
257 258 259 |
# File 'lib/hexapdf/content/graphics_state.rb', line 257 def to_operands [@array, @phase] end |