Hello everyone <br><br>I am attempting to link a vtkcommand to use as a way of writing a movie every time an interaction event is called from a vtkremderwindowinteractor<br><br>However I am not sure I am connecting the elements correctly. Also from the examples I have seen, the movie writers need and &quot;end()&quot; call to close its file. If I am to use a vtk command is this possible? <br>
<br>Any suggestion is welcomed. <br><br>Thank you <br><br>Sergio <br>ps. below my code. <br><br>/*=========================================================================<br>=========================================================================*/<br>
//<br>//<br><br>// First include the required header files for the VTK classes we are using.<br>#include &quot;vtkConeSource.h&quot;<br>#include &quot;vtkPolyDataMapper.h&quot;<br>#include &quot;vtkRenderWindow.h&quot;<br>
#include &quot;vtkRenderWindowInteractor.h&quot;<br>#include &quot;vtkCamera.h&quot;<br>#include &quot;vtkActor.h&quot;<br>#include &quot;vtkRenderer.h&quot;<br>#include &quot;vtkCommand.h&quot;<br>#include &quot;vtkBoxWidget.h&quot;<br>
#include &quot;vtkTransform.h&quot;<br>#include &quot;vtkInteractorStyleTrackballCamera.h&quot;<br>#include &quot;vtkFFMPEGWriter.h&quot;<br>#include &quot;vtkWindowToImageFilter.h&quot;<br><br><br>//<br>// Similar to Cone2.cxx, we define a callback for interaction.<br>
// <br>class vtkMyCallback : public vtkCommand<br>{<br>public:<br>  static vtkMyCallback *New() <br>    { return new vtkMyCallback; }<br>  virtual void Execute(vtkObject *caller, unsigned long, void*)<br>    {<br>      vtkFFMPEGWriter *movie = reinterpret_cast&lt;vtkFFMPEGWriter*&gt;(caller);<br>
      movie-&gt;Write();<br>      movie-&gt;End();<br>    }<br>};<br><br>int main()<br>{<br>  // <br>  //<br>  vtkConeSource *cone = vtkConeSource::New();<br>  cone-&gt;SetHeight( 3.0 );<br>  cone-&gt;SetRadius( 1.0 );<br>
  cone-&gt;SetResolution( 10 );<br>  <br>  // <br>  //<br>  vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();<br>  coneMapper-&gt;SetInputConnection( cone-&gt;GetOutputPort() );<br><br>  // <br>  //<br>  vtkActor *coneActor = vtkActor::New();<br>
  coneActor-&gt;SetMapper( coneMapper );<br><br>  //<br>  //<br>  vtkRenderer *ren1= vtkRenderer::New();<br>  ren1-&gt;AddActor( coneActor );<br>  ren1-&gt;SetBackground( 0.1, 0.2, 0.4 );<br><br>  //<br>  //<br>  vtkRenderWindow *renWin = vtkRenderWindow::New();<br>
  renWin-&gt;AddRenderer( ren1 );<br>  renWin-&gt;SetSize( 320, 240 );<br><br>  // <br>  // The vtkRenderWindowInteractor class watches for events (e.g., keypress,<br>  // mouse) in the vtkRenderWindow. These events are translated into<br>
  // event invocations that VTK understands (see VTK/Common/vtkCommand.h<br>  // for all events that VTK processes). Then observers of these VTK<br>  // events can process them as appropriate.<br>  vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();<br>
  iren-&gt;SetRenderWindow(renWin);<br><br>  //<br>  // By default the vtkRenderWindowInteractor instantiates an instance<br>  // of vtkInteractorStyle. vtkInteractorStyle translates a set of events<br>  // it observes into operations on the camera, actors, and/or properties<br>
  // in the vtkRenderWindow associated with the vtkRenderWinodwInteractor. <br>  // Here we specify a particular interactor style.<br>  vtkInteractorStyleTrackballCamera *style = <br>    vtkInteractorStyleTrackballCamera::New();<br>
  iren-&gt;SetInteractorStyle(style);<br><br>  //<br>  // Here we use a vtkBoxWidget to transform the underlying coneActor (by<br>  // manipulating its transformation matrix). Many other types of widgets<br>  // are available for use, see the documentation for more details.<br>
  //<br>  // The SetInteractor method is how 3D widgets are associated with the render<br>  // window interactor. Internally, SetInteractor sets up a bunch of callbacks<br>  // using the Command/Observer mechanism (AddObserver()). The place factor <br>
  // controls the initial size of the widget with respect to the bounding box<br>  // of the input to the widget.<br>  vtkBoxWidget *boxWidget = vtkBoxWidget::New();<br>  boxWidget-&gt;SetInteractor(iren);<br>  boxWidget-&gt;SetPlaceFactor(5.25);<br>
<br>  vtkWindowToImageFilter  *w2if = vtkWindowToImageFilter::New();<br>   w2if-&gt;SetInput(renWin);<br><br>  vtkFFMPEGWriter *moviewriter1 = vtkFFMPEGWriter::New();<br>  moviewriter1-&gt;SetFileName(&quot;test1.avi&quot;);<br>
  moviewriter1-&gt;SetInputConnection(w2if-&gt;GetOutputPort());<br>  moviewriter1-&gt;Start();<br>  //<br>  //<br>  boxWidget-&gt;SetProp3D(coneActor);<br>  boxWidget-&gt;PlaceWidget();<br><br>  vtkMyCallback *callback = vtkMyCallback::New();<br>
  moviewriter1-&gt;AddObserver(vtkCommand::InteractionEvent, callback);<br><br>  //<br>  // Normally the user presses the &quot;i&quot; key to bring a 3D widget to life. Here<br>  // we will manually enable it so it appears with the cone. <br>
  //<br>  boxWidget-&gt;On();<br><br>  iren-&gt;Initialize();<br>  iren-&gt;Start();<br>  moviewriter1-&gt;End();<br>  //<br><br>  cone-&gt;Delete();<br>  coneMapper-&gt;Delete();<br>  coneActor-&gt;Delete();<br>  callback-&gt;Delete();<br>
  boxWidget-&gt;Delete();<br>  ren1-&gt;Delete();<br>  renWin-&gt;Delete();<br>  iren-&gt;Delete();<br>  style-&gt;Delete();<br><br>  return 0;<br>}<br><br><br><br>