<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.slicer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alexis.girault&amp;*</id>
	<title>Slicer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.slicer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alexis.girault&amp;*"/>
	<link rel="alternate" type="text/html" href="https://www.slicer.org/wiki/Special:Contributions/Alexis.girault"/>
	<updated>2026-04-29T12:47:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/FlyThroughNavigation&amp;diff=44271</id>
		<title>Documentation/Labs/FlyThroughNavigation</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/FlyThroughNavigation&amp;diff=44271"/>
		<updated>2015-12-01T21:04:21Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: add references to camera path module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes possible approaches to implement general object to do fly through navigation. &lt;br /&gt;
&lt;br /&gt;
There is already a scripted module named [[Documentation/Nightly/Modules/Endoscopy|Endoscopy]], as well as an external module for a custom application made by [mailto:alexis.girault@kitware.com Alexis Girault]. The idea would be to learn the lesson from those modules and other projects to create more general structure to store, represent and manage fly through navigation.&lt;br /&gt;
&lt;br /&gt;
== Representation ==&lt;br /&gt;
&lt;br /&gt;
* fly through path as a line&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Virtual endoscopy in Slicer2: http://groups.csail.mit.edu/vision/medical-vision/virtual-endoscopy/&lt;br /&gt;
* vtkMRMLCameraPathNode &amp;amp; vtkMRMLPointSplineNode : [mailto:alexis.girault@kitware.com contact]&lt;br /&gt;
* CameraPath Loadable Module : [mailto:alexis.girault@kitware.com contact]&lt;br /&gt;
* vtkFlightInteractorStyle : [mailto:alexis.girault@kitware.com contact]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
* 3D Virtual Colonoscopy - Colon Fly Through : https://www.youtube.com/watch?v=uQP8J_lrJ7c&lt;br /&gt;
* Backward and forward playing is important: https://www.youtube.com/watch?v=pi79dw36jrI&lt;br /&gt;
* CameraPath Loadable Module interface :&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Camerapath_module.png|thumb|200px]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:Camerapath_module.png&amp;diff=44270</id>
		<title>File:Camerapath module.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:Camerapath_module.png&amp;diff=44270"/>
		<updated>2015-12-01T20:59:35Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs&amp;diff=44269</id>
		<title>Documentation/Labs</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs&amp;diff=44269"/>
		<updated>2015-12-01T20:47:01Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: /* Internals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the place where we will keep track of our experiments and projects.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= On-going =&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Segmentations|Segmentations]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/DeprecatedModules|DeprecatedModules extension]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/StartupTimeImprovement|Slicer startup time improvement]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/FHSCompliantDirectoryStructure|FHS compliant directory structure]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/FiberTractMeasurementAndVisualization|Fiber Tract measurement and visualization]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTKWidgets|VTK Widgets improvements]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/CLIInfrastructureCleanupAndRefactoring|CLI infrastructure cleanup and refactoring]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/SlicerConfigAndUseSlicerTweaks|SlicerConfig and UseSlicer Tweaks]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/UpgradingCompilerInfrastructure|Upgrading Compiler Infrastructure]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ViewInfrastructureImprovements| View Infrastructure Improvements]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/CDash Improvements|CDash Improvements]]&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Qt5|Migration to Qt5]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/OpenCV|Integration with OpenCV]]&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/CallingPythonMethodsFromCpp|Calling Python methods from Cpp]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/IPython|IPython]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Pip|Pip]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/PythonCondaBuild|Python conda build]]&lt;br /&gt;
&lt;br /&gt;
== Compilers &amp;amp; IDE ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Ninja|Ninja]]&lt;br /&gt;
&lt;br /&gt;
== Virtual Machines ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/GPU Virtualization|GPU Virtualization]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/DocumentationImprovments|Documentation Improvements (Wiki, website, ...)]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/IPythonSlicerTutorials|IPython Slicer Tutorials]]&lt;br /&gt;
&lt;br /&gt;
== Source code management ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/TransitionToGit|Transition to Git]]&lt;br /&gt;
&lt;br /&gt;
== Extension ==&lt;br /&gt;
&lt;br /&gt;
* [[{{FULLPAGENAME}}/ExtensionsFrameworkRoadmap|Extensions Framework Roadmap]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/CustomSlicerGenerator|Custom Slicer Generator]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Video Support|Video support]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/FlyThroughNavigation|Fly-through Navigation]]&lt;br /&gt;
&lt;br /&gt;
= Completed =&lt;br /&gt;
&lt;br /&gt;
* [[Slicer4:Developers|Developer Projects]]&lt;br /&gt;
&lt;br /&gt;
== Extension ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/EasyExtensionContribution|Easy Extension Contribution]] - See [[Documentation/Nightly/Developers/ExtensionWizard|ExtensionWizard]]&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/CMake-ified Python|CMake-ified Python]] - See [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21911 r21911], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21912 r21912], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21913 r21913]&lt;br /&gt;
* [[{{FULLPAGENAME}}/NonlinearTransforms|Full support for non-linear transforms]]&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/ITKv4|ITKv4]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Qt484|Qt484]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTK6|VTK6]]&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/DevelopmentWithGit|Development with Git]] - See [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21863 r21863], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21867 r21867], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21869 r21869], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21879 r21879], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21891 r21891]&lt;br /&gt;
* [[{{FULLPAGENAME}}/PythonObserverCallbacks|Python observer callbacks]]&lt;br /&gt;
&lt;br /&gt;
== Compilers &amp;amp; IDE ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/VS2012|VS2012]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/NUMPY171|Support for Numpy 1.7.1]]&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/SimpleFilters|Simple Filters]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Editor|Editor]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials testing ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/TutorialTesting/4.3-Release|4.3 Release]]&lt;br /&gt;
&lt;br /&gt;
== Debug ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/BRAINS_and_ITKv4_issue|BRAINS and ITKv4 issue]]&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/MultiDimensional Data Management|MultiDimensional Data Management]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/DICOMExport|DICOM Export]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/SliceViewAnnotations|Slice View Annotations]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/SubjectHierarchy|Subject hierarchy module and plugins]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/I18N|Internationalization]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Units|Units]]&lt;br /&gt;
* [https://github.com/TubeTK/SlicerExecutionModel/wiki/SlicerExecutionModel-Parameter-Serialization SlicerExecutionModel Parameter Serialization]&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/ViewInfrastructureImprovements&amp;diff=44268</id>
		<title>Documentation/Labs/ViewInfrastructureImprovements</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/ViewInfrastructureImprovements&amp;diff=44268"/>
		<updated>2015-12-01T20:44:41Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goals =&lt;br /&gt;
* Update Slicer code base to listen to interactor instead of interactor style&lt;br /&gt;
* Add support for interactor style switch per view&lt;br /&gt;
* Allow access to vtkRenderWindow from vtkMRMLViewNode&lt;br /&gt;
&lt;br /&gt;
= Motivation =&lt;br /&gt;
&lt;br /&gt;
* We would like to conveniently be able to change the interactor style without having to reset all observer for the displayable managers.&lt;br /&gt;
* Accessing the vtkRenderWindow would allow us to do (for example) screenshots given a specific viewNode.&lt;br /&gt;
&lt;br /&gt;
= InteractorStyle management =&lt;br /&gt;
== Workaround  ==&lt;br /&gt;
=== Access 3D View ===&lt;br /&gt;
* Created a new Action menu in qSlicerMouseModeToolBar following [https://github.com/Slicer/Slicer/blob/a331fb0/Base/QTGUI/qSlicerMouseModeToolBar.cxx#L59-L103 this method.]&lt;br /&gt;
* Accessed all qMRMLThreeDView through the layoutManager :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void qSlicerMouseModeToolBar::switchToTrackBallInteractorStyle()&lt;br /&gt;
{&lt;br /&gt;
  qMRMLLayoutManager *layoutManager = qSlicerApplication::application()-&amp;gt;layoutManager();&lt;br /&gt;
&lt;br /&gt;
  // loop through all existing threeDViews&lt;br /&gt;
  vtkNew&amp;lt;vtkThreeDViewInteractorStyle&amp;gt; interactorStyle;&lt;br /&gt;
  for (int i=0; i &amp;lt; layoutManager-&amp;gt;threeDViewCount(); ++i)&lt;br /&gt;
    {&lt;br /&gt;
    qMRMLThreeDView* view = layoutManager-&amp;gt;threeDWidget(i)-&amp;gt;threeDView();&lt;br /&gt;
    // Update Interactor style&lt;br /&gt;
    this-&amp;gt;SetInteractorStyle(view, interactorStyle.GetPointer());&lt;br /&gt;
    // Reset focal point&lt;br /&gt;
    view-&amp;gt;resetFocalPoint();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  // Update icon&lt;br /&gt;
  Q_D(qSlicerMouseModeToolBar);&lt;br /&gt;
  d-&amp;gt;InteractorStyleToolButton-&amp;gt;setIcon(QIcon(&amp;quot;:/Icons/TrackBall.png&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Issue : not setting the interactor per view but for all views&lt;br /&gt;
* Possible solution : adding the switch in each 3D View Qt controller&lt;br /&gt;
&lt;br /&gt;
=== Update InteractorStyle ===&lt;br /&gt;
* Set the interactorStyle to the qMRMLThreeDView interactor :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void qSlicerMouseModeToolBar::SetInteractorStyle(qMRMLThreeDView* view,&lt;br /&gt;
                                                 vtkInteractorStyle* interactorStyle)&lt;br /&gt;
{&lt;br /&gt;
  // Set InteractorStyle on renderview&lt;br /&gt;
  view-&amp;gt;interactor()-&amp;gt;SetInteractorStyle(interactorStyle);&lt;br /&gt;
&lt;br /&gt;
  // Get DMs&lt;br /&gt;
  vtkNew&amp;lt;vtkCollection&amp;gt; collection;&lt;br /&gt;
  view-&amp;gt;getDisplayableManagers(collection.GetPointer());&lt;br /&gt;
  int numManagers = collection-&amp;gt;GetNumberOfItems();&lt;br /&gt;
&lt;br /&gt;
  // Set and Observe InteractorStyle for cameraDM&lt;br /&gt;
  for (int i = 0; i &amp;lt; numManagers; ++i)&lt;br /&gt;
    {&lt;br /&gt;
    vtkMRMLCameraDisplayableManager *cameraDM =&lt;br /&gt;
        vtkMRMLCameraDisplayableManager::SafeDownCast(collection-&amp;gt;GetItemAsObject(i));&lt;br /&gt;
    if (cameraDM)&lt;br /&gt;
      {&lt;br /&gt;
      cameraDM-&amp;gt;SetCameraToInteractor();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  collection-&amp;gt;RemoveAllItems();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Issues :&lt;br /&gt;
** Should need to update the observations for all the DM using [https://github.com/Slicer/Slicer/blob/8617758/Libs/MRML/DisplayableManager/vtkMRMLAbstractDisplayableManager.cxx#L309-L338 SetAndObserveInteractorStyle()], but this crashes Slicer.&lt;br /&gt;
** The camera was not set anymore after a change of interactor styles in the vtkMRMLCameraDisplayableManager, so we had to use [https://github.com/Slicer/Slicer/blob/5ca7d0f/Libs/MRML/DisplayableManager/vtkMRMLCameraDisplayableManager.cxx#L518 SetCameraToInteractor()] and define it as a public method.&lt;br /&gt;
&lt;br /&gt;
* Possible solution : updating Slicer core so that it listen only to the interactor instead of the interactorStyle.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; implementation ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= vtkRenderWindow mapping =&lt;br /&gt;
== Workaround  ==&lt;br /&gt;
* Created a method that accessed the renderWindow through the layout manager MRMLViewFactory :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vtkRenderWindow* getMRMLViewRenderWindow(vtkMRMLViewNode* viewNode)&lt;br /&gt;
{&lt;br /&gt;
  qSlicerLayoutManager *layoutManager = qSlicerApplication::application()-&amp;gt;layoutManager();&lt;br /&gt;
  qMRMLThreeDWidget* threeDWidget = qobject_cast&amp;lt;qMRMLThreeDWidget*&amp;gt;(layoutManager-&amp;gt;mrmlViewFactory(&amp;quot;vtkMRMLViewNode&amp;quot;)-&amp;gt;viewWidget(viewNode));&lt;br /&gt;
  vtkRenderWindow *renderWindow = threeDWidget-&amp;gt;threeDView()-&amp;gt;renderWindow();&lt;br /&gt;
&lt;br /&gt;
  return renderWindow;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Issue : calls to qMRML while we would prefer to stay with vtkMRML only &lt;br /&gt;
* Possible solution : map the vtkRenderWindow to the vtkMRMLViewNode in the view factory when creating the widget &lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; implementation ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/ViewInfrastructureImprovements&amp;diff=44265</id>
		<title>Documentation/Labs/ViewInfrastructureImprovements</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/ViewInfrastructureImprovements&amp;diff=44265"/>
		<updated>2015-12-01T19:36:39Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: Update InteractorStyle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goals =&lt;br /&gt;
* Update Slicer code base to listen to interactor instead of interactor style&lt;br /&gt;
* Add support for interactor style switch per view&lt;br /&gt;
* Allow access to vtkRenderWindow from vtkMRMLViewNode&lt;br /&gt;
&lt;br /&gt;
= Motivation =&lt;br /&gt;
&lt;br /&gt;
* We would like to conveniently be able to change the interactor style without having to reset all observer for the displayable managers.&lt;br /&gt;
* Accessing the vtkRenderWindow would allow us to do (for example) screenshots given a specific viewNode.&lt;br /&gt;
&lt;br /&gt;
= InteractorStyle management =&lt;br /&gt;
== Workaround  ==&lt;br /&gt;
=== Access 3D View ===&lt;br /&gt;
* Created a new Action menu in qSlicerMouseModeToolBar following [https://github.com/Slicer/Slicer/blob/a331fb0/Base/QTGUI/qSlicerMouseModeToolBar.cxx#L59-L103 this method.]&lt;br /&gt;
* Accessed all qMRMLThreeDView through the layoutManager :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void qSlicerMouseModeToolBar::switchToTrackBallInteractorStyle()&lt;br /&gt;
{&lt;br /&gt;
  qMRMLLayoutManager *layoutManager = qSlicerApplication::application()-&amp;gt;layoutManager();&lt;br /&gt;
&lt;br /&gt;
  // loop through all existing threeDViews&lt;br /&gt;
  vtkNew&amp;lt;vtkThreeDViewInteractorStyle&amp;gt; interactorStyle;&lt;br /&gt;
  for (int i=0; i &amp;lt; layoutManager-&amp;gt;threeDViewCount(); ++i)&lt;br /&gt;
    {&lt;br /&gt;
    qMRMLThreeDView* view = layoutManager-&amp;gt;threeDWidget(i)-&amp;gt;threeDView();&lt;br /&gt;
    // Update Interactor style&lt;br /&gt;
    this-&amp;gt;SetInteractorStyle(view, interactorStyle.GetPointer());&lt;br /&gt;
    // Reset focal point&lt;br /&gt;
    view-&amp;gt;resetFocalPoint();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  // Update icon&lt;br /&gt;
  Q_D(qSlicerMouseModeToolBar);&lt;br /&gt;
  d-&amp;gt;InteractorStyleToolButton-&amp;gt;setIcon(QIcon(&amp;quot;:/Icons/TrackBall.png&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Issue : not setting the interactor per view but for all views&lt;br /&gt;
* Solution : adding the switch in each 3D View Qt controller&lt;br /&gt;
&lt;br /&gt;
=== Update InteractorStyle ===&lt;br /&gt;
* Set the interactorStyle to the qMRMLThreeDView interactor :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void qSlicerMouseModeToolBar::SetInteractorStyle(qMRMLThreeDView* view,&lt;br /&gt;
                                                 vtkInteractorStyle* interactorStyle)&lt;br /&gt;
{&lt;br /&gt;
  // Set InteractorStyle on renderview&lt;br /&gt;
  view-&amp;gt;interactor()-&amp;gt;SetInteractorStyle(interactorStyle);&lt;br /&gt;
&lt;br /&gt;
  // Get DMs&lt;br /&gt;
  vtkNew&amp;lt;vtkCollection&amp;gt; collection;&lt;br /&gt;
  view-&amp;gt;getDisplayableManagers(collection.GetPointer());&lt;br /&gt;
  int numManagers = collection-&amp;gt;GetNumberOfItems();&lt;br /&gt;
&lt;br /&gt;
  // Set and Observe InteractorStyle for cameraDM&lt;br /&gt;
  for (int i = 0; i &amp;lt; numManagers; ++i)&lt;br /&gt;
    {&lt;br /&gt;
    vtkMRMLCameraDisplayableManager *cameraDM =&lt;br /&gt;
        vtkMRMLCameraDisplayableManager::SafeDownCast(collection-&amp;gt;GetItemAsObject(i));&lt;br /&gt;
    if (cameraDM)&lt;br /&gt;
      {&lt;br /&gt;
      cameraDM-&amp;gt;SetCameraToInteractor();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  collection-&amp;gt;RemoveAllItems();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Issues :&lt;br /&gt;
** Should need to update the observations for all the DM using [https://github.com/Slicer/Slicer/blob/8617758/Libs/MRML/DisplayableManager/vtkMRMLAbstractDisplayableManager.cxx#L309-L338 SetAndObserveInteractorStyle()], but this crashes Slicer.&lt;br /&gt;
** The camera was not set anymore after a change of interactor styles in the vtkMRMLCameraDisplayableManager, so we had to use [https://github.com/Slicer/Slicer/blob/5ca7d0f/Libs/MRML/DisplayableManager/vtkMRMLCameraDisplayableManager.cxx#L518 SetCameraToInteractor()] and define it as a public method.&lt;br /&gt;
&lt;br /&gt;
* Solution : updating Slicer core so that it listen only to the interactor instead of the interactorStyle.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; implementation ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= vtkRenderWindow mapping =&lt;br /&gt;
== Current workaround  ==&lt;br /&gt;
TODO&lt;br /&gt;
== Issues ==&lt;br /&gt;
TODO&lt;br /&gt;
== Design &amp;amp; implementation ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/ViewInfrastructureImprovements&amp;diff=44263</id>
		<title>Documentation/Labs/ViewInfrastructureImprovements</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/ViewInfrastructureImprovements&amp;diff=44263"/>
		<updated>2015-12-01T19:20:33Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: Access 3D View&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goals =&lt;br /&gt;
* Update Slicer code base to listen to interactor instead of interactor style&lt;br /&gt;
* Add support for interactor style switch per view&lt;br /&gt;
* Allow access to vtkRenderWindow from vtkMRMLViewNode&lt;br /&gt;
&lt;br /&gt;
= Motivation =&lt;br /&gt;
&lt;br /&gt;
* We would like to conveniently be able to change the interactor style without having to reset all observer for the displayable managers.&lt;br /&gt;
* Accessing the vtkRenderWindow would allow us to do (for example) screenshots given a specific viewNode.&lt;br /&gt;
&lt;br /&gt;
= InteractorStyle management =&lt;br /&gt;
== Workaround  ==&lt;br /&gt;
=== Access 3D View ===&lt;br /&gt;
* Created a new Action menu in qSlicerMouseModeToolBar following [https://github.com/Slicer/Slicer/blob/a331fb0/Base/QTGUI/qSlicerMouseModeToolBar.cxx#L59-L103| this method.]&lt;br /&gt;
* Accessed all qMRMLThreeDView through the layoutManager&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void qSlicerMouseModeToolBar::switchToTrackBallInteractorStyle()&lt;br /&gt;
{&lt;br /&gt;
  qMRMLLayoutManager *layoutManager = qSlicerApplication::application()-&amp;gt;layoutManager();&lt;br /&gt;
&lt;br /&gt;
  // loop through all existing threeDViews&lt;br /&gt;
  vtkNew&amp;lt;vtkThreeDViewInteractorStyle&amp;gt; interactorStyle;&lt;br /&gt;
  for (int i=0; i &amp;lt; layoutManager-&amp;gt;threeDViewCount(); ++i)&lt;br /&gt;
    {&lt;br /&gt;
    qMRMLThreeDView* view = layoutManager-&amp;gt;threeDWidget(i)-&amp;gt;threeDView();&lt;br /&gt;
    // Update Interactor style&lt;br /&gt;
    this-&amp;gt;SetInteractorStyle(view, interactorStyle.GetPointer());&lt;br /&gt;
    // Reset focal point&lt;br /&gt;
    view-&amp;gt;resetFocalPoint();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  // Update icon&lt;br /&gt;
  Q_D(qSlicerMouseModeToolBar);&lt;br /&gt;
  d-&amp;gt;InteractorStyleToolButton-&amp;gt;setIcon(QIcon(&amp;quot;:/Icons/TrackBall.png&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Issue : not setting the interactor per view but for all views&lt;br /&gt;
* Solution : adding the switch in each 3D View Qt controller&lt;br /&gt;
&lt;br /&gt;
=== Update InteractorStyle ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; implementation ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= vtkRenderWindow mapping =&lt;br /&gt;
== Current workaround  ==&lt;br /&gt;
TODO&lt;br /&gt;
== Issues ==&lt;br /&gt;
TODO&lt;br /&gt;
== Design &amp;amp; implementation ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/ViewInfrastructureImprovements&amp;diff=44257</id>
		<title>Documentation/Labs/ViewInfrastructureImprovements</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/ViewInfrastructureImprovements&amp;diff=44257"/>
		<updated>2015-12-01T18:52:37Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goals =&lt;br /&gt;
* Update Slicer code base to listen to interactor instead of interactor style&lt;br /&gt;
* Add support for interactor style switch per view&lt;br /&gt;
* Allow access to vtkRenderWindow from vtkMRMLViewNode&lt;br /&gt;
&lt;br /&gt;
= Motivation =&lt;br /&gt;
&lt;br /&gt;
* We would like to conveniently be able to change the interactor style without having to reset all observer for the displayable managers.&lt;br /&gt;
* Accessing the vtkRenderWindow would allow us to do (for example) screenshots given a specific viewNode.&lt;br /&gt;
&lt;br /&gt;
= InteractorStyle management =&lt;br /&gt;
== Current workaround  ==&lt;br /&gt;
TODO&lt;br /&gt;
== Issues ==&lt;br /&gt;
TODO&lt;br /&gt;
== Design &amp;amp; implementation ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= vtkRenderWindow mapping =&lt;br /&gt;
== Current workaround  ==&lt;br /&gt;
TODO&lt;br /&gt;
== Issues ==&lt;br /&gt;
TODO&lt;br /&gt;
== Design &amp;amp; implementation ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/ViewInfrastructureImprovements&amp;diff=44255</id>
		<title>Documentation/Labs/ViewInfrastructureImprovements</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/ViewInfrastructureImprovements&amp;diff=44255"/>
		<updated>2015-12-01T18:36:50Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: moved Documentation/Labs/InteractorStyle to Documentation/Labs/ViewInfrastructureImprovements:&amp;amp;#32;including improvements for interactorstyle &amp;amp; mapping between vtkRenderWindow &amp;amp; vtkMRMLViewNode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
* Update Slicer code base to listen to interactor instead of interator style&lt;br /&gt;
&lt;br /&gt;
= Motivation =&lt;br /&gt;
&lt;br /&gt;
* It is convenient to be able to easily change the interactor style without having to reset all observer.&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/InteractorStyle&amp;diff=44256</id>
		<title>Documentation/Labs/InteractorStyle</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/InteractorStyle&amp;diff=44256"/>
		<updated>2015-12-01T18:36:50Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: moved Documentation/Labs/InteractorStyle to Documentation/Labs/ViewInfrastructureImprovements:&amp;amp;#32;including improvements for interactorstyle &amp;amp; mapping between vtkRenderWindow &amp;amp; vtkMRMLViewNode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Documentation/Labs/ViewInfrastructureImprovements]]&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/IO&amp;diff=43279</id>
		<title>Documentation/Nightly/Developers/FAQ/IO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/IO&amp;diff=43279"/>
		<updated>2015-11-05T22:32:40Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: /* Why is my node writer not showing up in the Save dialog ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;__TOC__&lt;br /&gt;
={{#titleparts: {{PAGENAME}} | | -1 }}=&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
='''Developer FAQ: {{{1}}}'''=&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why is my node writer not showing up in the Save dialog ? ==&lt;br /&gt;
You have implemented a loadable module with a new MRML node, its storage node, and the [{{documentation/{{documentation/version}}/doxygen-class-url|qSlicerNodeWriter}} qSlicerNodeWriter] needed to save your node on your system file. If the writer is not showing up for your node in the [{{documentation/{{documentation/version}}/doxygen-class-url|qSlicerSaveDataDialog}} qSlicerSaveDataDialog], it could be one of those following reasons :&lt;br /&gt;
&lt;br /&gt;
* You need to register your writer in the [{{documentation/{{documentation/version}}/doxygen-class-url|qSlicerIOManager}} qSlicerIOManager] in ''qSlicerYourModule::setup()''.&lt;br /&gt;
Example: [https://github.com/Slicer/Slicer/blob/3dd75da/Modules/Loadable/Markups/qSlicerMarkupsModule.cxx#L136-L138 qSlicerMarkupsModule writer registration]&lt;br /&gt;
* Your node needs to be a sub-class of [{{documentation/{{documentation/version}}/doxygen-class-url|vtkMRMLStorableNode}} vtkMRMLStorableNode].&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/IO&amp;diff=43278</id>
		<title>Documentation/Nightly/Developers/FAQ/IO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/IO&amp;diff=43278"/>
		<updated>2015-11-05T22:21:32Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: /* Why is my node writer not showing up in the Save dialog ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;__TOC__&lt;br /&gt;
={{#titleparts: {{PAGENAME}} | | -1 }}=&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
='''Developer FAQ: {{{1}}}'''=&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why is my node writer not showing up in the Save dialog ? ==&lt;br /&gt;
You have implemented a loadable module with a new MRML node, its storage node, and the [http://slicer.org/doc/html/classqSlicerNodeWriter.html qSlicerNodeWriter] needed to save your node on your system file. If the writer is not showing up for your node in the [http://slicer.org/doc/html/classqSlicerSaveDataDialog.html qSlicerSaveDataDialog], it could be one of those following reasons :&lt;br /&gt;
&lt;br /&gt;
* You need to register your writer in the [http://slicer.org/doc/html/classqSlicerIOManager.html qSlicerIOManager] in ''qSlicerYourModule::setup()''.&lt;br /&gt;
Example: [https://github.com/Slicer/Slicer/blob/3dd75da/Modules/Loadable/Markups/qSlicerMarkupsModule.cxx#L136-L138 qSlicerMarkupsModule writer registration]&lt;br /&gt;
* Your node needs to be a sub-class of [http://slicer.org/doc/html/classvtkMRMLStorableNode.html vtkMRMLStorableNode].&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/IO&amp;diff=43277</id>
		<title>Documentation/Nightly/Developers/FAQ/IO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/IO&amp;diff=43277"/>
		<updated>2015-11-05T22:20:12Z</updated>

		<summary type="html">&lt;p&gt;Alexis.girault: Node writer not showing up in the Save dialog&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;__TOC__&lt;br /&gt;
={{#titleparts: {{PAGENAME}} | | -1 }}=&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
='''Developer FAQ: {{{1}}}'''=&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why is my node writer not showing up in the Save dialog ? ==&lt;br /&gt;
You have implemented a loadable module with a new MRML node, its storage node, and the [http://slicer.org/doc/html/classqSlicerNodeWriter.html qSlicerNodeWriter] needed to save your node on your system. If the writer is not showing up for your node in the [http://slicer.org/doc/html/classqSlicerSaveDataDialog.html qSlicerSaveDataDialog], it could be one of those following reasons :&lt;br /&gt;
&lt;br /&gt;
* You need to register your writer in the [http://slicer.org/doc/html/classqSlicerIOManager.html qSlicerIOManager] in ''qSlicerYourModule::setup()''.&lt;br /&gt;
Example: [https://github.com/Slicer/Slicer/blob/3dd75da/Modules/Loadable/Markups/qSlicerMarkupsModule.cxx#L136-L138 qSlicerMarkupsModule writer registration]&lt;br /&gt;
* Your node needs to be a sub-class of [http://slicer.org/doc/html/classvtkMRMLStorableNode.html vtkMRMLStorableNode].&lt;/div&gt;</summary>
		<author><name>Alexis.girault</name></author>
		
	</entry>
</feed>