in roboschool/cpp-household/test-tool-qt4.cpp [209:268]
void timeout()
{
ts += 1;
double phase = (ts % 300) / 300.0;
if (the_model_along_y != model_along_y->isChecked()) {
the_model_along_y = model_along_y->isChecked();
last_reload_time = 0;
}
load_model_or_robot();
if (auto_rotate->isChecked())
viz->zrot += 0.05;
if (auto_switch->isChecked()) {
if (phase > 0.6) {
viz->dup_transparent_mode = 2;
} else if (phase > 0.3) {
viz->dup_transparent_mode = 1;
} else {
viz->dup_transparent_mode = 0;
}
}
if (draw_lines->isChecked() != view_lines) {
if (draw_lines->isChecked())
viz->view_options |= SimpleRender::VIEW_LINES;
else
viz->view_options &= ~SimpleRender::VIEW_LINES;
} else if ( !!(viz->view_options & SimpleRender::VIEW_LINES) != view_lines) {
view_lines = !!(viz->view_options & SimpleRender::VIEW_LINES);
draw_lines->setChecked(view_lines);
}
if (the_robot && the_robot->joints.size() > 0) {
rolling_state_update = (rolling_state_update + 1) % (int)the_robot->joints.size();
for (int c=0; c<(int)the_robot->joints.size(); ++c) {
shared_ptr<Joint> j = the_robot->joints[c];
if (!j) continue;
QDoubleSpinBox* spin = joint_spins[c];
float p = spin->value();
switch (joint_control_mode[c]) {
case 0: j->set_relative_servo_target(p, 0.08, 0.8); break;
case 1: j->set_target_speed(p, 0.1, 20); break;
case 2: j->set_motor_torque(p); break;
default: assert(0);
}
if (rolling_state_update==c) {
float pos, speed;
j->joint_current_relative_position(&pos, &speed);
joint_labels[c]->setText(QString("%1 %2") . arg(j->joint_name.c_str()) . arg(pos, 0, 'f', 3)); // this is slow
}
}
}
viz->render_on_offscreen_surface();
viz->repaint();
}