Class: TPPlus::Nodes::MotionNode

Inherits:
Object
  • Object
show all
Defined in:
lib/tp_plus/nodes/motion_node.rb

Instance Method Summary collapse

Constructor Details

#initialize(type, destination, modifiers) ⇒ MotionNode

Returns a new instance of MotionNode.



4
5
6
7
8
# File 'lib/tp_plus/nodes/motion_node.rb', line 4

def initialize(type, destination, modifiers)
  @type = type
  @destination = destination
  @modifiers = modifiers
end

Instance Method Details

#actual_modifiersObject



31
32
33
# File 'lib/tp_plus/nodes/motion_node.rb', line 31

def actual_modifiers
  @actual_modifiers ||= @modifiers.reject {|m| m.is_a? SpeedNode}.reject {|m| m.is_a? TerminationNode }
end

#eval(context) ⇒ Object



55
56
57
58
59
# File 'lib/tp_plus/nodes/motion_node.rb', line 55

def eval(context)
  raise "Speed is invalid for motion type" unless speed_valid?(context)

  "#{prefix} #{@destination.eval(context)} #{speed_node.eval(context)} #{termination_node.eval(context)}#{modifiers_string(context)}"
end

#modifiers_string(context) ⇒ Object



35
36
37
38
39
40
# File 'lib/tp_plus/nodes/motion_node.rb', line 35

def modifiers_string(context)
  return "" unless actual_modifiers.any?

  strings_array = [""] << actual_modifiers.map { |m| m.eval(context) }
  @modifiers_string = strings_array.join(" ")
end

#prefixObject



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/tp_plus/nodes/motion_node.rb', line 10

def prefix
  case @type
  when "linear_move"
    "L"
  when "joint_move"
    "J"
  when "circular_move"
    "C"
  else
    raise "Unsupported motion"
  end
end

#speed_nodeObject



23
24
25
# File 'lib/tp_plus/nodes/motion_node.rb', line 23

def speed_node
  @speed_node ||= @modifiers.select {|m| m.is_a? SpeedNode }.first
end

#speed_valid?(context) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/tp_plus/nodes/motion_node.rb', line 42

def speed_valid?(context)
  case @type
  when "linear_move"
    return true if speed_node.eval(context) == "max_speed"

    ["mm/sec"].include? speed_node.units
  when "joint_move"
    return false if speed_node.eval(context) == "max_speed"

    ["%"].include? speed_node.units
  end
end

#termination_nodeObject



27
28
29
# File 'lib/tp_plus/nodes/motion_node.rb', line 27

def termination_node
  @termination_node ||= @modifiers.select {|m| m.is_a? TerminationNode }.first
end