Class: CTioga2::Graphics::Types::SimpleRange
- Inherits:
-
Object
- Object
- CTioga2::Graphics::Types::SimpleRange
- Defined in:
- lib/ctioga2/graphics/types/boundaries.rb
Overview
A range of coordinates.
Instance Attribute Summary collapse
-
#first ⇒ Object
Returns the value of attribute first.
-
#last ⇒ Object
Returns the value of attribute last.
Class Method Summary collapse
-
.bounds(values) ⇒ Object
Returns a SimpleRange object that is large enough to exactly contain all values.
-
.overall_range(ranges) ⇒ Object
Takes an array of Boundaries and returns a Boundaries object that precisely encompasses them all.
Instance Method Summary collapse
-
#apply_margin!(margin) ⇒ Object
Apply a fixed margin on the Boundaries.
-
#distance ⇒ Object
Algebraic distance.
-
#extend(range) ⇒ Object
This function makes sures that the SimpleRange object is big enough to encompass what it currently does and the range SimpleRange object.
-
#initialize(first, last = nil) ⇒ SimpleRange
constructor
Create a new SimpleRange object that runs from first to last (last can be less than first).
-
#max ⇒ Object
Maximum value.
-
#min ⇒ Object
Minimum value.
-
#override(override) ⇒ Object
Override the Boundaries with the contents of override.
Constructor Details
#initialize(first, last = nil) ⇒ SimpleRange
Create a new SimpleRange object that runs from first to last (last can be less than first). A nil, false or NaN in one of those means unspecified.
Alternatively, first can be an object that responds to #first and #last.
39 40 41 42 43 44 45 46 47 |
# File 'lib/ctioga2/graphics/types/boundaries.rb', line 39 def initialize(first, last = nil) if first.respond_to?(:first) @first = first.first @last = first.last else @first = first @last = last end end |
Instance Attribute Details
#first ⇒ Object
Returns the value of attribute first.
31 32 33 |
# File 'lib/ctioga2/graphics/types/boundaries.rb', line 31 def first @first end |
#last ⇒ Object
Returns the value of attribute last.
31 32 33 |
# File 'lib/ctioga2/graphics/types/boundaries.rb', line 31 def last @last end |
Class Method Details
.bounds(values) ⇒ Object
Returns a SimpleRange object that is large enough to exactly contain all values
109 110 111 |
# File 'lib/ctioga2/graphics/types/boundaries.rb', line 109 def self.bounds(values) return SimpleRange.new(values.min, values.max) end |
.overall_range(ranges) ⇒ Object
Takes an array of Boundaries and returns a Boundaries object that precisely encompasses them all. Invalid floats are simply ignored.
116 117 118 119 120 121 122 |
# File 'lib/ctioga2/graphics/types/boundaries.rb', line 116 def self.overall_range(ranges) retval = SimpleRange.new(nil, nil) for r in ranges retval.extend(b) end return retval end |
Instance Method Details
#apply_margin!(margin) ⇒ Object
Apply a fixed margin on the Boundaries.
101 102 103 104 105 |
# File 'lib/ctioga2/graphics/types/boundaries.rb', line 101 def apply_margin!(margin) d = self.distance @first = @first - margin * d @last = @last + margin * d end |
#distance ⇒ Object
Algebraic distance
60 61 62 |
# File 'lib/ctioga2/graphics/types/boundaries.rb', line 60 def distance return @last - @first end |
#extend(range) ⇒ Object
This function makes sures that the SimpleRange object is big enough to encompass what it currently does and the range SimpleRange object.
todo this does not work correctly in the case of reversed boundaries. I don’t think it can anyway.
Actually, it even works with normal Range elements !
72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/ctioga2/graphics/types/boundaries.rb', line 72 def extend(range) # Left/right if (! @first.is_a? Float) or @first.nan? or (@first > range.first) @first = range.first end if (! @last.is_a? Float) or @last.nan? or (@last < range.last) @last = range.last end return self end |
#max ⇒ Object
Maximum value
55 56 57 |
# File 'lib/ctioga2/graphics/types/boundaries.rb', line 55 def max @first > @last ? @first : @last end |
#min ⇒ Object
Minimum value
50 51 52 |
# File 'lib/ctioga2/graphics/types/boundaries.rb', line 50 def min @first < @last ? @first : @last end |
#override(override) ⇒ Object
Override the Boundaries with the contents of override. All elements which are not nil or NaN from override precisely override those in self.
91 92 93 94 95 96 97 98 |
# File 'lib/ctioga2/graphics/types/boundaries.rb', line 91 def override(override) for el in [ :first, :last] val = override.send(el) if val and (val == val) # Strip NaN on the property that NaN != NaN self.send("#{el}=", val) end end end |