28 #include <QFileDialog> 
   32 #include <vtkWindowToImageFilter.h> 
   33 #include <vtkPNGWriter.h> 
   41    m_renderWindowInteractor(renderWindowInteractor), m_pathCamera(pathCamera), m_treeWidget(treeWidget)
 
   56     dialog->activateWindow();
 
   66     QObject::connect(
m_dialog->addFrame_button, SIGNAL(pressed()), 
this, SLOT(
addFrame()));
 
   67     QObject::connect(
m_dialog->removeFrame_button, SIGNAL(pressed()), 
this, SLOT(
removeFrame()));
 
   68     QObject::connect(
m_dialog->clearFrames_button, SIGNAL(pressed()), 
this, SLOT(
clearFrames()));
 
   69     QObject::connect(
m_dialog->interpolation_box, SIGNAL(currentIndexChanged(
const QString&)), 
this, SLOT(
changeInterpolation(
const QString&)));
 
   70     QObject::connect(
m_dialog->savePath_button, SIGNAL(pressed()), 
this, SLOT(
savePath()));
 
   71     QObject::connect(
m_dialog->loadPath_button, SIGNAL(pressed()), 
this, SLOT(
loadPath()));
 
   72     QObject::connect(
m_dialog->saveVideo_button, SIGNAL(pressed()), 
this, SLOT(
saveVideo()));
 
   73     QObject::connect(
m_dialog->play_button, SIGNAL(pressed()), 
this, SLOT(
play()));
 
   75     QObject::connect(
m_dialog->timeline_list, SIGNAL(itemClicked(QListWidgetItem*)), 
this, SLOT(
goToCamPosition(QListWidgetItem*)));
 
   84         vtkRendererCollection* renderers = window->GetRenderers();
 
   85         renderers->InitTraversal();
 
   86         vtkRenderer* r = renderers->GetNextItem();
 
   89             vtkCamera* ac = r->GetActiveCamera();
 
   90             vtkCamera* frame = cam_item->
getFrame();
 
   92             ac->SetPosition(frame->GetPosition());
 
   93             ac->SetFocalPoint(frame->GetFocalPoint());
 
   94             ac->SetViewUp(frame->GetViewUp());
 
   97             r = renderers->GetNextItem();
 
  105     QString frameCount = QString(
"Frame no. %1").arg(++
m_frameCounter);
 
  112     QListWidgetItem* currentItem = 
m_timeline->currentItem();
 
  113     if(currentItem) 
delete currentItem;
 
  126         m_pathCamera->GetInterpolator()->SetInterpolationTypeToLinear();
 
  128    else if(text == 
"Spline")
 
  130        m_pathCamera->GetInterpolator()->SetInterpolationTypeToSpline();
 
  137     unsigned int frameCount = 
m_timeline->count();
 
  141     for(
int i = 0; i < frameCount; i++)
 
  148     unsigned int frameMultiplier = 
m_dialog->frameMultiplier_box->value();
 
  149     m_pathCamera->SetNumberOfFrames(frameCount * frameMultiplier);
 
  161     if (!pfile.open(QFile::WriteOnly | QIODevice::Text))
 
  166     QTextStream out(&pfile);
 
  168     QString interpolation = 
m_dialog->interpolation_box->currentText();
 
  169     QString transitionFrames = QString::number(
m_dialog->frameMultiplier_box->value());
 
  170     out << 
"S:" << interpolation << 
";" << transitionFrames << endl;
 
  173     for(
int row = 0; row < 
m_timeline->count(); row++)
 
  185     dialog.setAcceptMode(QFileDialog::AcceptOpen);
 
  186     dialog.setOption(QFileDialog::Option::DontUseNativeDialog, 
true);
 
  187     dialog.setNameFilter(
"*.vcp");
 
  194     QStringList files = dialog.selectedFiles();
 
  197     if (!pfile.open(QFile::ReadOnly | QIODevice::Text))
 
  199         cout << 
"Error opening file " << 
filename.toStdString() << endl;
 
  203     QTextStream in(&pfile);
 
  204     QString line = in.readLine();
 
  210     if(!line.startsWith(
"S:"))
 
  212         cout << 
"Can't parse path settings from file!" << endl;
 
  213         cout << 
"Reverting to defaults..." << endl;
 
  214         m_dialog->frameMultiplier_box->setValue(30);
 
  215         m_dialog->interpolation_box->setCurrentIndex(1);
 
  216         m_pathCamera->GetInterpolator()->SetInterpolationTypeToSpline();
 
  220     QStringList parameters = line.trimmed().split(
";");
 
  222     cout << parameters[0].toStdString() << endl;
 
  223     cout << parameters[1].toStdString() << endl;
 
  225     if(parameters[0] == 
"Linear")
 
  227         m_pathCamera->GetInterpolator()->SetInterpolationTypeToLinear();
 
  228         m_dialog->interpolation_box->setCurrentIndex(0);
 
  230     else if(parameters[0] == 
"Spline")
 
  232         m_pathCamera->GetInterpolator()->SetInterpolationTypeToSpline();
 
  233         m_dialog->interpolation_box->setCurrentIndex(1);
 
  236     int transitionFrames = parameters[1].toInt();
 
  237     m_dialog->frameMultiplier_box->setValue(transitionFrames);
 
  260         vtkCameraInterpolator* i =  
m_pathCamera->GetInterpolator();
 
  262         unsigned int frameCount = 
m_timeline->count();
 
  265         for(
int i = 0; i < frameCount; i++)
 
  272         unsigned int frameMultiplier = 
m_dialog->frameMultiplier_box->value();
 
  273         m_pathCamera->SetNumberOfFrames(frameCount * frameMultiplier);
 
  278         double minT = i->GetMinimumT();
 
  279         double maxT = i->GetMaximumT();
 
  280     int n = frameMultiplier * frameCount;
 
  281         double step = (maxT - minT) / (
double)n;
 
  282         vtkSmartPointer<vtkCamera> i_cam = vtkSmartPointer<vtkCamera>::New();
 
  288         vtkRenderer* renderer;
 
  292         for(
double camT = 0; camT < maxT; camT += 
step)
 
  294                 i->InterpolateCamera(camT, i_cam);
 
  296                 collection->InitTraversal();
 
  297                 renderer = collection->GetNextItem();
 
  300                         renderer->GetActiveCamera()->DeepCopy(i_cam);
 
  302                         renderer = collection->GetNextItem();
 
  305                 vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter =
 
  306                             vtkSmartPointer<vtkWindowToImageFilter>::New();
 
  309                 windowToImageFilter->Update();
 
  311                   vtkSmartPointer<vtkPNGWriter> writer =
 
  312                     vtkSmartPointer<vtkPNGWriter>::New();
 
  314                   sprintf(buffer, 
"frame%04d.png", c);
 
  316                   writer->SetFileName(buffer);
 
  317                   writer->SetInputConnection(windowToImageFilter->GetOutputPort());
 
  320         cout << c << 
" / " << frameCount * frameMultiplier << endl;