class TransformerStatusWindow
Attributes
bad_frame_warnings[R]
main_layout[R]
rbs_cache[R]
rbs_editors[R]
rbs_setter_toolbox[R]
reference_frame[R]
vizkit3d[R]
Public Class Methods
new(parent = nil, options = Hash.new)
click to toggle source
Calls superclass method
# File bin/rock-transformer, line 106 def initialize(parent = nil, options = Hash.new) options = Kernel.validate_options options, live: false @live = options[:live] @reference_frame = "world_osg" @rbs_cache = Hash.new @rbs_editors = Hash.new @bad_frame_warnings = Set.new super(parent) create_ui end
Public Instance Methods
create_ui()
click to toggle source
# File bin/rock-transformer, line 121 def create_ui @main_layout = Qt::VBoxLayout.new(self) splitter = Qt::Splitter.new main_layout.add_widget(splitter) @rbs_setter_toolbox = Qt::ToolBox.new splitter.add_widget(rbs_setter_toolbox) right_pane = Qt::Widget.new layout = Qt::VBoxLayout.new(right_pane) @vizkit3d = Vizkit.vizkit3d_widget vizkit3d.use_transformer_broadcaster = false vizkit3d.setAxes(false) @reload_button = Qt::PushButton.new("Reload") reload_button.connect(SIGNAL("clicked()")) do reload end vizkit3d.setTransformer(true) layout.add_widget(reload_button) layout.add_widget(vizkit3d) splitter.add_widget(right_pane) end
load_conf(path)
click to toggle source
# File bin/rock-transformer, line 153 def load_conf(path) conf = Transformer::Configuration.new begin conf.load(path) bad_frame_warnings.clear rescue Exception => e Qt::MessageBox.warning(nil, "Load Error", "Error loading #{path}: #{e.message}") return end conf.each_example_transform do |trsf| vizkit3d.setTransformation(trsf.to.dup, trsf.from.dup, trsf.translation.to_qt, trsf.rotation.to_qt) end conf.each_static_transform do |trsf| vizkit3d.setTransformation(trsf.to.dup, trsf.from.dup, trsf.translation.to_qt, trsf.rotation.to_qt) end conf.each_dynamic_transform do |trsf| *task, port = *trsf.producer.split('.') task = task.join(".") cache_key = [trsf.from, trsf.to] rbs = rbs_cache[cache_key] if !rbs example = conf.example_transform_for(trsf.from, trsf.to) rbs = Types::Base::Samples::RigidBodyState.Invalid rbs.sourceFrame = trsf.from rbs.targetFrame = trsf.to rbs.position = example.translation rbs.orientation = example.rotation rbs_cache[cache_key] = rbs end vizkit3d.setTransformation(trsf.to.dup, trsf.from.dup, rbs.position.to_qt, rbs.orientation.to_qt) rbs_editor = rbs_editors[cache_key] if !rbs_editor widget = Qt::Widget.new layout = Qt::VBoxLayout.new(widget) rbs_editor = TransformEditor.new(trsf.producer, trsf.from, trsf.to, widget) layout.add_widget rbs_editor layout.add_stretch rbs_editor.connect(SIGNAL('valueChanged(QVector3D,QQuaternion)')) do |pos, rot| rbs.position = Eigen::Vector3.new(pos.x, pos.y, pos.z) rbs.orientation = Eigen::Quaternion.new(rot.scalar, rot.x, rot.y, rot.z) vizkit3d.setTransformation(trsf.to.dup, trsf.from.dup, pos, rot) end rbs_editors[cache_key] = rbs_editor rbs_setter_toolbox.add_item widget, "#{trsf.from}>#{trsf.to}" end if live? Orocos::Async.proxy(task).port(port).on_data do |sample| if trsf.from != sample.sourceFrame || trsf.to != sample.targetFrame if !bad_frame_warnings.include?(trsf.producer) Qt::MessageBox.warning(self, 'rock-transformer', "Received sample from #{task}.#{port} for #{sample.sourceFrame} => #{sample.targetFrame}.\nExpected #{trsf.from} => #{trsf.to} instead.\nThere will be no further warnings about this problem until you reload the configuration file.") bad_frame_warnings << trsf.producer end end rbs_editor.update(sample.position.to_qt, sample.orientation.to_qt) vizkit3d.setTransformation(sample.targetFrame.dup, sample.sourceFrame.dup, sample.position.to_qt, sample.orientation.to_qt) end end end @current_conf_path = path end
reference_frame=(frame)
click to toggle source
# File bin/rock-transformer, line 147 def reference_frame=(frame) @reference_frame = frame vizkit3d.setPluginDataFrame(frame.dup, vizkit3d.grid) vizkit3d.setVisualizationFrame(frame.dup) end
reload()
click to toggle source
# File bin/rock-transformer, line 225 def reload while rbs_setter_toolbox.count > 0 rbs_setter_toolbox.remove_item 0 end rbs_editors.clear if @current_conf_path load_conf(@current_conf_path) end end