lib/vedeu/geometry/coordinate.rb in vedeu-0.6.3 vs lib/vedeu/geometry/coordinate.rb in vedeu-0.6.4
- old
+ new
@@ -44,175 +44,6 @@
@y ||= Vedeu::GenericCoordinate.new(name: @name, offset: @oy, type: :y)
end
end # Coordinate
- # Crudely corrects out of range values.
- #
- class GenericCoordinate
-
- # Return a new instance of Vedeu::GenericCoordinate.
- #
- # @param attributes [Hash]
- # @option attributes name [String]
- # @option attributes type [Symbol]
- # @option attributes offset [Fixnum]
- # @return [Vedeu::GenericCoordinate]
- def initialize(attributes = {})
- @attributes = defaults.merge!(attributes)
-
- @attributes.each { |key, value| instance_variable_set("@#{key}", value) }
- end
-
- # Returns the maximum coordinate for an area.
- #
- # @example
- # # d = 2
- # # d_dn = 4
- # dn # => 6
- #
- # @return [Fixnum]
- def dn
- if d_dn <= 0
- 0
-
- else
- d + d_dn
-
- end
- end
- alias_method :xn, :dn
- alias_method :yn, :dn
-
- # Returns the coordinate for a given index.
- #
- # @example
- # # d_range = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
- # position # => 4
- # position(-2) # => 4
- # position(2) # => 6
- # position(15) # => 13
- #
- # @return [Fixnum]
- def position
- pos = case
- when offset <= 0 then d
- when offset > dn_index then dn
- else
- d_range[offset]
- end
-
- pos = pos < bd ? bd : pos
- pos = pos > bdn ? bdn : pos
- pos
- end
- alias_method :x_position, :position
- alias_method :y_position, :position
-
- protected
-
- # @!attribute [r] name
- # @return [String]
- attr_reader :name
-
- # @!attribute [r] offset
- # @return [Fixnum]
- attr_reader :offset
-
- # @!attribute [r] type
- # @return [Symbol]
- attr_reader :type
-
- private
-
- # @see Vedeu::Borders#by_name
- def border
- @border ||= Vedeu.borders.by_name(name)
- end
-
- # Return the :x or :y value from the border.
- #
- # @return [Fixnum]
- def d
- border.send(coordinate_type[0])
- end
-
- # Return the :bx or :by value from the border.
- #
- # @return [Fixnum]
- def bd
- border.send(coordinate_type[1])
- end
-
- # Return the :bxn or :byn value from the border.
- #
- # @return [Fixnum]
- def bdn
- border.send(coordinate_type[2])
- end
-
- # Return the :width or :height value from the border.
- #
- # @return [Fixnum]
- def d_dn
- border.send(coordinate_type[3])
- end
-
- # Ascertain the correct methods to use for determining the coordinates.
- #
- # @raise [Vedeu::Error::InvalidSyntax] When the coordinate type is not
- # given.
- # @return [Fixnum]
- def coordinate_type
- @_type ||= case type
- when :x then [:x, :bx, :bxn, :width]
- when :y then [:y, :by, :byn, :height]
- else
- fail Vedeu::Error::InvalidSyntax,
- 'Coordinate type not given, cannot continue.'
- end
- end
-
- # Returns the maximum index for an area.
- #
- # @example
- # # d_dn = 3
- # dn_index # => 2
- #
- # @return [Fixnum]
- def dn_index
- if d_dn < 1
- 0
-
- else
- d_dn - 1
-
- end
- end
-
- # Returns an array with all coordinates from d to dn.
- #
- # @example
- # # d_dn = 10
- # # d = 4
- # # dn = 14
- # d_range # => [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
- #
- # @return [Array]
- def d_range
- (d...dn).to_a
- end
-
- # The default values for a new instance of this class.
- #
- # @return [Hash]
- def defaults
- {
- name: '',
- offset: nil,
- type: :x,
- }
- end
-
- end # GenericCoordinate
-
end # Vedeu