Class: TPPlus::Nodes::PositionDataNode
- Inherits:
-
Object
- Object
- TPPlus::Nodes::PositionDataNode
- Defined in:
- lib/tp_plus/nodes/position_data_node.rb
Instance Attribute Summary collapse
-
#hash ⇒ Object
readonly
Returns the value of attribute hash.
Instance Method Summary collapse
- #boolean?(thing) ⇒ Boolean
- #eval(context, options = {}) ⇒ Object
-
#initialize(hash) ⇒ PositionDataNode
constructor
A new instance of PositionDataNode.
- #mask_valid?(position_hash) ⇒ Boolean
- #position_valid?(position_hash) ⇒ Boolean
- #valid? ⇒ Boolean
Constructor Details
#initialize(hash) ⇒ PositionDataNode
Returns a new instance of PositionDataNode.
5 6 7 8 |
# File 'lib/tp_plus/nodes/position_data_node.rb', line 5 def initialize(hash) @hash = hash @ids = [] end |
Instance Attribute Details
#hash ⇒ Object (readonly)
Returns the value of attribute hash.
4 5 6 |
# File 'lib/tp_plus/nodes/position_data_node.rb', line 4 def hash @hash end |
Instance Method Details
#boolean?(thing) ⇒ Boolean
55 56 57 |
# File 'lib/tp_plus/nodes/position_data_node.rb', line 55 def boolean?(thing) thing.is_a?(TrueClass) || thing.is_a?(FalseClass) end |
#eval(context, options = {}) ⇒ Object
59 60 61 62 63 |
# File 'lib/tp_plus/nodes/position_data_node.rb', line 59 def eval(context, ={}) raise "Invalid position data" unless valid? context.position_data = @hash nil end |
#mask_valid?(position_hash) ⇒ Boolean
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/tp_plus/nodes/position_data_node.rb', line 28 def mask_valid?(position_hash) return false unless position_hash[:group].is_a?(Fixnum) return false unless position_hash[:uframe].is_a?(Fixnum) return false unless position_hash[:utool].is_a?(Fixnum) if position_hash[:config].is_a?(Hash) return false unless boolean?(position_hash[:config][:flip]) return false unless boolean?(position_hash[:config][:up]) return false unless boolean?(position_hash[:config][:top]) return false unless position_hash[:config][:turn_counts].is_a?(Array) return false unless position_hash[:config][:turn_counts].length == 3 return false if position_hash[:config][:turn_counts].map {|tc| tc.is_a?(Fixnum) == false }.any? return false unless position_hash[:components].is_a?(Hash) [:x,:y,:z,:w,:p,:r].each do |component| return false unless position_hash[:components][component].is_a?(Float) end else # must be joint representation return false unless position_hash[:components].is_a?(Hash) position_hash[:components].each do |component| return false unless component[1].is_a?(Float) end end true end |
#position_valid?(position_hash) ⇒ Boolean
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/tp_plus/nodes/position_data_node.rb', line 17 def position_valid?(position_hash) return false if @ids.include?(position_hash[:id]) @ids.push(position_hash[:id]) return false unless position_hash[:mask].is_a? Array position_hash[:mask].select {|q| !mask_valid?(q) }.empty? end |
#valid? ⇒ Boolean
10 11 12 13 14 15 |
# File 'lib/tp_plus/nodes/position_data_node.rb', line 10 def valid? return false unless @hash[:positions].is_a?(Array) return false if @hash[:positions].map {|p| position_valid?(p) == false }.any? true end |