106
94
<div class="title">KeyFrameInterpolator Class Reference</div> </div>
107
95
</div><!--header-->
108
96
<div class="contents">
109
<!-- doxytag: class="qglviewer::KeyFrameInterpolator" -->
110
98
<p>A keyFrame Catmull-Rom <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> interpolator.
111
99
<a href="classqglviewer_1_1KeyFrameInterpolator.html#details">More...</a></p>
113
101
<p><a href="classqglviewer_1_1KeyFrameInterpolator-members.html">List of all members.</a></p>
114
102
<table class="memberdecls">
115
<tr><td colspan="2"><h2><a name="signals"></a>
103
<tr class="heading"><td colspan="2"><h2><a name="signals"></a>
116
104
Signals</h2></td></tr>
117
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated</a> ()</td></tr>
118
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab4010a17bf77b9940b120ee8ed9a0271">endReached</a> ()</td></tr>
119
<tr><td colspan="2"><h2><a name="pub-methods"></a>
105
<tr class="memitem:ab55c2a4f1732b90057fae4b6037399de"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated</a> ()</td></tr>
106
<tr class="memitem:ab4010a17bf77b9940b120ee8ed9a0271"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab4010a17bf77b9940b120ee8ed9a0271">endReached</a> ()</td></tr>
107
</table><table class="memberdecls">
108
<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
120
109
Public Member Functions</h2></td></tr>
121
<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a2a78bc183af3ac92802cbe605e2a878e">KeyFrameInterpolator</a> (<a class="el" href="classqglviewer_1_1Frame.html">Frame</a> *fr=NULL)</td></tr>
122
<tr><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a110b875f9265a30f7a520a3603362f95">~KeyFrameInterpolator</a> ()</td></tr>
123
<tr><td colspan="2"><h2><a name="member-group"></a>
110
<tr class="memitem:a2a78bc183af3ac92802cbe605e2a878e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a2a78bc183af3ac92802cbe605e2a878e">KeyFrameInterpolator</a> (<a class="el" href="classqglviewer_1_1Frame.html">Frame</a> *fr=NULL)</td></tr>
111
<tr class="memitem:a110b875f9265a30f7a520a3603362f95"><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a110b875f9265a30f7a520a3603362f95">~KeyFrameInterpolator</a> ()</td></tr>
112
</table><table class="memberdecls">
113
<tr class="heading"><td colspan="2"><h2><a name="member-group"></a>
124
114
Path creation</h2></td></tr>
125
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a44ac54529e675a2157067c9d205d9622">addKeyFrame</a> (const <a class="el" href="classqglviewer_1_1Frame.html">Frame</a> &<a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a>)</td></tr>
126
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a379af0370e27c513c4d9091bff272b40">addKeyFrame</a> (const <a class="el" href="classqglviewer_1_1Frame.html">Frame</a> &<a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a>, float time)</td></tr>
127
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a23d3166003e0355b718f34a3e6c92a1b">addKeyFrame</a> (const <a class="el" href="classqglviewer_1_1Frame.html">Frame</a> *const <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a>)</td></tr>
128
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#aa821392c6e108d5c7814317b8c3cd47f">addKeyFrame</a> (const <a class="el" href="classqglviewer_1_1Frame.html">Frame</a> *const <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a>, float time)</td></tr>
129
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ae343912505ce83d62bea580a83c7bc34">deletePath</a> ()</td></tr>
130
<tr><td colspan="2"><h2><a name="member-group"></a>
115
<tr class="memitem:a44ac54529e675a2157067c9d205d9622"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a44ac54529e675a2157067c9d205d9622">addKeyFrame</a> (const <a class="el" href="classqglviewer_1_1Frame.html">Frame</a> &<a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a>)</td></tr>
116
<tr class="memitem:a379af0370e27c513c4d9091bff272b40"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a379af0370e27c513c4d9091bff272b40">addKeyFrame</a> (const <a class="el" href="classqglviewer_1_1Frame.html">Frame</a> &<a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a>, float time)</td></tr>
117
<tr class="memitem:a23d3166003e0355b718f34a3e6c92a1b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a23d3166003e0355b718f34a3e6c92a1b">addKeyFrame</a> (const <a class="el" href="classqglviewer_1_1Frame.html">Frame</a> *const <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a>)</td></tr>
118
<tr class="memitem:aa821392c6e108d5c7814317b8c3cd47f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#aa821392c6e108d5c7814317b8c3cd47f">addKeyFrame</a> (const <a class="el" href="classqglviewer_1_1Frame.html">Frame</a> *const <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a>, float time)</td></tr>
119
<tr class="memitem:ae343912505ce83d62bea580a83c7bc34"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ae343912505ce83d62bea580a83c7bc34">deletePath</a> ()</td></tr>
120
</table><table class="memberdecls">
121
<tr class="heading"><td colspan="2"><h2><a name="member-group"></a>
131
122
Associated Frame</h2></td></tr>
132
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classqglviewer_1_1Frame.html">Frame</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a> () const </td></tr>
133
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a1e16bb31ee6240a9f0e3a6824f4bef0d">setFrame</a> (<a class="el" href="classqglviewer_1_1Frame.html">Frame</a> *const <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a>)</td></tr>
134
<tr><td colspan="2"><h2><a name="member-group"></a>
123
<tr class="memitem:a5426b68b2b1bb6ad8dc0007914412b4f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classqglviewer_1_1Frame.html">Frame</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a> () const </td></tr>
124
<tr class="memitem:a1e16bb31ee6240a9f0e3a6824f4bef0d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a1e16bb31ee6240a9f0e3a6824f4bef0d">setFrame</a> (<a class="el" href="classqglviewer_1_1Frame.html">Frame</a> *const <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a>)</td></tr>
125
</table><table class="memberdecls">
126
<tr class="heading"><td colspan="2"><h2><a name="member-group"></a>
135
127
Path parameters</h2></td></tr>
136
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classqglviewer_1_1Frame.html">Frame</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a2437eecf340817ad1a3f86c822b111e8">keyFrame</a> (int index) const </td></tr>
137
<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a976ec792d48ccd7e53b55bb91b49d473">keyFrameTime</a> (int index) const </td></tr>
138
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#aba3744250d9cd01ec848f81151a62273">numberOfKeyFrames</a> () const </td></tr>
139
<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a80c858ec25677a47d066e0900f4e1980">duration</a> () const </td></tr>
140
<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5335f8bedcb11c4e9cc06cbbab838477">firstTime</a> () const </td></tr>
141
<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3e953e6c813baa461389c132c9509e30">lastTime</a> () const </td></tr>
142
<tr><td colspan="2"><h2><a name="member-group"></a>
128
<tr class="memitem:a2437eecf340817ad1a3f86c822b111e8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classqglviewer_1_1Frame.html">Frame</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a2437eecf340817ad1a3f86c822b111e8">keyFrame</a> (int index) const </td></tr>
129
<tr class="memitem:a976ec792d48ccd7e53b55bb91b49d473"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a976ec792d48ccd7e53b55bb91b49d473">keyFrameTime</a> (int index) const </td></tr>
130
<tr class="memitem:aba3744250d9cd01ec848f81151a62273"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#aba3744250d9cd01ec848f81151a62273">numberOfKeyFrames</a> () const </td></tr>
131
<tr class="memitem:a80c858ec25677a47d066e0900f4e1980"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a80c858ec25677a47d066e0900f4e1980">duration</a> () const </td></tr>
132
<tr class="memitem:a5335f8bedcb11c4e9cc06cbbab838477"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5335f8bedcb11c4e9cc06cbbab838477">firstTime</a> () const </td></tr>
133
<tr class="memitem:a3e953e6c813baa461389c132c9509e30"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3e953e6c813baa461389c132c9509e30">lastTime</a> () const </td></tr>
134
</table><table class="memberdecls">
135
<tr class="heading"><td colspan="2"><h2><a name="member-group"></a>
143
136
Interpolation parameters</h2></td></tr>
144
<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime</a> () const </td></tr>
145
<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a7e468c84c27d896e341563c83e102aad">interpolationSpeed</a> () const </td></tr>
146
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a21bf6165ea3a6be2fd854e9be5105b1e">interpolationPeriod</a> () const </td></tr>
147
<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a906c17cf6c1d51a54c7d3b9b4c9cbd45">loopInterpolation</a> () const </td></tr>
148
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab860af88ea46ecedb2a648157bb68dc3">setInterpolationTime</a> (float time)</td></tr>
149
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3cc64e95e1b8dfda110bcf3d033ecf2d">setInterpolationSpeed</a> (float speed)</td></tr>
150
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a9763e647346a8bee885517d9985173fd">setInterpolationPeriod</a> (int period)</td></tr>
151
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a31a491ac2ac016298cbd1c66f07be6dd">setLoopInterpolation</a> (bool loop=true)</td></tr>
152
<tr><td colspan="2"><h2><a name="member-group"></a>
137
<tr class="memitem:a58326b7948e78c1d2861ca659492207a"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime</a> () const </td></tr>
138
<tr class="memitem:a7e468c84c27d896e341563c83e102aad"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a7e468c84c27d896e341563c83e102aad">interpolationSpeed</a> () const </td></tr>
139
<tr class="memitem:a21bf6165ea3a6be2fd854e9be5105b1e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a21bf6165ea3a6be2fd854e9be5105b1e">interpolationPeriod</a> () const </td></tr>
140
<tr class="memitem:a906c17cf6c1d51a54c7d3b9b4c9cbd45"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a906c17cf6c1d51a54c7d3b9b4c9cbd45">loopInterpolation</a> () const </td></tr>
141
<tr class="memitem:ab860af88ea46ecedb2a648157bb68dc3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab860af88ea46ecedb2a648157bb68dc3">setInterpolationTime</a> (float time)</td></tr>
142
<tr class="memitem:a3cc64e95e1b8dfda110bcf3d033ecf2d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3cc64e95e1b8dfda110bcf3d033ecf2d">setInterpolationSpeed</a> (float speed)</td></tr>
143
<tr class="memitem:a9763e647346a8bee885517d9985173fd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a9763e647346a8bee885517d9985173fd">setInterpolationPeriod</a> (int period)</td></tr>
144
<tr class="memitem:a31a491ac2ac016298cbd1c66f07be6dd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a31a491ac2ac016298cbd1c66f07be6dd">setLoopInterpolation</a> (bool loop=true)</td></tr>
145
</table><table class="memberdecls">
146
<tr class="heading"><td colspan="2"><h2><a name="member-group"></a>
153
147
Interpolation</h2></td></tr>
154
<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a8cc0fa56ba7b6da71226cc191cc18e70">interpolationIsStarted</a> () const </td></tr>
155
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3c0098b2307d04e904c1f64f505e5819">startInterpolation</a> (int period=-1)</td></tr>
156
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a16f0910299ae07cede3396a14ec01f4b">stopInterpolation</a> ()</td></tr>
157
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a0bfc602dc2fcaca40cc49195bba7ba74">resetInterpolation</a> ()</td></tr>
158
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#acf744bd8ce09e5433f829f63ba310eef">toggleInterpolation</a> ()</td></tr>
159
<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ad5393783e1768b6d688a8c49ddea56ae">interpolateAtTime</a> (float time)</td></tr>
160
<tr><td colspan="2"><h2><a name="member-group"></a>
148
<tr class="memitem:a8cc0fa56ba7b6da71226cc191cc18e70"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a8cc0fa56ba7b6da71226cc191cc18e70">interpolationIsStarted</a> () const </td></tr>
149
<tr class="memitem:a3c0098b2307d04e904c1f64f505e5819"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3c0098b2307d04e904c1f64f505e5819">startInterpolation</a> (int period=-1)</td></tr>
150
<tr class="memitem:a16f0910299ae07cede3396a14ec01f4b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a16f0910299ae07cede3396a14ec01f4b">stopInterpolation</a> ()</td></tr>
151
<tr class="memitem:a0bfc602dc2fcaca40cc49195bba7ba74"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a0bfc602dc2fcaca40cc49195bba7ba74">resetInterpolation</a> ()</td></tr>
152
<tr class="memitem:acf744bd8ce09e5433f829f63ba310eef"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#acf744bd8ce09e5433f829f63ba310eef">toggleInterpolation</a> ()</td></tr>
153
<tr class="memitem:ad5393783e1768b6d688a8c49ddea56ae"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ad5393783e1768b6d688a8c49ddea56ae">interpolateAtTime</a> (float time)</td></tr>
154
</table><table class="memberdecls">
155
<tr class="heading"><td colspan="2"><h2><a name="member-group"></a>
161
156
Path drawing</h2></td></tr>
162
<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#aca0ce46b39ad4093450019d77fd247f2">drawPath</a> (int mask=1, int nbFrames=6, float scale=1.0f)</td></tr>
163
<tr><td colspan="2"><h2><a name="member-group"></a>
157
<tr class="memitem:aca0ce46b39ad4093450019d77fd247f2"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#aca0ce46b39ad4093450019d77fd247f2">drawPath</a> (int mask=1, int nbFrames=6, float scale=1.0f)</td></tr>
158
</table><table class="memberdecls">
159
<tr class="heading"><td colspan="2"><h2><a name="member-group"></a>
164
160
XML representation</h2></td></tr>
165
<tr><td class="memItemLeft" align="right" valign="top">virtual QDomElement </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a48e0e2dd26cd96418c8b889ceabe80f6">domElement</a> (const QString &name, QDomDocument &document) const </td></tr>
166
<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#acd13d2ddeca530cb9f26ead47f7d25d3">initFromDOMElement</a> (const QDomElement &element)</td></tr>
161
<tr class="memitem:a48e0e2dd26cd96418c8b889ceabe80f6"><td class="memItemLeft" align="right" valign="top">virtual QDomElement </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a48e0e2dd26cd96418c8b889ceabe80f6">domElement</a> (const QString &name, QDomDocument &document) const </td></tr>
162
<tr class="memitem:acd13d2ddeca530cb9f26ead47f7d25d3"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#acd13d2ddeca530cb9f26ead47f7d25d3">initFromDOMElement</a> (const QDomElement &element)</td></tr>
163
</table><table class="memberdecls">
164
<tr class="heading"><td colspan="2"><h2><a name="inherited"></a>
165
Additional Inherited Members</h2></td></tr>
168
167
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
169
168
<div class="textblock"><p>A keyFrame Catmull-Rom <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> interpolator. </p>
170
169
<p>A KeyFrameInterpolator holds keyFrames (that define a path) and a pointer to a <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> of your application (which will be interpolated). When the user <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3c0098b2307d04e904c1f64f505e5819">startInterpolation()</a>, the KeyFrameInterpolator regularly updates the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> position and orientation along the path.</p>
171
170
<p>Here is a typical utilization example (see also the <a href="../examples/keyFrames.html">keyFrames example</a>): </p>
172
<div class="fragment"><pre class="fragment"> init()
174
<span class="comment">// The KeyFrameInterpolator kfi is given the Frame that it will drive over time.</span>
175
kfi = <span class="keyword">new</span> <a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#a2a78bc183af3ac92802cbe605e2a878e">KeyFrameInterpolator</a>( <span class="keyword">new</span> Frame() );
176
kfi->addKeyFrame( Frame( Vec(1,0,0), Quaternion() ) );
177
kfi->addKeyFrame( <span class="keyword">new</span> Frame( Vec(2,1,0), Quaternion() ) );
178
<span class="comment">// ...and so on for all the keyFrames.</span>
180
<span class="comment">// Ask for a display update after each update of the KeyFrameInterpolator</span>
181
connect(kfi, SIGNAL(<a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated</a>()), SLOT(updateGL()));
183
kfi->startInterpolation();
189
glMultMatrixd( kfi->frame()->matrix() );
190
<span class="comment">// Draw your object here. Its position and orientation are interpolated.</span>
193
</pre></div><p>The keyFrames are defined by a <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> and a time, expressed in seconds. The <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> can be provided as a const reference or as a pointer to a <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> (see the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a44ac54529e675a2157067c9d205d9622">addKeyFrame()</a> methods). In the latter case, the path will automatically be updated when the <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> is modified (using the <a class="el" href="classqglviewer_1_1Frame.html#ab6722375e68e03d151762ebfc83c5459">Frame::modified()</a> signal).</p>
171
<div class="fragment"><div class="line"> init()</div>
172
<div class="line"> {</div>
173
<div class="line"> <span class="comment">// The KeyFrameInterpolator kfi is given the Frame that it will drive over time.</span></div>
174
<div class="line"> kfi = <span class="keyword">new</span> <a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#a2a78bc183af3ac92802cbe605e2a878e">KeyFrameInterpolator</a>( <span class="keyword">new</span> Frame() );</div>
175
<div class="line"> kfi->addKeyFrame( Frame( Vec(1,0,0), Quaternion() ) );</div>
176
<div class="line"> kfi->addKeyFrame( <span class="keyword">new</span> Frame( Vec(2,1,0), Quaternion() ) );</div>
177
<div class="line"> <span class="comment">// ...and so on for all the keyFrames.</span></div>
178
<div class="line"></div>
179
<div class="line"> <span class="comment">// Ask for a display update after each update of the KeyFrameInterpolator</span></div>
180
<div class="line"> connect(kfi, SIGNAL(<a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated</a>()), SLOT(updateGL()));</div>
181
<div class="line"></div>
182
<div class="line"> kfi->startInterpolation();</div>
183
<div class="line"> }</div>
184
<div class="line"></div>
185
<div class="line"> draw()</div>
186
<div class="line"> {</div>
187
<div class="line"> glPushMatrix();</div>
188
<div class="line"> glMultMatrixd( kfi->frame()->matrix() );</div>
189
<div class="line"> <span class="comment">// Draw your object here. Its position and orientation are interpolated.</span></div>
190
<div class="line"> glPopMatrix();</div>
191
<div class="line"> }</div>
192
</div><!-- fragment --><p>The keyFrames are defined by a <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> and a time, expressed in seconds. The <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> can be provided as a const reference or as a pointer to a <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> (see the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a44ac54529e675a2157067c9d205d9622">addKeyFrame()</a> methods). In the latter case, the path will automatically be updated when the <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> is modified (using the <a class="el" href="classqglviewer_1_1Frame.html#ab6722375e68e03d151762ebfc83c5459">Frame::modified()</a> signal).</p>
194
193
<p>The time has to be monotonously increasing over keyFrames. When <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a7e468c84c27d896e341563c83e102aad">interpolationSpeed()</a> equals 1.0 (default value), these times correspond to actual user's seconds during interpolation (provided that your main loop is fast enough). The interpolation is then real-time: the keyFrames will be reached at their <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a976ec792d48ccd7e53b55bb91b49d473">keyFrameTime()</a>.</p>
195
194
<h3>Interpolation details</h3>
196
195
<p>When the user <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3c0098b2307d04e904c1f64f505e5819">startInterpolation()</a>, a timer is started which will update the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a>'s position and orientation every <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a21bf6165ea3a6be2fd854e9be5105b1e">interpolationPeriod()</a> milliseconds. This update increases the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime()</a> by <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a21bf6165ea3a6be2fd854e9be5105b1e">interpolationPeriod()</a> * <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a7e468c84c27d896e341563c83e102aad">interpolationSpeed()</a> milliseconds.</p>
197
196
<p>Note that this mechanism ensures that the number of interpolation steps is constant and equal to the total path <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a80c858ec25677a47d066e0900f4e1980">duration()</a> divided by the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a21bf6165ea3a6be2fd854e9be5105b1e">interpolationPeriod()</a> * <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a7e468c84c27d896e341563c83e102aad">interpolationSpeed()</a>. This is especially useful for benchmarking or movie creation (constant number of snapshots).</p>
198
197
<p>During the interpolation, the KeyFrameInterpolator emits an <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated()</a> signal, which will usually be connected to the <a class="el" href="classQGLViewer.html#ae12b7378efbffabc24a133ca1deb19ae">QGLViewer::updateGL()</a> slot. The interpolation is stopped when <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime()</a> is greater than the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3e953e6c813baa461389c132c9509e30">lastTime()</a> (unless <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a906c17cf6c1d51a54c7d3b9b4c9cbd45">loopInterpolation()</a> is <code>true</code>) and the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab4010a17bf77b9940b120ee8ed9a0271">endReached()</a> signal is then emitted.</p>
199
198
<p>Note that a <a class="el" href="classqglviewer_1_1Camera.html" title="A perspective or orthographic camera.">Camera</a> has <a class="el" href="classqglviewer_1_1Camera.html#abfbef567a6bbb9163b31c6f46238e4de">Camera::keyFrameInterpolator()</a>, that can be used to drive the <a class="el" href="classqglviewer_1_1Camera.html" title="A perspective or orthographic camera.">Camera</a> along a path, or to restore a saved position (a path made of a single keyFrame). Press Alt+Fx to define a new keyFrame for path x. Pressing Fx plays/pauses path interpolation. See <a class="el" href="classQGLViewer.html#adfe21e109b45f8c79f2c360bf35fb835">QGLViewer::pathKey()</a> and the <a href="../keyboard.html">keyboard page</a> for details.</p>
200
<dl class="attention"><dt><b>Attention:</b></dt><dd>If a <a class="el" href="classqglviewer_1_1Constraint.html" title="An interface class for Frame constraints.">Constraint</a> is attached to the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> (see <a class="el" href="classqglviewer_1_1Frame.html#a0974dfe336ed84a20adb8c6cdf8dedd9">Frame::constraint()</a>), it should be deactivated before <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a8cc0fa56ba7b6da71226cc191cc18e70">interpolationIsStarted()</a>, otherwise the interpolated motion (computed as if there was no constraint) will probably be erroneous.</dd></dl>
199
<dl class="section attention"><dt>Attention:</dt><dd>If a <a class="el" href="classqglviewer_1_1Constraint.html" title="An interface class for Frame constraints.">Constraint</a> is attached to the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> (see <a class="el" href="classqglviewer_1_1Frame.html#a0974dfe336ed84a20adb8c6cdf8dedd9">Frame::constraint()</a>), it should be deactivated before <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a8cc0fa56ba7b6da71226cc191cc18e70">interpolationIsStarted()</a>, otherwise the interpolated motion (computed as if there was no constraint) will probably be erroneous.</dd></dl>
201
200
<h3>Retrieving interpolated values</h3>
202
201
<p>This code defines a KeyFrameInterpolator, and displays the positions that will be followed by the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> along the path: </p>
203
<div class="fragment"><pre class="fragment"> <a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#a2a78bc183af3ac92802cbe605e2a878e">KeyFrameInterpolator</a> kfi( <span class="keyword">new</span> Frame() );
204
<span class="comment">// calls to kfi.addKeyFrame() to define the path.</span>
206
<span class="keyword">const</span> <span class="keywordtype">float</span> deltaTime = 0.04; <span class="comment">// output a position every deltaTime seconds</span>
207
<span class="keywordflow">for</span> (<span class="keywordtype">float</span> time=kfi.firstTime(); time<=kfi.lastTime(); time += deltaTime)
209
kfi.interpolateAtTime(time);
210
cout << <span class="stringliteral">"t="</span> << time << <span class="stringliteral">"\tpos="</span> << kfi.frame()->position() << endl;
212
</pre></div><p> You may want to temporally disconnect the <code>kfi</code> <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated()</a> signal from the <a class="el" href="classQGLViewer.html#ae12b7378efbffabc24a133ca1deb19ae">QGLViewer::updateGL()</a> slot before calling this code. </p>
202
<div class="fragment"><div class="line"> <a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#a2a78bc183af3ac92802cbe605e2a878e">KeyFrameInterpolator</a> kfi( <span class="keyword">new</span> Frame() );</div>
203
<div class="line"> <span class="comment">// calls to kfi.addKeyFrame() to define the path.</span></div>
204
<div class="line"></div>
205
<div class="line"> <span class="keyword">const</span> <span class="keywordtype">float</span> deltaTime = 0.04; <span class="comment">// output a position every deltaTime seconds</span></div>
206
<div class="line"> <span class="keywordflow">for</span> (<span class="keywordtype">float</span> time=kfi.firstTime(); time<=kfi.lastTime(); time += deltaTime)</div>
207
<div class="line"> {</div>
208
<div class="line"> kfi.interpolateAtTime(time);</div>
209
<div class="line"> cout << <span class="stringliteral">"t="</span> << time << <span class="stringliteral">"\tpos="</span> << kfi.frame()->position() << endl;</div>
210
<div class="line"> }</div>
211
</div><!-- fragment --><p> You may want to temporally disconnect the <code>kfi</code> <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated()</a> signal from the <a class="el" href="classQGLViewer.html#ae12b7378efbffabc24a133ca1deb19ae">QGLViewer::updateGL()</a> slot before calling this code. </p>
213
212
</div><hr/><h2>Constructor & Destructor Documentation</h2>
214
<a class="anchor" id="a2a78bc183af3ac92802cbe605e2a878e"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::KeyFrameInterpolator" ref="a2a78bc183af3ac92802cbe605e2a878e" args="(Frame *fr=NULL)" -->
213
<a class="anchor" id="a2a78bc183af3ac92802cbe605e2a878e"></a>
215
214
<div class="memitem">
216
215
<div class="memproto">
217
216
<table class="memname">
426
<td></td><td><code> [virtual]</code></td>
480
<td class="mlabels-right">
481
<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
484
</div><div class="memdoc">
431
485
<p>Draws the path used to interpolate the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a>.</p>
432
486
<p><code>mask</code> controls what is drawn: if (mask & 1) (default), the position path is drawn. If (mask & 2), a camera representation is regularly drawn and if (mask & 4), an oriented axis is regularly drawn. Examples:</p>
433
<div class="fragment"><pre class="fragment"> <a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#aca0ce46b39ad4093450019d77fd247f2">drawPath</a>(); <span class="comment">// Simply draws the interpolation path</span>
434
<a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#aca0ce46b39ad4093450019d77fd247f2">drawPath</a>(3); <span class="comment">// Draws path and cameras</span>
435
<a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#aca0ce46b39ad4093450019d77fd247f2">drawPath</a>(5); <span class="comment">// Draws path and axis</span>
436
</pre></div><p>In the case where camera or axis is drawn, <code>nbFrames</code> controls the number of objects (axis or camera) drawn between two successive keyFrames. When <code>nbFrames=1</code>, only the path KeyFrames are drawn. <code>nbFrames=2</code> also draws the intermediate orientation, etc. The maximum value is 30. <code>nbFrames</code> should divide 30 so that an object is drawn for each KeyFrame. Default value is 6.</p>
487
<div class="fragment"><div class="line"> <a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#aca0ce46b39ad4093450019d77fd247f2">drawPath</a>(); <span class="comment">// Simply draws the interpolation path</span></div>
488
<div class="line"> <a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#aca0ce46b39ad4093450019d77fd247f2">drawPath</a>(3); <span class="comment">// Draws path and cameras</span></div>
489
<div class="line"> <a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#aca0ce46b39ad4093450019d77fd247f2">drawPath</a>(5); <span class="comment">// Draws path and axis</span></div>
490
</div><!-- fragment --><p>In the case where camera or axis is drawn, <code>nbFrames</code> controls the number of objects (axis or camera) drawn between two successive keyFrames. When <code>nbFrames=1</code>, only the path KeyFrames are drawn. <code>nbFrames=2</code> also draws the intermediate orientation, etc. The maximum value is 30. <code>nbFrames</code> should divide 30 so that an object is drawn for each KeyFrame. Default value is 6.</p>
437
491
<p><code>scale</code> (default=1.0) controls the scaling of the camera and axis drawing. A value of <a class="el" href="classQGLViewer.html#a58c17044cc4a601c6b446bf5e83513f9">QGLViewer::sceneRadius()</a> should give good results.</p>
438
492
<p>See the <a href="../examples/keyFrames.html">keyFrames example</a> for an illustration.</p>
439
493
<p>The color of the path is the current <code>glColor()</code>.</p>
440
<dl class="attention"><dt><b>Attention:</b></dt><dd>The OpenGL state is modified by this method: GL_LIGHTING is disabled and line width set to 2. Use this code to preserve your current OpenGL state: <div class="fragment"><pre class="fragment"> glPushAttrib(GL_ALL_ATTRIB_BITS);
441
drawPathModifyGLState(mask, nbFrames, scale);
443
</pre></div> </dd></dl>
494
<dl class="section attention"><dt>Attention:</dt><dd>The OpenGL state is modified by this method: GL_LIGHTING is disabled and line width set to 2. Use this code to preserve your current OpenGL state: <div class="fragment"><div class="line"> glPushAttrib(GL_ALL_ATTRIB_BITS);</div>
495
<div class="line"> drawPathModifyGLState(mask, nbFrames, scale);</div>
496
<div class="line"> glPopAttrib();</div>
497
</div><!-- fragment --> </dd></dl>
447
<a class="anchor" id="a80c858ec25677a47d066e0900f4e1980"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::duration" ref="a80c858ec25677a47d066e0900f4e1980" args="() const " -->
501
<a class="anchor" id="a80c858ec25677a47d066e0900f4e1980"></a>
448
502
<div class="memitem">
449
503
<div class="memproto">
450
504
<table class="memname">
452
<td class="memname">float <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a80c858ec25677a47d066e0900f4e1980">duration</a> </td>
506
<td class="memname">float duration </td>
454
508
<td class="paramname"></td><td>)</td>
512
</div><div class="memdoc">
460
513
<p>Returns the duration of the KeyFrameInterpolator path, expressed in seconds.</p>
461
514
<p>Simply corresponds to <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3e953e6c813baa461389c132c9509e30">lastTime()</a> - <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5335f8bedcb11c4e9cc06cbbab838477">firstTime()</a>. Returns 0.0 if the path has less than 2 keyFrames. See also <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a976ec792d48ccd7e53b55bb91b49d473">keyFrameTime()</a>. </p>
465
<a class="anchor" id="ab4010a17bf77b9940b120ee8ed9a0271"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::endReached" ref="ab4010a17bf77b9940b120ee8ed9a0271" args="()" -->
518
<a class="anchor" id="ab4010a17bf77b9940b120ee8ed9a0271"></a>
466
519
<div class="memitem">
467
520
<div class="memproto">
521
<table class="mlabels">
523
<td class="mlabels-left">
468
524
<table class="memname">
470
<td class="memname">void <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab4010a17bf77b9940b120ee8ed9a0271">endReached</a> </td>
526
<td class="memname">void endReached </td>
472
528
<td class="paramname"></td><td>)</td>
473
<td><code> [signal]</code></td>
533
<td class="mlabels-right">
534
<span class="mlabels"><span class="mlabel">signal</span></span> </td>
537
</div><div class="memdoc">
478
538
<p>This signal is emitted when the interpolation reaches the first (when <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a7e468c84c27d896e341563c83e102aad">interpolationSpeed()</a> is negative) or the last keyFrame.</p>
479
539
<p>When <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a906c17cf6c1d51a54c7d3b9b4c9cbd45">loopInterpolation()</a> is <code>true</code>, <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime()</a> is reset and the interpolation continues. It otherwise stops. </p>
483
<a class="anchor" id="a5335f8bedcb11c4e9cc06cbbab838477"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::firstTime" ref="a5335f8bedcb11c4e9cc06cbbab838477" args="() const " -->
543
<a class="anchor" id="a5335f8bedcb11c4e9cc06cbbab838477"></a>
484
544
<div class="memitem">
485
545
<div class="memproto">
486
546
<table class="memname">
488
<td class="memname">float <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5335f8bedcb11c4e9cc06cbbab838477">firstTime</a> </td>
548
<td class="memname">float firstTime </td>
490
550
<td class="paramname"></td><td>)</td>
554
</div><div class="memdoc">
496
555
<p>Returns the time corresponding to the first keyFrame, expressed in seconds.</p>
497
556
<p>Returns 0.0 if the path is empty. See also <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3e953e6c813baa461389c132c9509e30">lastTime()</a>, <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a80c858ec25677a47d066e0900f4e1980">duration()</a> and <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a976ec792d48ccd7e53b55bb91b49d473">keyFrameTime()</a>. </p>
501
<a class="anchor" id="a5426b68b2b1bb6ad8dc0007914412b4f"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::frame" ref="a5426b68b2b1bb6ad8dc0007914412b4f" args="() const " -->
560
<a class="anchor" id="a5426b68b2b1bb6ad8dc0007914412b4f"></a>
502
561
<div class="memitem">
503
562
<div class="memproto">
504
563
<table class="memname">
506
<td class="memname"><a class="el" href="classqglviewer_1_1Frame.html">Frame</a>* <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame</a> </td>
565
<td class="memname"><a class="el" href="classqglviewer_1_1Frame.html">Frame</a>* frame </td>
508
567
<td class="paramname"></td><td>)</td>
571
</div><div class="memdoc">
514
572
<p>Returns the associated <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> and that is interpolated by the KeyFrameInterpolator.</p>
515
573
<p>When <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a8cc0fa56ba7b6da71226cc191cc18e70">interpolationIsStarted()</a>, this <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a>'s position and orientation will regularly be updated by a timer, so that they follow the KeyFrameInterpolator path.</p>
516
574
<p>Set using <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a1e16bb31ee6240a9f0e3a6824f4bef0d">setFrame()</a> or with the KeyFrameInterpolator constructor. </p>
520
<a class="anchor" id="acd13d2ddeca530cb9f26ead47f7d25d3"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::initFromDOMElement" ref="acd13d2ddeca530cb9f26ead47f7d25d3" args="(const QDomElement &element)" -->
578
<a class="anchor" id="acd13d2ddeca530cb9f26ead47f7d25d3"></a>
521
579
<div class="memitem">
522
580
<div class="memproto">
581
<table class="mlabels">
583
<td class="mlabels-left">
523
584
<table class="memname">
525
<td class="memname">void <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#acd13d2ddeca530cb9f26ead47f7d25d3">initFromDOMElement</a> </td>
586
<td class="memname">void initFromDOMElement </td>
527
588
<td class="paramtype">const QDomElement & </td>
528
589
<td class="paramname"><em>element</em></td><td>)</td>
529
<td><code> [virtual]</code></td>
594
<td class="mlabels-right">
595
<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
598
</div><div class="memdoc">
534
599
<p>Restores the KeyFrameInterpolator state from a <code>QDomElement</code> created by <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a48e0e2dd26cd96418c8b889ceabe80f6">domElement()</a>.</p>
535
600
<p>Note that the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> pointer is not included in the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a48e0e2dd26cd96418c8b889ceabe80f6">domElement()</a>: you need to <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a1e16bb31ee6240a9f0e3a6824f4bef0d">setFrame()</a> after this method to attach a <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> to the KeyFrameInterpolator.</p>
536
601
<p>See <a class="el" href="classqglviewer_1_1Vec.html#acd13d2ddeca530cb9f26ead47f7d25d3">Vec::initFromDOMElement()</a> for a complete code example.</p>
541
<a class="anchor" id="ad5393783e1768b6d688a8c49ddea56ae"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::interpolateAtTime" ref="ad5393783e1768b6d688a8c49ddea56ae" args="(float time)" -->
606
<a class="anchor" id="ad5393783e1768b6d688a8c49ddea56ae"></a>
542
607
<div class="memitem">
543
608
<div class="memproto">
609
<table class="mlabels">
611
<td class="mlabels-left">
544
612
<table class="memname">
546
<td class="memname">void <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ad5393783e1768b6d688a8c49ddea56ae">interpolateAtTime</a> </td>
614
<td class="memname">void interpolateAtTime </td>
548
616
<td class="paramtype">float </td>
549
617
<td class="paramname"><em>time</em></td><td>)</td>
550
<td><code> [virtual, slot]</code></td>
622
<td class="mlabels-right">
623
<span class="mlabels"><span class="mlabel">virtual</span><span class="mlabel">slot</span></span> </td>
626
</div><div class="memdoc">
555
627
<p>Interpolate <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> at time <code>time</code> (expressed in seconds). <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime()</a> is set to <code>time</code> and <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> is set accordingly.</p>
556
628
<p>If you simply want to change <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime()</a> but not the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> state, use <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab860af88ea46ecedb2a648157bb68dc3">setInterpolationTime()</a> instead.</p>
557
629
<p>Emits the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated()</a> signal and makes the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> emit the <a class="el" href="classqglviewer_1_1Frame.html#ab55c2a4f1732b90057fae4b6037399de">Frame::interpolated()</a> signal. </p>
561
<a class="anchor" id="ab55c2a4f1732b90057fae4b6037399de"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::interpolated" ref="ab55c2a4f1732b90057fae4b6037399de" args="()" -->
633
<a class="anchor" id="ab55c2a4f1732b90057fae4b6037399de"></a>
562
634
<div class="memitem">
563
635
<div class="memproto">
636
<table class="mlabels">
638
<td class="mlabels-left">
564
639
<table class="memname">
566
<td class="memname">void <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated</a> </td>
641
<td class="memname">void interpolated </td>
568
643
<td class="paramname"></td><td>)</td>
569
<td><code> [signal]</code></td>
648
<td class="mlabels-right">
649
<span class="mlabels"><span class="mlabel">signal</span></span> </td>
652
</div><div class="memdoc">
574
653
<p>This signal is emitted whenever the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> state is interpolated.</p>
575
654
<p>The emission of this signal triggers the synchronous emission of the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> <a class="el" href="classqglviewer_1_1Frame.html#ab55c2a4f1732b90057fae4b6037399de">Frame::interpolated()</a> signal, which may also be useful.</p>
576
655
<p>This signal should especially be connected to your <a class="el" href="classQGLViewer.html#ae12b7378efbffabc24a133ca1deb19ae">QGLViewer::updateGL()</a> slot, so that the display is updated after every update of the KeyFrameInterpolator <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a>: </p>
577
<div class="fragment"><pre class="fragment"> connect(myKeyFrameInterpolator, SIGNAL(<a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated</a>()), SLOT(updateGL()));
578
</pre></div><p> Use the <a class="el" href="classQGLViewer.html#a32d7a506084c50fd97a24f94d9ca4864">QGLViewer::QGLViewerPool()</a> to connect the signal to all the viewers.</p>
656
<div class="fragment"><div class="line"> connect(myKeyFrameInterpolator, SIGNAL(<a class="code" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated</a>()), SLOT(updateGL()));</div>
657
</div><!-- fragment --><p> Use the <a class="el" href="classQGLViewer.html#a32d7a506084c50fd97a24f94d9ca4864">QGLViewer::QGLViewerPool()</a> to connect the signal to all the viewers.</p>
579
658
<p>Note that the <a class="el" href="classQGLViewer.html#a27a9e97573822d296b48e1c408b74042">QGLViewer::camera()</a> <a class="el" href="classqglviewer_1_1Camera.html#abfbef567a6bbb9163b31c6f46238e4de">Camera::keyFrameInterpolator()</a> created using <a class="el" href="classQGLViewer.html#adfe21e109b45f8c79f2c360bf35fb835">QGLViewer::pathKey()</a> have their <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab55c2a4f1732b90057fae4b6037399de">interpolated()</a> signals automatically connected to the <a class="el" href="classQGLViewer.html#ae12b7378efbffabc24a133ca1deb19ae">QGLViewer::updateGL()</a> slot. </p>
583
<a class="anchor" id="a8cc0fa56ba7b6da71226cc191cc18e70"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::interpolationIsStarted" ref="a8cc0fa56ba7b6da71226cc191cc18e70" args="() const " -->
662
<a class="anchor" id="a8cc0fa56ba7b6da71226cc191cc18e70"></a>
584
663
<div class="memitem">
585
664
<div class="memproto">
586
665
<table class="memname">
588
<td class="memname">bool <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a8cc0fa56ba7b6da71226cc191cc18e70">interpolationIsStarted</a> </td>
667
<td class="memname">bool interpolationIsStarted </td>
590
669
<td class="paramname"></td><td>)</td>
673
</div><div class="memdoc">
596
674
<p>Returns <code>true</code> when the interpolation is being performed. Use <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3c0098b2307d04e904c1f64f505e5819">startInterpolation()</a>, <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a16f0910299ae07cede3396a14ec01f4b">stopInterpolation()</a> or <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#acf744bd8ce09e5433f829f63ba310eef">toggleInterpolation()</a> to modify this state. </p>
600
<a class="anchor" id="a21bf6165ea3a6be2fd854e9be5105b1e"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::interpolationPeriod" ref="a21bf6165ea3a6be2fd854e9be5105b1e" args="() const " -->
678
<a class="anchor" id="a21bf6165ea3a6be2fd854e9be5105b1e"></a>
601
679
<div class="memitem">
602
680
<div class="memproto">
603
681
<table class="memname">
605
<td class="memname">int <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a21bf6165ea3a6be2fd854e9be5105b1e">interpolationPeriod</a> </td>
683
<td class="memname">int interpolationPeriod </td>
607
685
<td class="paramname"></td><td>)</td>
689
</div><div class="memdoc">
613
690
<p>Returns the current interpolation period, expressed in milliseconds.</p>
614
691
<p>The update of the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> state will be done by a timer at this period when <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a8cc0fa56ba7b6da71226cc191cc18e70">interpolationIsStarted()</a>.</p>
615
692
<p>This period (multiplied by <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a7e468c84c27d896e341563c83e102aad">interpolationSpeed()</a>) is added to the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime()</a> at each update, and the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> state is modified accordingly (see <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ad5393783e1768b6d688a8c49ddea56ae">interpolateAtTime()</a>). Default value is 40 milliseconds. </p>
619
<a class="anchor" id="a7e468c84c27d896e341563c83e102aad"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::interpolationSpeed" ref="a7e468c84c27d896e341563c83e102aad" args="() const " -->
696
<a class="anchor" id="a7e468c84c27d896e341563c83e102aad"></a>
620
697
<div class="memitem">
621
698
<div class="memproto">
622
699
<table class="memname">
624
<td class="memname">float <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a7e468c84c27d896e341563c83e102aad">interpolationSpeed</a> </td>
701
<td class="memname">float interpolationSpeed </td>
626
703
<td class="paramname"></td><td>)</td>
707
</div><div class="memdoc">
632
708
<p>Returns the current interpolation speed.</p>
633
709
<p>Default value is 1.0, which means <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a976ec792d48ccd7e53b55bb91b49d473">keyFrameTime()</a> will be matched during the interpolation (provided that your main loop is fast enough).</p>
634
710
<p>A negative value will result in a reverse interpolation of the keyFrames. See also <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a21bf6165ea3a6be2fd854e9be5105b1e">interpolationPeriod()</a>. </p>
638
<a class="anchor" id="a58326b7948e78c1d2861ca659492207a"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::interpolationTime" ref="a58326b7948e78c1d2861ca659492207a" args="() const " -->
714
<a class="anchor" id="a58326b7948e78c1d2861ca659492207a"></a>
639
715
<div class="memitem">
640
716
<div class="memproto">
641
717
<table class="memname">
643
<td class="memname">float <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime</a> </td>
719
<td class="memname">float interpolationTime </td>
645
721
<td class="paramname"></td><td>)</td>
725
</div><div class="memdoc">
651
726
<p>Returns the current interpolation time (in seconds) along the KeyFrameInterpolator path.</p>
652
727
<p>This time is regularly updated when <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a8cc0fa56ba7b6da71226cc191cc18e70">interpolationIsStarted()</a>. Can be set directly with <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab860af88ea46ecedb2a648157bb68dc3">setInterpolationTime()</a> or <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ad5393783e1768b6d688a8c49ddea56ae">interpolateAtTime()</a>. </p>
656
<a class="anchor" id="a2437eecf340817ad1a3f86c822b111e8"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::keyFrame" ref="a2437eecf340817ad1a3f86c822b111e8" args="(int index) const " -->
731
<a class="anchor" id="a2437eecf340817ad1a3f86c822b111e8"></a>
657
732
<div class="memitem">
658
733
<div class="memproto">
659
734
<table class="memname">
661
<td class="memname"><a class="el" href="classqglviewer_1_1Frame.html">Frame</a> <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a2437eecf340817ad1a3f86c822b111e8">keyFrame</a> </td>
736
<td class="memname"><a class="el" href="classqglviewer_1_1Frame.html">Frame</a> keyFrame </td>
663
738
<td class="paramtype">int </td>
664
739
<td class="paramname"><em>index</em></td><td>)</td>
743
</div><div class="memdoc">
670
744
<p>Returns the <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> associated with the keyFrame at index <code>index</code>.</p>
671
745
<p>See also <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a976ec792d48ccd7e53b55bb91b49d473">keyFrameTime()</a>. <code>index</code> has to be in the range 0..<a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#aba3744250d9cd01ec848f81151a62273">numberOfKeyFrames()</a>-1.</p>
672
<dl class="note"><dt><b>Note:</b></dt><dd>If this keyFrame was defined using a pointer to a <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> (see addKeyFrame(const Frame* const)), the <em>current</em> pointed <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> state is returned. </dd></dl>
746
<dl class="section note"><dt>Note:</dt><dd>If this keyFrame was defined using a pointer to a <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> (see addKeyFrame(const Frame* const)), the <em>current</em> pointed <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation.">Frame</a> state is returned. </dd></dl>
676
<a class="anchor" id="a976ec792d48ccd7e53b55bb91b49d473"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::keyFrameTime" ref="a976ec792d48ccd7e53b55bb91b49d473" args="(int index) const " -->
750
<a class="anchor" id="a976ec792d48ccd7e53b55bb91b49d473"></a>
677
751
<div class="memitem">
678
752
<div class="memproto">
679
753
<table class="memname">
681
<td class="memname">float <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a976ec792d48ccd7e53b55bb91b49d473">keyFrameTime</a> </td>
755
<td class="memname">float keyFrameTime </td>
683
757
<td class="paramtype">int </td>
684
758
<td class="paramname"><em>index</em></td><td>)</td>
762
</div><div class="memdoc">
690
763
<p>Returns the time corresponding to the <code>index</code> keyFrame.</p>
691
764
<p>See also <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a2437eecf340817ad1a3f86c822b111e8">keyFrame()</a>. <code>index</code> has to be in the range 0..<a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#aba3744250d9cd01ec848f81151a62273">numberOfKeyFrames()</a>-1. </p>
695
<a class="anchor" id="a3e953e6c813baa461389c132c9509e30"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::lastTime" ref="a3e953e6c813baa461389c132c9509e30" args="() const " -->
768
<a class="anchor" id="a3e953e6c813baa461389c132c9509e30"></a>
696
769
<div class="memitem">
697
770
<div class="memproto">
698
771
<table class="memname">
700
<td class="memname">float <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3e953e6c813baa461389c132c9509e30">lastTime</a> </td>
773
<td class="memname">float lastTime </td>
702
775
<td class="paramname"></td><td>)</td>
779
</div><div class="memdoc">
708
780
<p>Returns the time corresponding to the last keyFrame, expressed in seconds.</p>
709
781
<p>Returns 0.0 if the path is empty. See also <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5335f8bedcb11c4e9cc06cbbab838477">firstTime()</a>, <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a80c858ec25677a47d066e0900f4e1980">duration()</a> and <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a976ec792d48ccd7e53b55bb91b49d473">keyFrameTime()</a>. </p>
713
<a class="anchor" id="a906c17cf6c1d51a54c7d3b9b4c9cbd45"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::loopInterpolation" ref="a906c17cf6c1d51a54c7d3b9b4c9cbd45" args="() const " -->
785
<a class="anchor" id="a906c17cf6c1d51a54c7d3b9b4c9cbd45"></a>
714
786
<div class="memitem">
715
787
<div class="memproto">
716
788
<table class="memname">
718
<td class="memname">bool <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a906c17cf6c1d51a54c7d3b9b4c9cbd45">loopInterpolation</a> </td>
790
<td class="memname">bool loopInterpolation </td>
720
792
<td class="paramname"></td><td>)</td>
796
</div><div class="memdoc">
726
797
<p>Returns <code>true</code> when the interpolation is played in an infinite loop.</p>
727
798
<p>When <code>false</code> (default), the interpolation stops when <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime()</a> reaches <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5335f8bedcb11c4e9cc06cbbab838477">firstTime()</a> (with negative <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a7e468c84c27d896e341563c83e102aad">interpolationSpeed()</a>) or <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3e953e6c813baa461389c132c9509e30">lastTime()</a>.</p>
728
799
<p><a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime()</a> is otherwise reset to <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5335f8bedcb11c4e9cc06cbbab838477">firstTime()</a> (+ <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime()</a> - <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3e953e6c813baa461389c132c9509e30">lastTime()</a>) (and inversely for negative <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a7e468c84c27d896e341563c83e102aad">interpolationSpeed()</a>) and interpolation continues.</p>
733
<a class="anchor" id="aba3744250d9cd01ec848f81151a62273"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::numberOfKeyFrames" ref="aba3744250d9cd01ec848f81151a62273" args="() const " -->
804
<a class="anchor" id="aba3744250d9cd01ec848f81151a62273"></a>
734
805
<div class="memitem">
735
806
<div class="memproto">
736
807
<table class="memname">
738
<td class="memname">int <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#aba3744250d9cd01ec848f81151a62273">numberOfKeyFrames</a> </td>
809
<td class="memname">int numberOfKeyFrames </td>
740
811
<td class="paramname"></td><td>)</td>
815
</div><div class="memdoc">
746
816
<p>Returns the number of keyFrames used by the interpolation. Use <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a44ac54529e675a2157067c9d205d9622">addKeyFrame()</a> to add new keyFrames. </p>
750
<a class="anchor" id="a0bfc602dc2fcaca40cc49195bba7ba74"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::resetInterpolation" ref="a0bfc602dc2fcaca40cc49195bba7ba74" args="()" -->
820
<a class="anchor" id="a0bfc602dc2fcaca40cc49195bba7ba74"></a>
751
821
<div class="memitem">
752
822
<div class="memproto">
823
<table class="mlabels">
825
<td class="mlabels-left">
753
826
<table class="memname">
755
<td class="memname">void <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a0bfc602dc2fcaca40cc49195bba7ba74">resetInterpolation</a> </td>
828
<td class="memname">void resetInterpolation </td>
757
830
<td class="paramname"></td><td>)</td>
758
<td><code> [slot]</code></td>
835
<td class="mlabels-right">
836
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
839
</div><div class="memdoc">
763
840
<p>Stops the interpolation and resets <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime()</a> to the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5335f8bedcb11c4e9cc06cbbab838477">firstTime()</a>.</p>
764
841
<p>If desired, call <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ad5393783e1768b6d688a8c49ddea56ae">interpolateAtTime()</a> after this method to actually move the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> to <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5335f8bedcb11c4e9cc06cbbab838477">firstTime()</a>. </p>
768
<a class="anchor" id="a1e16bb31ee6240a9f0e3a6824f4bef0d"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::setFrame" ref="a1e16bb31ee6240a9f0e3a6824f4bef0d" args="(Frame *const frame)" -->
845
<a class="anchor" id="a1e16bb31ee6240a9f0e3a6824f4bef0d"></a>
769
846
<div class="memitem">
770
847
<div class="memproto">
848
<table class="mlabels">
850
<td class="mlabels-left">
771
851
<table class="memname">
773
<td class="memname">void <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a1e16bb31ee6240a9f0e3a6824f4bef0d">setFrame</a> </td>
853
<td class="memname">void setFrame </td>
775
855
<td class="paramtype"><a class="el" href="classqglviewer_1_1Frame.html">Frame</a> *const </td>
776
856
<td class="paramname"><em>frame</em></td><td>)</td>
777
<td><code> [slot]</code></td>
861
<td class="mlabels-right">
862
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
865
</div><div class="memdoc">
782
866
<p>Sets the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> associated to the KeyFrameInterpolator. </p>
786
<a class="anchor" id="a9763e647346a8bee885517d9985173fd"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::setInterpolationPeriod" ref="a9763e647346a8bee885517d9985173fd" args="(int period)" -->
870
<a class="anchor" id="a9763e647346a8bee885517d9985173fd"></a>
787
871
<div class="memitem">
788
872
<div class="memproto">
873
<table class="mlabels">
875
<td class="mlabels-left">
789
876
<table class="memname">
791
<td class="memname">void <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a9763e647346a8bee885517d9985173fd">setInterpolationPeriod</a> </td>
878
<td class="memname">void setInterpolationPeriod </td>
793
880
<td class="paramtype">int </td>
794
881
<td class="paramname"><em>period</em></td><td>)</td>
795
<td><code> [slot]</code></td>
886
<td class="mlabels-right">
887
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
890
</div><div class="memdoc">
800
891
<p>Sets the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a21bf6165ea3a6be2fd854e9be5105b1e">interpolationPeriod()</a>. </p>
804
<a class="anchor" id="a3cc64e95e1b8dfda110bcf3d033ecf2d"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::setInterpolationSpeed" ref="a3cc64e95e1b8dfda110bcf3d033ecf2d" args="(float speed)" -->
895
<a class="anchor" id="a3cc64e95e1b8dfda110bcf3d033ecf2d"></a>
805
896
<div class="memitem">
806
897
<div class="memproto">
898
<table class="mlabels">
900
<td class="mlabels-left">
807
901
<table class="memname">
809
<td class="memname">void <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3cc64e95e1b8dfda110bcf3d033ecf2d">setInterpolationSpeed</a> </td>
903
<td class="memname">void setInterpolationSpeed </td>
811
905
<td class="paramtype">float </td>
812
906
<td class="paramname"><em>speed</em></td><td>)</td>
813
<td><code> [slot]</code></td>
911
<td class="mlabels-right">
912
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
915
</div><div class="memdoc">
818
916
<p>Sets the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a7e468c84c27d896e341563c83e102aad">interpolationSpeed()</a>. Negative or null values are allowed. </p>
822
<a class="anchor" id="ab860af88ea46ecedb2a648157bb68dc3"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::setInterpolationTime" ref="ab860af88ea46ecedb2a648157bb68dc3" args="(float time)" -->
920
<a class="anchor" id="ab860af88ea46ecedb2a648157bb68dc3"></a>
823
921
<div class="memitem">
824
922
<div class="memproto">
923
<table class="mlabels">
925
<td class="mlabels-left">
825
926
<table class="memname">
827
<td class="memname">void <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ab860af88ea46ecedb2a648157bb68dc3">setInterpolationTime</a> </td>
928
<td class="memname">void setInterpolationTime </td>
829
930
<td class="paramtype">float </td>
830
931
<td class="paramname"><em>time</em></td><td>)</td>
831
<td><code> [slot]</code></td>
936
<td class="mlabels-right">
937
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
940
</div><div class="memdoc">
836
941
<p>Sets the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a58326b7948e78c1d2861ca659492207a">interpolationTime()</a>.</p>
837
<dl class="attention"><dt><b>Attention:</b></dt><dd>The <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> state is not affected by this method. Use this function to define the starting time of a future interpolation (see <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3c0098b2307d04e904c1f64f505e5819">startInterpolation()</a>). Use <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ad5393783e1768b6d688a8c49ddea56ae">interpolateAtTime()</a> to actually interpolate at a given time. </dd></dl>
942
<dl class="section attention"><dt>Attention:</dt><dd>The <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a> state is not affected by this method. Use this function to define the starting time of a future interpolation (see <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3c0098b2307d04e904c1f64f505e5819">startInterpolation()</a>). Use <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#ad5393783e1768b6d688a8c49ddea56ae">interpolateAtTime()</a> to actually interpolate at a given time. </dd></dl>
841
<a class="anchor" id="a31a491ac2ac016298cbd1c66f07be6dd"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::setLoopInterpolation" ref="a31a491ac2ac016298cbd1c66f07be6dd" args="(bool loop=true)" -->
946
<a class="anchor" id="a31a491ac2ac016298cbd1c66f07be6dd"></a>
842
947
<div class="memitem">
843
948
<div class="memproto">
949
<table class="mlabels">
951
<td class="mlabels-left">
844
952
<table class="memname">
846
<td class="memname">void <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a31a491ac2ac016298cbd1c66f07be6dd">setLoopInterpolation</a> </td>
954
<td class="memname">void setLoopInterpolation </td>
848
956
<td class="paramtype">bool </td>
849
957
<td class="paramname"><em>loop</em> = <code>true</code></td><td>)</td>
850
<td><code> [slot]</code></td>
962
<td class="mlabels-right">
963
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
966
</div><div class="memdoc">
855
967
<p>Sets the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a906c17cf6c1d51a54c7d3b9b4c9cbd45">loopInterpolation()</a> value. </p>
859
<a class="anchor" id="a3c0098b2307d04e904c1f64f505e5819"></a><!-- doxytag: member="qglviewer::KeyFrameInterpolator::startInterpolation" ref="a3c0098b2307d04e904c1f64f505e5819" args="(int period=-1)" -->
971
<a class="anchor" id="a3c0098b2307d04e904c1f64f505e5819"></a>
860
972
<div class="memitem">
861
973
<div class="memproto">
974
<table class="mlabels">
976
<td class="mlabels-left">
862
977
<table class="memname">
864
<td class="memname">void <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a3c0098b2307d04e904c1f64f505e5819">startInterpolation</a> </td>
979
<td class="memname">void startInterpolation </td>
866
981
<td class="paramtype">int </td>
867
982
<td class="paramname"><em>period</em> = <code>-1</code></td><td>)</td>
868
<td><code> [slot]</code></td>
987
<td class="mlabels-right">
988
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
991
</div><div class="memdoc">
873
992
<p>Starts the interpolation process.</p>
874
993
<p>A timer is started with an <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a21bf6165ea3a6be2fd854e9be5105b1e">interpolationPeriod()</a> period that updates the <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a5426b68b2b1bb6ad8dc0007914412b4f">frame()</a>'s position and orientation. <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a8cc0fa56ba7b6da71226cc191cc18e70">interpolationIsStarted()</a> will return <code>true</code> until <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a16f0910299ae07cede3396a14ec01f4b">stopInterpolation()</a> or <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#acf744bd8ce09e5433f829f63ba310eef">toggleInterpolation()</a> is called.</p>
875
994
<p>If <code>period</code> is positive, it is set as the new <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a21bf6165ea3a6be2fd854e9be5105b1e">interpolationPeriod()</a>. The previous <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#a21bf6165ea3a6be2fd854e9be5105b1e">interpolationPeriod()</a> is used otherwise (default).</p>