diff --git a/Modules/Loadable/CameraPath/CMakeLists.txt b/Modules/Loadable/CameraPath/CMakeLists.txt index 9522166..0df6153 100644 --- a/Modules/Loadable/CameraPath/CMakeLists.txt +++ b/Modules/Loadable/CameraPath/CMakeLists.txt @@ -8,7 +8,6 @@ string(TOUPPER ${MODULE_NAME} MODULE_NAME_UPPER) #----------------------------------------------------------------------------- add_subdirectory(MRML) add_subdirectory(Logic) -add_subdirectory(Widgets) #----------------------------------------------------------------------------- set(MODULE_EXPORT_DIRECTIVE "Q_SLICER_QTMODULES_${MODULE_NAME_UPPER}_EXPORT") @@ -45,7 +44,6 @@ set(MODULE_UI_SRCS set(MODULE_TARGET_LIBRARIES vtkSlicerModelsModuleLogic vtkSlicer${MODULE_NAME}ModuleLogic - qSlicer${MODULE_NAME}ModuleWidgets ) set(MODULE_RESOURCES @@ -53,7 +51,7 @@ set(MODULE_RESOURCES ) #----------------------------------------------------------------------------- -slicerMacroBuildQtModule( +slicerMacroBuildLoadableModule( NAME ${MODULE_NAME} TITLE ${MODULE_TITLE} EXPORT_DIRECTIVE ${MODULE_EXPORT_DIRECTIVE} diff --git a/Modules/Loadable/CameraPath/Logic/vtkSlicerCameraPathLogic.cxx b/Modules/Loadable/CameraPath/Logic/vtkSlicerCameraPathLogic.cxx index 3effd40..7bc538e 100644 --- a/Modules/Loadable/CameraPath/Logic/vtkSlicerCameraPathLogic.cxx +++ b/Modules/Loadable/CameraPath/Logic/vtkSlicerCameraPathLogic.cxx @@ -82,7 +82,7 @@ void vtkSlicerCameraPathLogic::UpdateFromMRMLScene() //--------------------------------------------------------------------------- void vtkSlicerCameraPathLogic::OnMRMLSceneNodeAdded(vtkMRMLNode* node) { - if (node==NULL) + if (node == nullptr) { vtkErrorMacro("An invalid node is attempted to be added"); return; @@ -104,7 +104,7 @@ void vtkSlicerCameraPathLogic::OnMRMLSceneNodeAdded(vtkMRMLNode* node) //--------------------------------------------------------------------------- void vtkSlicerCameraPathLogic::OnMRMLSceneNodeRemoved(vtkMRMLNode* node) { - if (node==NULL) + if (node == nullptr) { vtkErrorMacro("An invalid node is attempted to be removed"); return; @@ -124,23 +124,23 @@ void vtkSlicerCameraPathLogic::OnMRMLSceneNodeRemoved(vtkMRMLNode* node) //--------------------------------------------------------------------------- char* vtkSlicerCameraPathLogic::LoadCameraPath(const char *fileName, const char *nodeName) { - char *nodeIDs = NULL; + char *nodeIDs = nullptr; std::string idList; if (!fileName) { vtkErrorMacro("LoadCameraPath: null file name, cannot load"); - return NULL; + return nullptr; } if (fileName[0] == '\0') { vtkErrorMacro("LoadCameraPath: empty file name, cannot load"); - return NULL; + return nullptr; } if (!this->GetMRMLScene()) { vtkErrorMacro("LoadCameraPath: no MRML scene, cannot load"); - return NULL; + return nullptr; } // turn on batch processing @@ -180,7 +180,7 @@ char* vtkSlicerCameraPathLogic::LoadCameraPath(const char *fileName, const char vtkErrorMacro("LoadCameraPath: coud not read data"); this->GetMRMLScene()->RemoveNode(cameraPathNode.GetPointer()); this->GetMRMLScene()->RemoveNode(storageNode.GetPointer()); - return NULL; + return nullptr; } // adding camera nodes to scene diff --git a/Modules/Loadable/CameraPath/MRML/vtkMRMLCameraPathNode.cxx b/Modules/Loadable/CameraPath/MRML/vtkMRMLCameraPathNode.cxx index 62a6a3c..8fbcf6b 100644 --- a/Modules/Loadable/CameraPath/MRML/vtkMRMLCameraPathNode.cxx +++ b/Modules/Loadable/CameraPath/MRML/vtkMRMLCameraPathNode.cxx @@ -249,7 +249,7 @@ void vtkMRMLCameraPathNode::SetKeyFrame(vtkIdType index, KeyFrame keyFrame) vtkIdType otherIndex = this->KeyFrameIndexAt(keyFrame.Time); if (otherIndex != -1) { - std::cerr << "A keyframe already exists for t = " << time << std::endl + std::cerr << "A keyframe already exists for t = " << keyFrame.Time << std::endl << "Keyframe ID : " << otherIndex << std::endl << std::endl; return; @@ -451,7 +451,11 @@ void vtkMRMLCameraPathNode::AddKeyFrame(KeyFrame keyFrame) void vtkMRMLCameraPathNode::AddKeyFrame(double t, vtkMRMLCameraNode* camera) { - KeyFrame keyFrame(camera, t); + vtkNew newCamera; + newCamera->SetPosition(camera->GetPosition()); + newCamera->SetFocalPoint(camera->GetFocalPoint()); + newCamera->SetViewUp(camera->GetViewUp()); + KeyFrame keyFrame(newCamera, t); this->AddKeyFrame(keyFrame); } diff --git a/Modules/Loadable/CameraPath/MRML/vtkMRMLCameraPathNode.h b/Modules/Loadable/CameraPath/MRML/vtkMRMLCameraPathNode.h index f6531cc..34bdcab 100644 --- a/Modules/Loadable/CameraPath/MRML/vtkMRMLCameraPathNode.h +++ b/Modules/Loadable/CameraPath/MRML/vtkMRMLCameraPathNode.h @@ -21,12 +21,18 @@ struct KeyFrame //bool Locked; //bool Visibility; - KeyFrame(vtkMRMLCameraNode* camera = NULL, + KeyFrame(vtkMRMLCameraNode* camera = nullptr, double time = 0.0): Camera(camera), Time(time) {} + KeyFrame(const KeyFrame& a) + { + Camera = a.Camera; + Time = a.Time; + } + KeyFrame& operator = (const KeyFrame& a) { Camera = a.Camera; @@ -98,9 +104,9 @@ class VTK_SLICER_CAMERAPATH_MODULE_MRML_EXPORT vtkMRMLCameraPathNode: KeyFrame GetKeyFrame(vtkIdType index); double GetKeyFrameTime(vtkIdType index); vtkMRMLCameraNode* GetKeyFrameCamera(vtkIdType index); - void GetKeyFramePosition(vtkIdType index, double position[3] = 0); - void GetKeyFrameFocalPoint(vtkIdType index, double focalPoint[3] = 0); - void GetKeyFrameViewUp(vtkIdType index, double viewUp[3] = 0); + void GetKeyFramePosition(vtkIdType index, double position[3] = nullptr); + void GetKeyFrameFocalPoint(vtkIdType index, double focalPoint[3] = nullptr); + void GetKeyFrameViewUp(vtkIdType index, double viewUp[3] = nullptr); void SetKeyFrames(KeyFrameVector keyFrames); void SetKeyFrame(vtkIdType index, KeyFrame keyFrame); @@ -134,9 +140,9 @@ class VTK_SLICER_CAMERAPATH_MODULE_MRML_EXPORT vtkMRMLCameraPathNode: vtkMRMLPointSplineNode* viewUps); void GetCameraAt(double t, vtkMRMLCameraNode* camera); - void GetPositionAt(double t, double position[3] = 0); - void GetFocalPointAt(double t, double focalPoint[3] = 0); - void GetViewUpAt(double t, double viewUp[3] = 0); + void GetPositionAt(double t, double position[3] = nullptr); + void GetFocalPointAt(double t, double focalPoint[3] = nullptr); + void GetViewUpAt(double t, double viewUp[3] = nullptr); double ClampTime(double t); protected: diff --git a/Modules/Loadable/CameraPath/MRML/vtkMRMLPointSplineNode.cxx b/Modules/Loadable/CameraPath/MRML/vtkMRMLPointSplineNode.cxx index 1ebc810..71e670a 100644 --- a/Modules/Loadable/CameraPath/MRML/vtkMRMLPointSplineNode.cxx +++ b/Modules/Loadable/CameraPath/MRML/vtkMRMLPointSplineNode.cxx @@ -115,12 +115,12 @@ void vtkMRMLPointSplineNode::PrintSelf(ostream& os, vtkIndent indent) //---------------------------------------------------------------------------- void vtkMRMLPointSplineNode::CreateDefaultDisplayNodes() { - if (vtkMRMLModelDisplayNode::SafeDownCast(this->GetDisplayNode())!=NULL) + if (vtkMRMLModelDisplayNode::SafeDownCast(this->GetDisplayNode()) != nullptr) { // display node already exists return; } - if (this->GetScene()==NULL) + if (this->GetScene() == nullptr) { vtkErrorMacro("vtkMRMLPointSplineNode::CreateDefaultDisplayNodes failed: scene is invalid"); return; diff --git a/Modules/Loadable/CameraPath/MRML/vtkMRMLPointSplineNode.h b/Modules/Loadable/CameraPath/MRML/vtkMRMLPointSplineNode.h index be2b34c..3cd99de 100644 --- a/Modules/Loadable/CameraPath/MRML/vtkMRMLPointSplineNode.h +++ b/Modules/Loadable/CameraPath/MRML/vtkMRMLPointSplineNode.h @@ -56,7 +56,7 @@ class VTK_SLICER_CAMERAPATH_MODULE_MRML_EXPORT vtkMRMLPointSplineNode : void AddPoint(double t, double point[3]); void RemovePoint(double t); void UpdatePolyData(int framerate); - void Evaluate(double t, double point[3]=0); + void Evaluate(double t, double point[3]=nullptr); protected: vtkMRMLPointSplineNode(); diff --git a/Modules/Loadable/CameraPath/Resources/UI/qSlicerCameraPathFooBarWidget.ui b/Modules/Loadable/CameraPath/Resources/UI/qSlicerCameraPathFooBarWidget.ui deleted file mode 100644 index 7a6cf29..0000000 --- a/Modules/Loadable/CameraPath/Resources/UI/qSlicerCameraPathFooBarWidget.ui +++ /dev/null @@ -1,31 +0,0 @@ - - - qSlicerCameraPathFooBarWidget - - - - 0 - 0 - 103 - 27 - - - - Foo bar - - - - 0 - - - - - Foo Bar - - - - - - - - diff --git a/Modules/Loadable/CameraPath/Resources/UI/qSlicerCameraPathModuleWidget.ui b/Modules/Loadable/CameraPath/Resources/UI/qSlicerCameraPathModuleWidget.ui index 29a7c3d..aab6522 100644 --- a/Modules/Loadable/CameraPath/Resources/UI/qSlicerCameraPathModuleWidget.ui +++ b/Modules/Loadable/CameraPath/Resources/UI/qSlicerCameraPathModuleWidget.ui @@ -609,11 +609,6 @@ Time - - - Camera - - @@ -631,14 +626,14 @@ - + - Camera ID : + KeyFrame ID : - + no key frame selected diff --git a/Modules/Loadable/CameraPath/Widgets/CMakeLists.txt b/Modules/Loadable/CameraPath/Widgets/CMakeLists.txt deleted file mode 100644 index cd9298a..0000000 --- a/Modules/Loadable/CameraPath/Widgets/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ -project(qSlicer${MODULE_NAME}ModuleWidgets) - -set(KIT ${PROJECT_NAME}) - -set(${KIT}_EXPORT_DIRECTIVE "Q_SLICER_MODULE_${MODULE_NAME_UPPER}_WIDGETS_EXPORT") - -set(${KIT}_INCLUDE_DIRECTORIES - ) - -set(${KIT}_SRCS - qSlicer${MODULE_NAME}FooBarWidget.cxx - qSlicer${MODULE_NAME}FooBarWidget.h - ) - -set(${KIT}_MOC_SRCS - qSlicer${MODULE_NAME}FooBarWidget.h - ) - -set(${KIT}_UI_SRCS - ../Resources/UI/qSlicer${MODULE_NAME}FooBarWidget.ui - ) - -set(${KIT}_RESOURCES - ../Resources/UI/qSlicer${MODULE_NAME}FooBarWidget.ui - ) - -set(${KIT}_TARGET_LIBRARIES - vtkSlicer${MODULE_NAME}ModuleLogic - ) - -#----------------------------------------------------------------------------- -SlicerMacroBuildModuleWidgets( - NAME ${KIT} - EXPORT_DIRECTIVE ${${KIT}_EXPORT_DIRECTIVE} - INCLUDE_DIRECTORIES ${${KIT}_INCLUDE_DIRECTORIES} - SRCS ${${KIT}_SRCS} - MOC_SRCS ${${KIT}_MOC_SRCS} - UI_SRCS ${${KIT}_UI_SRCS} - TARGET_LIBRARIES ${${KIT}_TARGET_LIBRARIES} - RESOURCES ${${KIT}_RESOURCES} - WRAP_PYTHONQT - ) diff --git a/Modules/Loadable/CameraPath/Widgets/qSlicerCameraPathFooBarWidget.cxx b/Modules/Loadable/CameraPath/Widgets/qSlicerCameraPathFooBarWidget.cxx deleted file mode 100644 index 1940201..0000000 --- a/Modules/Loadable/CameraPath/Widgets/qSlicerCameraPathFooBarWidget.cxx +++ /dev/null @@ -1,72 +0,0 @@ -/*============================================================================== - - Program: 3D Slicer - - Copyright (c) Kitware Inc. - - See COPYRIGHT.txt - or http://www.slicer.org/copyright/copyright.txt for details. - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc. - and was partially funded by NIH grant 3P41RR013218-12S1 - -==============================================================================*/ - -// FooBar Widgets includes -#include "qSlicerCameraPathFooBarWidget.h" -#include "ui_qSlicerCameraPathFooBarWidget.h" - -//----------------------------------------------------------------------------- -/// \ingroup Slicer_QtModules_CameraPath -class qSlicerCameraPathFooBarWidgetPrivate - : public Ui_qSlicerCameraPathFooBarWidget -{ - Q_DECLARE_PUBLIC(qSlicerCameraPathFooBarWidget); -protected: - qSlicerCameraPathFooBarWidget* const q_ptr; - -public: - qSlicerCameraPathFooBarWidgetPrivate( - qSlicerCameraPathFooBarWidget& object); - virtual void setupUi(qSlicerCameraPathFooBarWidget*); -}; - -// -------------------------------------------------------------------------- -qSlicerCameraPathFooBarWidgetPrivate -::qSlicerCameraPathFooBarWidgetPrivate( - qSlicerCameraPathFooBarWidget& object) - : q_ptr(&object) -{ -} - -// -------------------------------------------------------------------------- -void qSlicerCameraPathFooBarWidgetPrivate -::setupUi(qSlicerCameraPathFooBarWidget* widget) -{ - this->Ui_qSlicerCameraPathFooBarWidget::setupUi(widget); -} - -//----------------------------------------------------------------------------- -// qSlicerCameraPathFooBarWidget methods - -//----------------------------------------------------------------------------- -qSlicerCameraPathFooBarWidget -::qSlicerCameraPathFooBarWidget(QWidget* parentWidget) - : Superclass( parentWidget ) - , d_ptr( new qSlicerCameraPathFooBarWidgetPrivate(*this) ) -{ - Q_D(qSlicerCameraPathFooBarWidget); - d->setupUi(this); -} - -//----------------------------------------------------------------------------- -qSlicerCameraPathFooBarWidget -::~qSlicerCameraPathFooBarWidget() -{ -} diff --git a/Modules/Loadable/CameraPath/Widgets/qSlicerCameraPathFooBarWidget.h b/Modules/Loadable/CameraPath/Widgets/qSlicerCameraPathFooBarWidget.h deleted file mode 100644 index a5bb1a2..0000000 --- a/Modules/Loadable/CameraPath/Widgets/qSlicerCameraPathFooBarWidget.h +++ /dev/null @@ -1,52 +0,0 @@ -/*============================================================================== - - Program: 3D Slicer - - Copyright (c) Kitware Inc. - - See COPYRIGHT.txt - or http://www.slicer.org/copyright/copyright.txt for details. - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc. - and was partially funded by NIH grant 3P41RR013218-12S1 - -==============================================================================*/ - -#ifndef __qSlicerCameraPathFooBarWidget_h -#define __qSlicerCameraPathFooBarWidget_h - -// Qt includes -#include - -// FooBar Widgets includes -#include "qSlicerCameraPathModuleWidgetsExport.h" - -class qSlicerCameraPathFooBarWidgetPrivate; - -/// \ingroup Slicer_QtModules_CameraPath -class Q_SLICER_MODULE_CAMERAPATH_WIDGETS_EXPORT qSlicerCameraPathFooBarWidget - : public QWidget -{ - Q_OBJECT -public: - typedef QWidget Superclass; - qSlicerCameraPathFooBarWidget(QWidget *parent=0); - virtual ~qSlicerCameraPathFooBarWidget(); - -protected slots: - -protected: - QScopedPointer d_ptr; - -private: - Q_DECLARE_PRIVATE(qSlicerCameraPathFooBarWidget); - Q_DISABLE_COPY(qSlicerCameraPathFooBarWidget); -}; - -#endif diff --git a/Modules/Loadable/CameraPath/qSlicerCameraPathModule.cxx b/Modules/Loadable/CameraPath/qSlicerCameraPathModule.cxx index 4dbe603..c59f1c4 100644 --- a/Modules/Loadable/CameraPath/qSlicerCameraPathModule.cxx +++ b/Modules/Loadable/CameraPath/qSlicerCameraPathModule.cxx @@ -31,9 +31,6 @@ #include "qSlicerCameraPathModuleWidget.h" #include "qSlicerCameraPathReader.h" -//----------------------------------------------------------------------------- -Q_EXPORT_PLUGIN2(qSlicerCameraPathModule, qSlicerCameraPathModule); - //----------------------------------------------------------------------------- /// \ingroup Slicer_QtModules_ExtensionTemplate class qSlicerCameraPathModulePrivate diff --git a/Modules/Loadable/CameraPath/qSlicerCameraPathModule.h b/Modules/Loadable/CameraPath/qSlicerCameraPathModule.h index 953eeda..9351a92 100644 --- a/Modules/Loadable/CameraPath/qSlicerCameraPathModule.h +++ b/Modules/Loadable/CameraPath/qSlicerCameraPathModule.h @@ -31,12 +31,13 @@ qSlicerCameraPathModule : public qSlicerLoadableModule { Q_OBJECT + Q_PLUGIN_METADATA(IID "org.slicer.modules.loadable.qSlicerLoadableModule/1.0"); Q_INTERFACES(qSlicerLoadableModule); public: typedef qSlicerLoadableModule Superclass; - explicit qSlicerCameraPathModule(QObject *parent=0); + explicit qSlicerCameraPathModule(QObject *parent=nullptr); virtual ~qSlicerCameraPathModule(); qSlicerGetTitleMacro(QTMODULE_TITLE); diff --git a/Modules/Loadable/CameraPath/qSlicerCameraPathModuleWidget.cxx b/Modules/Loadable/CameraPath/qSlicerCameraPathModuleWidget.cxx index 362fec7..70adbfa 100644 --- a/Modules/Loadable/CameraPath/qSlicerCameraPathModuleWidget.cxx +++ b/Modules/Loadable/CameraPath/qSlicerCameraPathModuleWidget.cxx @@ -49,7 +49,9 @@ #include "vtkRenderWindow.h" #include "vtkWindowToImageFilter.h" #include "vtkPNGWriter.h" +#ifdef Slicer_CAMERA_PATH_EXPORT_VIDEO_SUPPORT #include "vtkFFMPEGWriter.h" +#endif //----------------------------------------------------------------------------- /// \ingroup Slicer_QtModules_ExtensionTemplate @@ -96,7 +98,7 @@ qSlicerCameraPathModuleWidgetPrivate::logic() const Q_Q(const qSlicerCameraPathModuleWidget); vtkSlicerCameraPathLogic* logic=vtkSlicerCameraPathLogic::SafeDownCast(q->logic()); - if (logic==NULL) + if (logic == nullptr) { qCritical() << "Camera path logic is invalid"; } @@ -161,8 +163,7 @@ void qSlicerCameraPathModuleWidget::setup() // Keyframes table widget d->keyFramesTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); - d->keyFramesTableWidget->setColumnWidth(0,80); - d->keyFramesTableWidget->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch); + d->keyFramesTableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); connect(d->keyFramesTableWidget, SIGNAL(cellChanged(int, int)), this, SLOT(onCellChanged(int, int))); connect(d->keyFramesTableWidget, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(onItemClicked(QTableWidgetItem*))); @@ -555,7 +556,7 @@ void qSlicerCameraPathModuleWidget::onDeleteSelectedClicked() rows << row; } // sort the list - qSort(rows); + std::sort(rows.begin(), rows.end()); // Popup window to ask the delete confirmation ctkMessageBox deleteMsgBox; @@ -681,14 +682,13 @@ void qSlicerCameraPathModuleWidget::onUpdateKeyFrameClicked() cameraPathNode->GetKeyFrameCamera(index); // Update keyframe camera - keyframeCameraNode->DisableModifiedEventOn(); - keyframeCameraNode->CopyWithoutModifiedEvent(defaultCameraNode); + MRMLNodeModifyBlocker blocker(keyframeCameraNode); + + keyframeCameraNode->CopyContent(defaultCameraNode); keyframeCameraNode->SetHideFromEditors(1); QString cameraPathName(cameraPathNode->GetName()); QString cameraName(cameraPathName+"_Camera"); keyframeCameraNode->SetName(cameraName.toStdString().c_str()); - keyframeCameraNode->DisableModifiedEventOff(); - keyframeCameraNode->Modified(); // XXX Update splines cameraPathNode->SetKeyFrameCamera(index,keyframeCameraNode); @@ -738,21 +738,12 @@ void qSlicerCameraPathModuleWidget::onAddKeyFrameClicked() return; } - // Create new camera - vtkNew newCameraNode; - newCameraNode->Copy(defaultCameraNode); - newCameraNode->SetHideFromEditors(1); - QString cameraPathName(cameraPathNode->GetName()); - QString newCameraName(cameraPathName+"_Camera"); - newCameraNode->SetName(newCameraName.toStdString().c_str()); - cameraPathNode->GetScene()->AddNode(newCameraNode.GetPointer()); - // Listen to new camera - this->qvtkConnect(newCameraNode.GetPointer(), vtkCommand::ModifiedEvent, - this, SLOT(onKeyFrameCameraModified(vtkObject*))); + //this->qvtkConnect(defaultCameraNode, vtkCommand::ModifiedEvent, + // this, SLOT(onKeyFrameCameraModified(vtkObject*))); // Add key frame - cameraPathNode->AddKeyFrame(t, newCameraNode.GetPointer()); + cameraPathNode->AddKeyFrame(t, defaultCameraNode); // Select new row index = cameraPathNode->KeyFrameIndexAt(t); @@ -819,8 +810,8 @@ void qSlicerCameraPathModuleWidget::onItemClicked(QTableWidgetItem* item) // Get Keyframe index int index = item->row(); - // Set selected camera - d->selectedCameraIDLineEdit->setText(d->keyFramesTableWidget->item(index, 1)->text()); + // Set selected key frame + d->selectedKeyFrameIDLineEdit->setText(QString::number(index)); // Update camera table d->cameraTableWidget->setEnabled(true); @@ -1024,14 +1015,20 @@ void qSlicerCameraPathModuleWidget::onRecordClicked() } } +#ifdef Slicer_CAMERA_PATH_EXPORT_VIDEO_SUPPORT vtkNew FFMPEGWriter; +#endif if(exportType == VIDEOCLIP) { +#ifdef Slicer_CAMERA_PATH_EXPORT_VIDEO_SUPPORT FFMPEGWriter->SetInputConnection(w2i->GetOutputPort()); FFMPEGWriter->SetQuality(exportQuality); FFMPEGWriter->SetFileName(fileName.toStdString().c_str()); FFMPEGWriter->SetRate(d->fpsSpinBox->value()); FFMPEGWriter->Start(); +#else + qWarning() << "Export failed: CameraPath module build without video export support"; +#endif } // Create progress dialog @@ -1075,8 +1072,10 @@ void qSlicerCameraPathModuleWidget::onRecordClicked() // Write video frame if(exportType == VIDEOCLIP) { +#ifdef Slicer_CAMERA_PATH_EXPORT_VIDEO_SUPPORT qDebug() <<"Writing frame "<< i << "/" << d->timeSlider->maximum(); FFMPEGWriter->Write(); +#endif } // Update progress dialog @@ -1094,7 +1093,9 @@ void qSlicerCameraPathModuleWidget::onRecordClicked() // End video if(exportType == VIDEOCLIP) { +#ifdef Slicer_CAMERA_PATH_EXPORT_VIDEO_SUPPORT FFMPEGWriter->End(); +#endif } // Reset renderwindow size @@ -1180,7 +1181,6 @@ void qSlicerCameraPathModuleWidget::populateKeyFramesTableWidget() { // Get Key frame info double t = keyFrames.at(i).Time; - char* cameraID = keyFrames.at(i).Camera->GetID(); // Add Key frame in table table->insertRow(table->rowCount()); @@ -1188,10 +1188,6 @@ void qSlicerCameraPathModuleWidget::populateKeyFramesTableWidget() QTableWidgetItem* timeItem = new QTableWidgetItem(); timeItem->setData(Qt::DisplayRole,t); table->setItem(table->rowCount()-1, 0, timeItem ); - - QTableWidgetItem* cameraItem = new QTableWidgetItem(QString(cameraID)); - cameraItem->setFlags(cameraItem->flags() ^ Qt::ItemIsEditable); - table->setItem(table->rowCount()-1, 1, cameraItem); } // Unblock signals from table @@ -1214,7 +1210,7 @@ void qSlicerCameraPathModuleWidget::emptyCameraTableWidget() { Q_D(qSlicerCameraPathModuleWidget); - d->selectedCameraIDLineEdit->setText("Please select one keyframe"); + d->selectedKeyFrameIDLineEdit->setText("Please select one keyframe"); d->cameraTableWidget->clearContents(); d->cameraTableWidget->setEnabled(false); } diff --git a/Modules/Loadable/CameraPath/qSlicerCameraPathModuleWidget.h b/Modules/Loadable/CameraPath/qSlicerCameraPathModuleWidget.h index c02eb40..a8e8894 100644 --- a/Modules/Loadable/CameraPath/qSlicerCameraPathModuleWidget.h +++ b/Modules/Loadable/CameraPath/qSlicerCameraPathModuleWidget.h @@ -40,7 +40,7 @@ class Q_SLICER_QTMODULES_CAMERAPATH_EXPORT qSlicerCameraPathModuleWidget : public: typedef qSlicerAbstractModuleWidget Superclass; - qSlicerCameraPathModuleWidget(QWidget *parent=0); + qSlicerCameraPathModuleWidget(QWidget *parent=nullptr); virtual ~qSlicerCameraPathModuleWidget(); void travelToTime(double t); diff --git a/Modules/Loadable/CameraPath/qSlicerCameraPathReader.cxx b/Modules/Loadable/CameraPath/qSlicerCameraPathReader.cxx index 0c91cbb..f44a4a2 100644 --- a/Modules/Loadable/CameraPath/qSlicerCameraPathReader.cxx +++ b/Modules/Loadable/CameraPath/qSlicerCameraPathReader.cxx @@ -107,7 +107,7 @@ bool qSlicerCameraPathReader::load(const IOProperties& properties) name = properties["name"].toString(); } - if (d->CameraPathLogic.GetPointer() == 0) + if (d->CameraPathLogic.GetPointer() == nullptr) { return false; } @@ -125,7 +125,7 @@ bool qSlicerCameraPathReader::load(const IOProperties& properties) while (ptr) { nodeIDList.append(ptr); - ptr = strtok(NULL, ","); + ptr = strtok(nullptr, ","); } this->setLoadedNodes(nodeIDList); } @@ -135,5 +135,5 @@ bool qSlicerCameraPathReader::load(const IOProperties& properties) return false; } - return nodeIDs != 0; + return nodeIDs != nullptr; } diff --git a/Modules/Loadable/CameraPath/qSlicerCameraPathReader.h b/Modules/Loadable/CameraPath/qSlicerCameraPathReader.h index dc9b21a..a010267 100644 --- a/Modules/Loadable/CameraPath/qSlicerCameraPathReader.h +++ b/Modules/Loadable/CameraPath/qSlicerCameraPathReader.h @@ -32,8 +32,8 @@ class qSlicerCameraPathReader Q_OBJECT public: typedef qSlicerFileReader Superclass; - qSlicerCameraPathReader(QObject* parent = 0); - qSlicerCameraPathReader(vtkSlicerCameraPathLogic* logic, QObject* parent = 0); + qSlicerCameraPathReader(QObject* parent = nullptr); + qSlicerCameraPathReader(vtkSlicerCameraPathLogic* logic, QObject* parent = nullptr); virtual ~qSlicerCameraPathReader(); vtkSlicerCameraPathLogic* CameraPathLogic()const; diff --git a/Modules/Scripted/testCameraPath/testCameraPath.py b/Modules/Scripted/testCameraPath/testCameraPath.py index e2fac72..6383dfb 100644 --- a/Modules/Scripted/testCameraPath/testCameraPath.py +++ b/Modules/Scripted/testCameraPath/testCameraPath.py @@ -1,5 +1,13 @@ -import vtk, qt, ctk, slicer, time +import time import os + +import ctk +import qt +import vtk + +import slicer + + # # testCameraPath # @@ -17,6 +25,7 @@ def __init__(self, parent): self.parent = parent +# # qtestCameraPathWidget # @@ -50,133 +59,79 @@ def setup(self): self.RemoveButton.toolTip = "Remove KeyFrames" self.RemoveButton.connect('clicked()', self.onRemoveButton) progress_layout.addWidget(self.RemoveButton) - + self.AddButton = qt.QPushButton("Add KeyFrame") self.AddButton.toolTip = "Add KeyFrame" self.AddButton.connect('clicked()', self.onAddButton) progress_layout.addWidget(self.AddButton) - + self.CreateButton = qt.QPushButton("Create Path") self.CreateButton.toolTip = "Create Path" self.CreateButton.connect('clicked()', self.onCreateButton) progress_layout.addWidget(self.CreateButton) - + self.FlyButton = qt.QPushButton("Fly !") self.FlyButton.toolTip = "Fly !" self.FlyButton.connect('clicked()', self.onFlyButton) self.FlyButton.setEnabled(False) progress_layout.addWidget(self.FlyButton) - + # LOGIC self.defaultCam = slicer.mrmlScene.GetNodeByID('vtkMRMLCameraNode1') self.Time = 0 - self.CameraList = [] self.cameraPath = slicer.vtkMRMLCameraPathNode() - posSpline = self.cameraPath.GetPositionSplines() - focalSpline = self.cameraPath.GetFocalPointSplines() - viewSpline = self.cameraPath.GetViewUpSplines() - - posSpline.SetName('posSpline') - focalSpline.SetName('focalSpline') - viewSpline.SetName('viewSpline') - - slicer.mrmlScene.AddNode(self.cameraPath) - slicer.mrmlScene.AddNode(posSpline) - slicer.mrmlScene.AddNode(focalSpline) - slicer.mrmlScene.AddNode(viewSpline) - - self.Flying = False + posSpline = self.cameraPath.GetPositionSplines() + focalSpline = self.cameraPath.GetFocalPointSplines() + viewSpline = self.cameraPath.GetViewUpSplines() + + posSpline.SetName('posSpline') + focalSpline.SetName('focalSpline') + viewSpline.SetName('viewSpline') + + slicer.mrmlScene.AddNode(self.cameraPath) + slicer.mrmlScene.AddNode(posSpline) + slicer.mrmlScene.AddNode(focalSpline) + slicer.mrmlScene.AddNode(viewSpline) + + self.Flying = False def onRemoveButton(self): - - print "-- Removing KeyFrames" + print("-- Removing KeyFrames") self.cameraPath.RemoveKeyFrames() - - if self.CameraList: - for camera in self.CameraList: - print camera.GetName() - slicer.mrmlScene.RemoveNode(camera) - del self.CameraList[:] - self.Time = 0 - + def onAddButton(self): - - print " -- Adding Keyframe at t =",self.Time - camera = slicer.mrmlScene.CreateNodeByClass('vtkMRMLCameraNode') - slicer.mrmlScene.AddNode(camera) - - x = vtk.mutable(0) - y = vtk.mutable(0) - z = vtk.mutable(0) - value = [x,y,z] - - self.defaultCam.GetPosition(value) - camera.SetPosition(value) - self.defaultCam.GetFocalPoint(value) - camera.SetFocalPoint(value) - self.defaultCam.GetViewUp(value) - camera.SetViewUp(value) - - cameraName = 'Camera T = '+str(self.Time) - print cameraName - camera.SetName(cameraName) - - self.cameraPath.AddKeyFrame(self.Time, camera) - self.Time += 100 - self.CameraList.append(camera) - + print(" -- Adding Keyframe at t =", self.Time) + + self.cameraPath.AddKeyFrame(self.Time, self.defaultCam) + self.Time += 100 + self.FlyButton.setEnabled(False) def onCreateButton(self): - - print " -- Creating Path" - self.cameraPath.CreatePath(); + print(" -- Creating Path") + self.cameraPath.CreatePath(); self.FlyButton.setEnabled(True) - def onFlyButton(self): - if not self.Flying: - print " -- FLYING !" - self.Flying = True + print(" -- FLYING !") + self.Flying = True self.FlyButton.setText("Stop") - - for t in range(0,self.Time-99): - if not self.Flying: - return - self.cameraPath.GetCameraAt(t,self.defaultCam) - self.defaultCam.ResetClippingRange() - print t - slicer.app.processEvents() - time.sleep(0.05) - - print "End" - self.Flying = False - self.FlyButton.setText("Fly!") - - else: - print " -- Stopped" - self.Flying = False - self.FlyButton.setText("Fly!") - + for t in range(0,self.Time-99): + if not self.Flying: + return + self.cameraPath.GetCameraAt(t,self.defaultCam) + self.defaultCam.ResetClippingRange() + print(t) + slicer.app.processEvents() + time.sleep(0.05) + print("End") + self.Flying = False + self.FlyButton.setText("Fly!") + else: + print(" -- Stopped") + self.Flying = False + self.FlyButton.setText("Fly!") self.FlyButton.setEnabled(True) - - - - - - - - - - - - - - - - - - - \ No newline at end of file +