void GripperSelTransform::OnGripperMoved( double* from, const double* to ){ if ( m_data.m_type == GripperTypeStretch) { bool stretch_done = false; double shift[3]; if(m_data.m_move_relative){ shift[0] = to[0] - from[0]; shift[1] = to[1] - from[1]; shift[2] = to[2] - from[2]; } else{ shift[0] = to[0] - m_initial_grip_pos[0]; shift[1] = to[1] - m_initial_grip_pos[1]; shift[2] = to[2] - m_initial_grip_pos[2]; } { std::list<HeeksObj *>::iterator It; for ( It = m_items_marked_at_grab.begin(); It != m_items_marked_at_grab.end(); It++ ) { HeeksObj* object = *It; if(object) { double p[3] = {m_data.m_x, m_data.m_y, m_data.m_z}; stretch_done = object->StretchTemporary(p, shift,m_data.m_data); } } } if(stretch_done) { m_data.m_x += shift[0]; m_data.m_y += shift[1]; m_data.m_z += shift[2]; from[0] += shift[0]; from[1] += shift[1]; from[2] += shift[2]; m_initial_grip_pos[0] += shift[0]; m_initial_grip_pos[1] += shift[1]; m_initial_grip_pos[2] += shift[2]; } wxGetApp().Repaint(true); return; } double object_m[16] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}; if(m_items_marked_at_grab.size() > 0)m_items_marked_at_grab.front()->GetScaleAboutMatrix(object_m); MakeMatrix ( from, to, object_m, wxGetApp().m_drag_matrix ); wxGetApp().Repaint(); }