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.
187 188 189 190 191 192 193 194 |
# File 'lib/hexapdf/content/graphics_state.rb', line 187 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.
178 179 180 |
# File 'lib/hexapdf/content/graphics_state.rb', line 178 def array @array end |
#phase ⇒ Object (readonly)
The dash phase.
181 182 183 |
# File 'lib/hexapdf/content/graphics_state.rb', line 181 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.
166 167 168 169 170 171 172 173 174 175 |
# File 'lib/hexapdf/content/graphics_state.rb', line 166 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.
197 198 199 |
# File 'lib/hexapdf/content/graphics_state.rb', line 197 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.
203 204 205 |
# File 'lib/hexapdf/content/graphics_state.rb', line 203 def to_operands [@array, @phase] end |