Merge pull request #5636 from maxGimeno/Demo-Enhance_Animate_plugin-maxGimeno

Polyhedron_demo: Animate plugin
This commit is contained in:
Sebastien Loriot 2021-07-19 07:49:29 +02:00 committed by GitHub
commit edc456e7c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 32 additions and 5 deletions

View File

@ -107,7 +107,28 @@ public :
public Q_SLOTS:
void read_frame()
void read_prev_frame()
{
typedef boost::property_map<SMesh,CGAL::vertex_point_t>::type VPmap;
const CGAL::qglviewer::Vec offset = Three::mainViewer()->offset();
Frame cur_frame = old_frames.back();
old_frames.pop_back();
for(auto pp : cur_frame)
{
SMesh::Vertex_index vh(static_cast<SMesh::size_type>(pp.first));
VPmap vpm = get(CGAL::vertex_point, *sm_item->face_graph());
Point_3 np = pp.second;
put(vpm, vh, Point_3(np.x()-offset.x,
np.y()-offset.y,
np.z()-offset.z));
sm_item->updateVertex(vh);
}
sm_item->redraw();
}
void read_next_frame()
{
typedef boost::property_map<SMesh,CGAL::vertex_point_t>::type VPmap;
const CGAL::qglviewer::Vec offset = Three::mainViewer()->offset();
@ -126,7 +147,7 @@ public Q_SLOTS:
timer.stop();
return;
}
Frame cur_frame;
if(nb_verts != 0)
{
EPICK::FT x,y,z;
@ -161,12 +182,14 @@ public Q_SLOTS:
{
SMesh::Vertex_index vh(id);
VPmap vpm = get(CGAL::vertex_point, *sm_item->face_graph());
cur_frame.push_back(std::make_pair(id, get(vpm, vh)));
put(vpm, vh, Point_3(x-offset.x,
y-offset.y,
z-offset.z));
sm_item->updateVertex(vh);
}
}
old_frames.push_back(cur_frame);
}
sm_item->redraw();
@ -187,7 +210,7 @@ public Q_SLOTS:
position = frame_pos[++frame];
dock_widget->frameSlider->setValue(frame);
dock_widget->frameLabel->setText(QString("%1/%2").arg(frame).arg(frame_pos.size()-1));
read_frame();
read_next_frame();
}
void prev_frame()
@ -197,7 +220,7 @@ public Q_SLOTS:
position = frame_pos[--frame];
dock_widget->frameSlider->setValue(frame);
dock_widget->frameLabel->setText(QString("%1/%2").arg(frame).arg(frame_pos.size()-1));
read_frame();
read_prev_frame();
}
void start_animation()
@ -281,7 +304,7 @@ public Q_SLOTS:
frame = i;
position = frame_pos[frame];
dock_widget->frameLabel->setText(QString("%1/%2").arg(frame).arg(frame_pos.size()-1));
read_frame();
read_next_frame();
});
QApplication::restoreOverrideCursor();
@ -297,6 +320,7 @@ public Q_SLOTS:
sm_item=nullptr;
position=0;
frame_pos.clear();
old_frames.clear();
filepath="";
frame = -1;
dock_widget->resetButton->setEnabled(false);
@ -311,6 +335,7 @@ public Q_SLOTS:
}
private:
typedef std::vector<std::pair<std::size_t, Point_3> > Frame;
QAction* actionAnimate;
Messages_interface* messages;
Scene_interface* scene;
@ -319,6 +344,8 @@ private:
std::streampos position;
Scene_surface_mesh_item* sm_item;
std::vector<std::streampos> frame_pos;
std::vector<Frame> old_frames;
QTimer timer;
int frame;
std::vector<SMesh::Point> initial_points;