<?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=Barre</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=Barre"/>
	<link rel="alternate" type="text/html" href="https://www.slicer.org/wiki/Special:Contributions/Barre"/>
	<updated>2026-04-21T22:30:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer3:Multiple_Cameras&amp;diff=13295</id>
		<title>Slicer3:Multiple Cameras</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer3:Multiple_Cameras&amp;diff=13295"/>
		<updated>2010-04-07T21:45:23Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Goals ==&lt;br /&gt;
&lt;br /&gt;
Bring core support for multiple cameras and 3D views in Slicer3.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
The multi views and cameras framework is available from the &amp;quot;Camera&amp;quot; modules. This module displays two pull-down menus. The first one, &amp;quot;View&amp;quot;, lists all available views and lets the user create new 3D views. The second one, &amp;quot;Camera&amp;quot;, lists all available cameras, and lets the user create new cameras. &lt;br /&gt;
&lt;br /&gt;
[[File:Slicer3CameraModule.png]]&lt;br /&gt;
&lt;br /&gt;
Only one camera is used by a view at a time. When a view is selected from the pull-down, the camera it is currently using is automatically selected in the second pull-down. &lt;br /&gt;
&lt;br /&gt;
* Create a new camera. In the &amp;quot;Camera&amp;quot; pull-down menu, select &amp;quot;Create New Camera&amp;quot;: a new camera node is created (most likely named &amp;quot;Camera1&amp;quot;, as opposed to the default &amp;quot;Camera&amp;quot; node), and automatically assigned to the currently selected view node (named &amp;quot;View&amp;quot; by default). Try interacting with the 3D view.&lt;br /&gt;
&lt;br /&gt;
* Assign a camera to a view. Select any camera node from the &amp;quot;Camera&amp;quot; pull-down menu: the camera is assigned to the currently selected view. For example, try selecting back the &amp;quot;Camera&amp;quot; node if you have created a &amp;quot;Camera1&amp;quot; node in the previous step, and you should notice the 3D view on the right update itself to reflect the different point of view. Note: a camera can not be shared between two views: selecting a camera already used by a view will effectively swap the cameras between the two views.&lt;br /&gt;
&lt;br /&gt;
* Create a new view: select the &amp;quot;Tabbed 3D Layout&amp;quot; from the layout button in the toolbar. In the &amp;quot;View&amp;quot; pull-down menu, select &amp;quot;Create New View&amp;quot;: a new view node is created (most likely named &amp;quot;View1&amp;quot;, as opposed to the default &amp;quot;View&amp;quot; node), and displayed on the right under a new tab. You can select which view to display by clicking on the corresponding tab in the &amp;quot;Tabbed 3D Layout&amp;quot;. Interacting in that view will automatically mark it as &amp;quot;active&amp;quot;; there can only be one &amp;quot;active&amp;quot; view at a time in Slicer3, and it always feature a thin dark blue border. Since a view can not exist without a camera, a new camera node is automatically created and assigned to this new view (most likely named &amp;quot;Camera2&amp;quot; if you have created &amp;quot;Camera1&amp;quot; in the previous steps). At this point, you can assign any of the previously created cameras to this new view (say, the &amp;quot;Camera&amp;quot; or &amp;quot;Camera1&amp;quot; nodes).&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
Here are a few pointers related to the new framework. What happens under the hood, and what events developers and module maintainers can intercept to use the new features.&lt;br /&gt;
&lt;br /&gt;
The workflow so far (Slicer 3.6, as of November 2009):&lt;br /&gt;
&lt;br /&gt;
When a vtkMRMLViewNode is created and added to the MRML scene (say by a module, or by the main app, or a third party):&lt;br /&gt;
&lt;br /&gt;
* vtkSlicerApplicationGUI, which listens to vtkMRMLScene::NodeAddedEvent, sees that a new view node has been &lt;br /&gt;
created, and calls vtkSlicerApplicationGUI::OnViewNodeAdded().&lt;br /&gt;
&lt;br /&gt;
* OnViewNodeAdded() adds a few observers to the view node, and if there is no other vtkMRMLViewNode around (i.e. if it's the first one), it is automatically tagged as &amp;quot;Active&amp;quot;. vtkSlicerApplicationGUI::UpdateMain3DViewers() is then called.&lt;br /&gt;
&lt;br /&gt;
* UpdateMain3DViewers(), a fair amount is done here, but the gist is: the function loops over all the vtkMRMLViewNode in the scene, and if it finds out that one doesn't have an associated vtkSlicerViewerWidget yet (i.e. the graphical part that really makes up the view), it allocates and Create()'s one and set its ViewNode ivar to the vtkMRMLViewNode pointer. This is the only place in Slicer3 where vtkSlicerViewerWidget::New() is created (this wasn't the case before, I factorized it). Note that some MRML nodes like vtkMRMLCamera maintain and allocate their VTK counterpart automatically (vtkCamera). This is not the case for vtkMRMLViewNode (I don't know why, but I didn't want to break that for backward compatibility, therefore that design didn't change).&lt;br /&gt;
&lt;br /&gt;
In a similar fashion, vtkSlicerApplicationGUI listens to vtkMRMLScene::NodeRemovedEvent, calls&lt;br /&gt;
vtkSlicerApplicationGUI::OnViewNodeRemoved, which remove previous observers, and calls UpdateMain3DViewers() as well. This function still does what is described above, but also loops over all the vtkSlicerViewerWidget it knows: if the corresponding vtkMRMLViewNode doesn't exist anymore (since it was just removed), it deletes that viewer widget, which should free the corresponding graphic resources.&lt;br /&gt;
&lt;br /&gt;
Module maintainers should not have to worry about the creation of Slicer Viewer Widgets, as this is taken care of as described above. What a module should do:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeAddedEvent, sent by the MRML scene: if a vtkMRMLViewNode has been added, that means you may have to prepare yourself for allocating the resources you will put in that view (vtkSlicerViewerWidget ),&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeRemovedEvent, sent by the MRML scene: if a vtkMRMLViewNode is being removed, this is definitely the time for your module to remove your resources from that view, and probably free them.&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLViewNode::ActiveModifiedEvent, sent by a vtkMRMLViewNode node (i.e. when a view node is added, it's up to you to add that observer on the view node, when the node is removed, you remove that observer): if a view becomes &amp;quot;active&amp;quot;, it means that it is &amp;quot;selected&amp;quot;. Right now, in dual view mode, the active view is the last one that was interacted with: it has a darker outline. This active event is useful essentially because of the left panel UI. If you have some UI that reflects the parameters used in VolumeRendering for example (say a LUT editor), it is possible you may want to apply those parameters only to the resources pertaining to a specific view.  In any case, when you receive an Active event, your UI is given the opportunity to update the parameters that are only relevant to that specific view.&lt;br /&gt;
&lt;br /&gt;
What is said in that first bullet point is not exactly helping though: vtkMRMLScene::NodeAddedEvent is triggered when a vtkMRMLViewNode is added, but it is still too early for your module to add resources to that view (i.e. the renderers), because the corresponding vtkSlicerViewerWidget  has not been created; this is done in UpdateMain3DViewers(). So even though you may want to listen to NodeAddedEvent to prepare some resources, you still can't add them, no renderers are ready for your actors. What you need is a way to know that the corresponding SlicerViewerWidget has been created. To fix that situation, your module should ultimately:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLViewNode::GraphicalResourcesCreatedEvent,  sent by a vtkMRMLViewNode node (same as #3, it's up to you to add that observer on the view node, by first listening to vtkMRMLScene::NodeAddedEvent). This event carries a pointer to the corresponding vtkSlicerViewerWidget that was just created in UpdateMain3DViewers(). Now seems a good time for you to add your actors to the renderers.&lt;br /&gt;
&lt;br /&gt;
Note that this doesn't necessarily conflict with the idea that a viewer widget, as Jim Miller suggested, could keep track of what is visible or not in its own render window... I guess for the time being we could &lt;br /&gt;
let the modules automatically add their actors to each new view when they are added to the scene, as described above, and then later on we can come up with something to turn the visibility on/off of actors in each viewer...&lt;br /&gt;
&lt;br /&gt;
To sum up:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeAddedEvent and vtkMRMLScene::NodeRemovedEvent on the scene,&lt;br /&gt;
* received vtkMRMLScene::NodeAddedEvent and its a new vtkMRMLViewNode? Allocate your graphical resources (don't add them yet), add vtkMRMLViewNode::GraphicalResourcesCreatedEvent  and vtkMRMLViewNode::ActiveModifiedEvent to this new view node to know when graphical resources have been created for that view (the renderwindow, renderers, etc), and when the view becomes &amp;quot;the active one&amp;quot;,&lt;br /&gt;
* received vtkMRMLViewNode::GraphicalResourcesCreatedEvent? time to add your actors to the corresponding view,&lt;br /&gt;
* received vtkMRMLViewNode::ActiveModifiedEvent? time to refresh your UI in the left panel&lt;br /&gt;
* received vtkMRMLScene::NodeRemovedEvent and it's a vtkMRMLViewNode? Time to remove your resources from that view.&lt;br /&gt;
&lt;br /&gt;
Now of course the choice of allocating resources *per view* depends on the module. One can technically add the same actor to different renderers, but this doesn't always do the trick (especially not for volume rendering). For example, fiducials use vtkFollower actors to make sure labels always face the camera. Since the camera is different for each renderer, this resource will have to be allocated for *each view*. It's likely up to the module to maintain some sort of STL map associating a view to the resources for that view.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
As of Slicer 3.6:&lt;br /&gt;
* there is one 'full featured' 3D viewer, which is the one at the top in the default layout. This is the one where volume rendering, fiducials, ROIs (box widget), and other actions take place,&lt;br /&gt;
* there can be multiple 'secondary' 3D views that have independent cameras but only see the models (essentially just the vtkActors but not widgets or volumes).&lt;br /&gt;
&lt;br /&gt;
All modules that display an actor on screen are technically concerned and need to be revisited to use the new framework. Now that the multi camera/views logic is in the core, it's a matter of letting the module maintainers&lt;br /&gt;
know that they can upgrade their code to use this particular set of functionality (which didn't exist when modules&lt;br /&gt;
like Fiducials, Volume Rendering, etc were first developed).&lt;br /&gt;
&lt;br /&gt;
Modules that need to be upgraded (please keep updating this list):&lt;br /&gt;
* Fiducials&lt;br /&gt;
* Volume Rendering&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:Slicer3CameraModule.png&amp;diff=13294</id>
		<title>File:Slicer3CameraModule.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:Slicer3CameraModule.png&amp;diff=13294"/>
		<updated>2010-04-07T21:44:41Z</updated>

		<summary type="html">&lt;p&gt;Barre: uploaded a new version of &amp;quot;File:Slicer3CameraModule.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:Slicer3CameraModule.png&amp;diff=13293</id>
		<title>File:Slicer3CameraModule.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:Slicer3CameraModule.png&amp;diff=13293"/>
		<updated>2010-04-07T21:43:31Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer3:Multiple_Cameras&amp;diff=13292</id>
		<title>Slicer3:Multiple Cameras</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer3:Multiple_Cameras&amp;diff=13292"/>
		<updated>2010-04-07T21:43:02Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Goal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Goals ==&lt;br /&gt;
&lt;br /&gt;
Bring core support for multiple cameras and 3D views in Slicer3.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
The multi views and cameras framework is available from the &amp;quot;Camera&amp;quot; modules. This module displays two pull-down menus. The first one, &amp;quot;View&amp;quot;, lists all available views and lets the user create new 3D views. The second one, &amp;quot;Camera&amp;quot;, lists all available cameras, and lets the user create new cameras. &lt;br /&gt;
&lt;br /&gt;
Only one camera is used by a view at a time. When a view is selected from the pull-down, the camera it is currently using is automatically selected in the second pull-down. &lt;br /&gt;
&lt;br /&gt;
* Create a new camera. In the &amp;quot;Camera&amp;quot; pull-down menu, select &amp;quot;Create New Camera&amp;quot;: a new camera node is created (most likely named &amp;quot;Camera1&amp;quot;, as opposed to the default &amp;quot;Camera&amp;quot; node), and automatically assigned to the currently selected view node (named &amp;quot;View&amp;quot; by default). Try interacting with the 3D view.&lt;br /&gt;
&lt;br /&gt;
* Assign a camera to a view. Select any camera node from the &amp;quot;Camera&amp;quot; pull-down menu: the camera is assigned to the currently selected view. For example, try selecting back the &amp;quot;Camera&amp;quot; node if you have created a &amp;quot;Camera1&amp;quot; node in the previous step, and you should notice the 3D view on the right update itself to reflect the different point of view. Note: a camera can not be shared between two views: selecting a camera already used by a view will effectively swap the cameras between the two views.&lt;br /&gt;
&lt;br /&gt;
* Create a new view: select the &amp;quot;Tabbed 3D Layout&amp;quot; from the layout button in the toolbar. In the &amp;quot;View&amp;quot; pull-down menu, select &amp;quot;Create New View&amp;quot;: a new view node is created (most likely named &amp;quot;View1&amp;quot;, as opposed to the default &amp;quot;View&amp;quot; node), and displayed on the right under a new tab. You can select which view to display by clicking on the corresponding tab in the &amp;quot;Tabbed 3D Layout&amp;quot;. Interacting in that view will automatically mark it as &amp;quot;active&amp;quot;; there can only be one &amp;quot;active&amp;quot; view at a time in Slicer3, and it always feature a thin dark blue border. Since a view can not exist without a camera, a new camera node is automatically created and assigned to this new view (most likely named &amp;quot;Camera2&amp;quot; if you have created &amp;quot;Camera1&amp;quot; in the previous steps). At this point, you can assign any of the previously created cameras to this new view (say, the &amp;quot;Camera&amp;quot; or &amp;quot;Camera1&amp;quot; nodes).&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
Here are a few pointers related to the new framework. What happens under the hood, and what events developers and module maintainers can intercept to use the new features.&lt;br /&gt;
&lt;br /&gt;
The workflow so far (Slicer 3.6, as of November 2009):&lt;br /&gt;
&lt;br /&gt;
When a vtkMRMLViewNode is created and added to the MRML scene (say by a module, or by the main app, or a third party):&lt;br /&gt;
&lt;br /&gt;
* vtkSlicerApplicationGUI, which listens to vtkMRMLScene::NodeAddedEvent, sees that a new view node has been &lt;br /&gt;
created, and calls vtkSlicerApplicationGUI::OnViewNodeAdded().&lt;br /&gt;
&lt;br /&gt;
* OnViewNodeAdded() adds a few observers to the view node, and if there is no other vtkMRMLViewNode around (i.e. if it's the first one), it is automatically tagged as &amp;quot;Active&amp;quot;. vtkSlicerApplicationGUI::UpdateMain3DViewers() is then called.&lt;br /&gt;
&lt;br /&gt;
* UpdateMain3DViewers(), a fair amount is done here, but the gist is: the function loops over all the vtkMRMLViewNode in the scene, and if it finds out that one doesn't have an associated vtkSlicerViewerWidget yet (i.e. the graphical part that really makes up the view), it allocates and Create()'s one and set its ViewNode ivar to the vtkMRMLViewNode pointer. This is the only place in Slicer3 where vtkSlicerViewerWidget::New() is created (this wasn't the case before, I factorized it). Note that some MRML nodes like vtkMRMLCamera maintain and allocate their VTK counterpart automatically (vtkCamera). This is not the case for vtkMRMLViewNode (I don't know why, but I didn't want to break that for backward compatibility, therefore that design didn't change).&lt;br /&gt;
&lt;br /&gt;
In a similar fashion, vtkSlicerApplicationGUI listens to vtkMRMLScene::NodeRemovedEvent, calls&lt;br /&gt;
vtkSlicerApplicationGUI::OnViewNodeRemoved, which remove previous observers, and calls UpdateMain3DViewers() as well. This function still does what is described above, but also loops over all the vtkSlicerViewerWidget it knows: if the corresponding vtkMRMLViewNode doesn't exist anymore (since it was just removed), it deletes that viewer widget, which should free the corresponding graphic resources.&lt;br /&gt;
&lt;br /&gt;
Module maintainers should not have to worry about the creation of Slicer Viewer Widgets, as this is taken care of as described above. What a module should do:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeAddedEvent, sent by the MRML scene: if a vtkMRMLViewNode has been added, that means you may have to prepare yourself for allocating the resources you will put in that view (vtkSlicerViewerWidget ),&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeRemovedEvent, sent by the MRML scene: if a vtkMRMLViewNode is being removed, this is definitely the time for your module to remove your resources from that view, and probably free them.&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLViewNode::ActiveModifiedEvent, sent by a vtkMRMLViewNode node (i.e. when a view node is added, it's up to you to add that observer on the view node, when the node is removed, you remove that observer): if a view becomes &amp;quot;active&amp;quot;, it means that it is &amp;quot;selected&amp;quot;. Right now, in dual view mode, the active view is the last one that was interacted with: it has a darker outline. This active event is useful essentially because of the left panel UI. If you have some UI that reflects the parameters used in VolumeRendering for example (say a LUT editor), it is possible you may want to apply those parameters only to the resources pertaining to a specific view.  In any case, when you receive an Active event, your UI is given the opportunity to update the parameters that are only relevant to that specific view.&lt;br /&gt;
&lt;br /&gt;
What is said in that first bullet point is not exactly helping though: vtkMRMLScene::NodeAddedEvent is triggered when a vtkMRMLViewNode is added, but it is still too early for your module to add resources to that view (i.e. the renderers), because the corresponding vtkSlicerViewerWidget  has not been created; this is done in UpdateMain3DViewers(). So even though you may want to listen to NodeAddedEvent to prepare some resources, you still can't add them, no renderers are ready for your actors. What you need is a way to know that the corresponding SlicerViewerWidget has been created. To fix that situation, your module should ultimately:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLViewNode::GraphicalResourcesCreatedEvent,  sent by a vtkMRMLViewNode node (same as #3, it's up to you to add that observer on the view node, by first listening to vtkMRMLScene::NodeAddedEvent). This event carries a pointer to the corresponding vtkSlicerViewerWidget that was just created in UpdateMain3DViewers(). Now seems a good time for you to add your actors to the renderers.&lt;br /&gt;
&lt;br /&gt;
Note that this doesn't necessarily conflict with the idea that a viewer widget, as Jim Miller suggested, could keep track of what is visible or not in its own render window... I guess for the time being we could &lt;br /&gt;
let the modules automatically add their actors to each new view when they are added to the scene, as described above, and then later on we can come up with something to turn the visibility on/off of actors in each viewer...&lt;br /&gt;
&lt;br /&gt;
To sum up:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeAddedEvent and vtkMRMLScene::NodeRemovedEvent on the scene,&lt;br /&gt;
* received vtkMRMLScene::NodeAddedEvent and its a new vtkMRMLViewNode? Allocate your graphical resources (don't add them yet), add vtkMRMLViewNode::GraphicalResourcesCreatedEvent  and vtkMRMLViewNode::ActiveModifiedEvent to this new view node to know when graphical resources have been created for that view (the renderwindow, renderers, etc), and when the view becomes &amp;quot;the active one&amp;quot;,&lt;br /&gt;
* received vtkMRMLViewNode::GraphicalResourcesCreatedEvent? time to add your actors to the corresponding view,&lt;br /&gt;
* received vtkMRMLViewNode::ActiveModifiedEvent? time to refresh your UI in the left panel&lt;br /&gt;
* received vtkMRMLScene::NodeRemovedEvent and it's a vtkMRMLViewNode? Time to remove your resources from that view.&lt;br /&gt;
&lt;br /&gt;
Now of course the choice of allocating resources *per view* depends on the module. One can technically add the same actor to different renderers, but this doesn't always do the trick (especially not for volume rendering). For example, fiducials use vtkFollower actors to make sure labels always face the camera. Since the camera is different for each renderer, this resource will have to be allocated for *each view*. It's likely up to the module to maintain some sort of STL map associating a view to the resources for that view.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
As of Slicer 3.6:&lt;br /&gt;
* there is one 'full featured' 3D viewer, which is the one at the top in the default layout. This is the one where volume rendering, fiducials, ROIs (box widget), and other actions take place,&lt;br /&gt;
* there can be multiple 'secondary' 3D views that have independent cameras but only see the models (essentially just the vtkActors but not widgets or volumes).&lt;br /&gt;
&lt;br /&gt;
All modules that display an actor on screen are technically concerned and need to be revisited to use the new framework. Now that the multi camera/views logic is in the core, it's a matter of letting the module maintainers&lt;br /&gt;
know that they can upgrade their code to use this particular set of functionality (which didn't exist when modules&lt;br /&gt;
like Fiducials, Volume Rendering, etc were first developed).&lt;br /&gt;
&lt;br /&gt;
Modules that need to be upgraded (please keep updating this list):&lt;br /&gt;
* Fiducials&lt;br /&gt;
* Volume Rendering&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer3:Multiple_Cameras&amp;diff=13287</id>
		<title>Slicer3:Multiple Cameras</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer3:Multiple_Cameras&amp;diff=13287"/>
		<updated>2010-04-07T19:58:56Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Goal ==&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
Here are a few pointers related to the new framework. What happens under the hood, and what events developers and module maintainers can intercept to use the new features.&lt;br /&gt;
&lt;br /&gt;
The workflow so far (Slicer 3.6, as of November 2009):&lt;br /&gt;
&lt;br /&gt;
When a vtkMRMLViewNode is created and added to the MRML scene (say by a module, or by the main app, or a third party):&lt;br /&gt;
&lt;br /&gt;
* vtkSlicerApplicationGUI, which listens to vtkMRMLScene::NodeAddedEvent, sees that a new view node has been &lt;br /&gt;
created, and calls vtkSlicerApplicationGUI::OnViewNodeAdded().&lt;br /&gt;
&lt;br /&gt;
* OnViewNodeAdded() adds a few observers to the view node, and if there is no other vtkMRMLViewNode around (i.e. if it's the first one), it is automatically tagged as &amp;quot;Active&amp;quot;. vtkSlicerApplicationGUI::UpdateMain3DViewers() is then called.&lt;br /&gt;
&lt;br /&gt;
* UpdateMain3DViewers(), a fair amount is done here, but the gist is: the function loops over all the vtkMRMLViewNode in the scene, and if it finds out that one doesn't have an associated vtkSlicerViewerWidget yet (i.e. the graphical part that really makes up the view), it allocates and Create()'s one and set its ViewNode ivar to the vtkMRMLViewNode pointer. This is the only place in Slicer3 where vtkSlicerViewerWidget::New() is created (this wasn't the case before, I factorized it). Note that some MRML nodes like vtkMRMLCamera maintain and allocate their VTK counterpart automatically (vtkCamera). This is not the case for vtkMRMLViewNode (I don't know why, but I didn't want to break that for backward compatibility, therefore that design didn't change).&lt;br /&gt;
&lt;br /&gt;
In a similar fashion, vtkSlicerApplicationGUI listens to vtkMRMLScene::NodeRemovedEvent, calls&lt;br /&gt;
vtkSlicerApplicationGUI::OnViewNodeRemoved, which remove previous observers, and calls UpdateMain3DViewers() as well. This function still does what is described above, but also loops over all the vtkSlicerViewerWidget it knows: if the corresponding vtkMRMLViewNode doesn't exist anymore (since it was just removed), it deletes that viewer widget, which should free the corresponding graphic resources.&lt;br /&gt;
&lt;br /&gt;
Module maintainers should not have to worry about the creation of Slicer Viewer Widgets, as this is taken care of as described above. What a module should do:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeAddedEvent, sent by the MRML scene: if a vtkMRMLViewNode has been added, that means you may have to prepare yourself for allocating the resources you will put in that view (vtkSlicerViewerWidget ),&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeRemovedEvent, sent by the MRML scene: if a vtkMRMLViewNode is being removed, this is definitely the time for your module to remove your resources from that view, and probably free them.&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLViewNode::ActiveModifiedEvent, sent by a vtkMRMLViewNode node (i.e. when a view node is added, it's up to you to add that observer on the view node, when the node is removed, you remove that observer): if a view becomes &amp;quot;active&amp;quot;, it means that it is &amp;quot;selected&amp;quot;. Right now, in dual view mode, the active view is the last one that was interacted with: it has a darker outline. This active event is useful essentially because of the left panel UI. If you have some UI that reflects the parameters used in VolumeRendering for example (say a LUT editor), it is possible you may want to apply those parameters only to the resources pertaining to a specific view.  In any case, when you receive an Active event, your UI is given the opportunity to update the parameters that are only relevant to that specific view.&lt;br /&gt;
&lt;br /&gt;
What is said in that first bullet point is not exactly helping though: vtkMRMLScene::NodeAddedEvent is triggered when a vtkMRMLViewNode is added, but it is still too early for your module to add resources to that view (i.e. the renderers), because the corresponding vtkSlicerViewerWidget  has not been created; this is done in UpdateMain3DViewers(). So even though you may want to listen to NodeAddedEvent to prepare some resources, you still can't add them, no renderers are ready for your actors. What you need is a way to know that the corresponding SlicerViewerWidget has been created. To fix that situation, your module should ultimately:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLViewNode::GraphicalResourcesCreatedEvent,  sent by a vtkMRMLViewNode node (same as #3, it's up to you to add that observer on the view node, by first listening to vtkMRMLScene::NodeAddedEvent). This event carries a pointer to the corresponding vtkSlicerViewerWidget that was just created in UpdateMain3DViewers(). Now seems a good time for you to add your actors to the renderers.&lt;br /&gt;
&lt;br /&gt;
Note that this doesn't necessarily conflict with the idea that a viewer widget, as Jim Miller suggested, could keep track of what is visible or not in its own render window... I guess for the time being we could &lt;br /&gt;
let the modules automatically add their actors to each new view when they are added to the scene, as described above, and then later on we can come up with something to turn the visibility on/off of actors in each viewer...&lt;br /&gt;
&lt;br /&gt;
To sum up:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeAddedEvent and vtkMRMLScene::NodeRemovedEvent on the scene,&lt;br /&gt;
* received vtkMRMLScene::NodeAddedEvent and its a new vtkMRMLViewNode? Allocate your graphical resources (don't add them yet), add vtkMRMLViewNode::GraphicalResourcesCreatedEvent  and vtkMRMLViewNode::ActiveModifiedEvent to this new view node to know when graphical resources have been created for that view (the renderwindow, renderers, etc), and when the view becomes &amp;quot;the active one&amp;quot;,&lt;br /&gt;
* received vtkMRMLViewNode::GraphicalResourcesCreatedEvent? time to add your actors to the corresponding view,&lt;br /&gt;
* received vtkMRMLViewNode::ActiveModifiedEvent? time to refresh your UI in the left panel&lt;br /&gt;
* received vtkMRMLScene::NodeRemovedEvent and it's a vtkMRMLViewNode? Time to remove your resources from that view.&lt;br /&gt;
&lt;br /&gt;
Now of course the choice of allocating resources *per view* depends on the module. One can technically add the same actor to different renderers, but this doesn't always do the trick (especially not for volume rendering). For example, fiducials use vtkFollower actors to make sure labels always face the camera. Since the camera is different for each renderer, this resource will have to be allocated for *each view*. It's likely up to the module to maintain some sort of STL map associating a view to the resources for that view.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
As of Slicer 3.6:&lt;br /&gt;
* there is one 'full featured' 3D viewer, which is the one at the top in the default layout. This is the one where volume rendering, fiducials, ROIs (box widget), and other actions take place,&lt;br /&gt;
* there can be multiple 'secondary' 3D views that have independent cameras but only see the models (essentially just the vtkActors but not widgets or volumes).&lt;br /&gt;
&lt;br /&gt;
All modules that display an actor on screen are technically concerned and need to be revisited to use the new framework. Now that the multi camera/views logic is in the core, it's a matter of letting the module maintainers&lt;br /&gt;
know that they can upgrade their code to use this particular set of functionality (which didn't exist when modules&lt;br /&gt;
like Fiducials, Volume Rendering, etc were first developed).&lt;br /&gt;
&lt;br /&gt;
Modules that need to be upgraded (please keep updating this list):&lt;br /&gt;
* Fiducials&lt;br /&gt;
* Volume Rendering&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Main_Page&amp;diff=13286</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Main_Page&amp;diff=13286"/>
		<updated>2010-04-07T19:43:55Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Welcome to the 3D Slicer Wiki pages!=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Welcome to the Slicer Wiki Home Page.&lt;br /&gt;
&lt;br /&gt;
'''How to use this site:'''  &lt;br /&gt;
* The main [http://www.slicer.org slicer.org] pages provide a guided tour to the application, training materials, and the development community.  New users should start there because we try to keep it organized and up to date.&lt;br /&gt;
* These wiki pages are more free-form, with notes and reference pages that help support developers and users across multiple sites.  You will find good information on the wiki, but it's possible that it's out of date or describes features that are still in the planning phase.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;200px&amp;quot; perrow=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
Image:ExtractSubvolumeROI_gallery.png|[[Modules:ExtractSubvolumeROI-Documentation-3.5|ExtractSubvolumeROI is a new GUI module in Slicer 3.5]] that allows to extract and resample an arbitrary parallelepiped shaped region from a larger scalar image volume.&lt;br /&gt;
Image:Qt-KWW-Transforms-2009-11-24.png|Frame from a movie showing Qt Transforms module. See whole movie [http://www.youtube.com/watch?v=oJFSJWBUFEI on youtube] or download [[file:QSlicerTransformsModule.ogg]].&lt;br /&gt;
Image:VolumeRenderingICPE.png|Volume rendering: Illustrative Context Preserving Exploration&lt;br /&gt;
Image:Dual 3D View.png|Multiple 3D rendering windows&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More images at the [[Slicer3:VisualBlog| Slicer3 Visual Blog...]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Slicer3 is:&lt;br /&gt;
* A cross-platform end user application for analyzing and visualizing medical images.&lt;br /&gt;
* A collection of Open Source libraries for developing and deploying new image computing technologies.&lt;br /&gt;
* Intended to replace the venerable Slicer2 (see [[Slicer3:Transition_from_Slicer2 |information on the transition]])&lt;br /&gt;
* An algorithm development platform with a powerful new [[Slicer3:Execution_Model_Documentation| Execution Model]] to facilitate creation of new modules.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==News==&lt;br /&gt;
* April 2010&lt;br /&gt;
* Feature Freeze month!  Developers are working on bug fixes, documentation, and performance enhancement.&lt;br /&gt;
* Check out [http://picasaweb.google.com/107065747472066371420 Andras Jakab's impressive surgery planning images]&lt;br /&gt;
* March 2010&lt;br /&gt;
** New infrastructure software is rapidly evolving in the context of the [http://www.na-mic.org/Wiki/index.php/Events:CTK-Pre-Hackfest-2010 Common Toolkit working meetings].&lt;br /&gt;
** Planning underway for [[Slicer3:3.6Release|release 3.6 of 3D Slicer]]&lt;br /&gt;
** [http://www.medfloss.org/node/263 A slicer review on medfloss]&lt;br /&gt;
** [http://packages.debian.org/search?keywords=slicer&amp;amp;searchon=names&amp;amp;exact=1&amp;amp;suite=all&amp;amp;section=all slicer's debian package page]&lt;br /&gt;
** [https://launchpad.net/ubuntu/+source/slicer/ slicer ubuntu package] that can be installed with the [http://www.ubuntu.com/testing/lucid/alpha3 alpha version of Ubuntu 10.04]&lt;br /&gt;
** A [[Slicer3:Debian | page with information about installing slicer3 on Debian]] has been started.&lt;br /&gt;
** We are starting to make plans for [[Slicer4|3D Slicer version 4 (also known as Slicer4)]].  A big step!&lt;br /&gt;
* January 2010&lt;br /&gt;
** [http://wiki.na-mic.org/Wiki/index.php/2010_Winter_Project_Week 10th project week]&lt;br /&gt;
* December 2009&lt;br /&gt;
** Lots of activity around the [[Slicer3:Developers:Projects:QtSlicer| Port of Slicer to Qt]]&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/Dec-2009-SlicerAIMBrainstorming New Annotation Tools are in the works]&lt;br /&gt;
* November 2009&lt;br /&gt;
**Seb Barre from Kitware has taken the lead in [[Slicer3:Multiple Cameras|adding multiple cameras]] support to Slicer 3. The work is currently focused on multiple cameras and multiple views, but only one scene. The nightly build contains a new module, called cameras. Jim Miller has added a new layout, called Dual 3D Layout. [[Image:Dual 3D View.png|thumb|200px|Dual 3D layout]].&lt;br /&gt;
&lt;br /&gt;
* October 2009&lt;br /&gt;
** Test of [http://wiki.slicer.org/slicerWiki/index.php?title=Main_Page&amp;amp;useskin=chick mobile friendly wiki skin]&lt;br /&gt;
*September 2009&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/Sept-2009-SlicerWidgetsBrainstorm Serious work is beginning] on a [[Qt_in_Slicer3|Slicer3 port to Qt]].  &lt;br /&gt;
** Attila Nagy and his colleagues created a [http://www.orl.szote.u-szeged.hu/~attila/presentations.html very nice set of presentations and animations] with slicer to illustrate 3D reconstruction as applied to otorhinolaryngology.  (See [[Nagy-videos-2009:Notes|Notes]]).&lt;br /&gt;
*August 2009&lt;br /&gt;
** New images in [[Slicer3:VisualBlog|the visual blog]] show integration of slicer and [http://www.bioimagesuite.org BioImageSuite].&lt;br /&gt;
* July 2009&lt;br /&gt;
** Several bug fixes are being rolled into a 3.4.1 patch release, expected for beginning of August&lt;br /&gt;
* June 2009&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/2009_Summer_Project_Week NA-MIC Summer Project Week] was a great success! &lt;br /&gt;
** New documentation is available, thanks to the [http://www.na-mic.org/Wiki/index.php/Events:TutorialContestJune2009 Summer 2009 Tutorial Contest]&lt;br /&gt;
* May 2009&lt;br /&gt;
** [[Announcements:Slicer3.4|Slicer 3.4 release]]&lt;br /&gt;
** The [http://viewvc.slicer.org/branches/Slicer-3-4/ 3.4 release branch has been created in subversion] &lt;br /&gt;
** [http://tinyurl.com/cu9bzp A punch list of 3.4 bugs] is being maintained on the Mantis Bug Tracker.&lt;br /&gt;
* March 2009&lt;br /&gt;
** Development of slicer3.4 is still under way.  To check the status, go to the bug tracker and search for the tag &amp;quot;3.4 Targeted fix&amp;quot;.  Our plan is to fix anything with that tag before branching the release.  http://na-mic.org/Mantis/main_page.php  The svn trunk for slicer3 is still in &amp;quot;feature freeze&amp;quot; mode, meaning that only fixes should be checked in.  Any new development should occur in svn branches for now.&lt;br /&gt;
** Developers, please be sure to apply the &amp;quot;3.4 Targeted fix&amp;quot; to anything you are working on for the release.&lt;br /&gt;
* January 2009&lt;br /&gt;
** A product release of Slicer 3.4 is scheduled for Feb/March&lt;br /&gt;
** There will be a code freeze on Feb 4, 2009 &lt;br /&gt;
** Slicer3 and related research project were highlighted and demoed as part of the External Advisory Board meeting of the [http://nac.spl.harvard.edu Neuroimage Analysis Center].&lt;br /&gt;
* December 2008&lt;br /&gt;
** Andrew Farke posted [http://openpaleo.blogspot.com/2008/12/3d-slicer-tutorial-part-iv.html some excellent tutorials] on the use of 3D Slicer in paleontology research.&lt;br /&gt;
** A training course on [http://www.na-mic.org/Wiki/index.php/Events:RSNA2008 use of 3D Slicer by Radiologists] was held at [http://rsna2008.rsna.org/ RSNA] in Chicago.&lt;br /&gt;
** [http://www.ncigt.org NCIGT] is hosting a [http://www.na-mic.org/Wiki/index.php/2008_IGT_Project_Week Project Week] for developing Image Guided Therapy software that features many slicer projects.&lt;br /&gt;
* September 2008&lt;br /&gt;
** Andras Jakab won second place in [http://www.kitware.com/viscontest/medicalviswinner.html Kitware's medical image visualization contest!].  The image combines slice viewing, models, volume rendering, and tractography applied to a gamma knife neurooncology radiotherapy planning case.  Andras used slicer's registration tools to fuse CT and diffusion MR into a multimodal scene.&lt;br /&gt;
[[Image:Andras-Jakab-brainconnectivity.png|thumb|200px|Andras Jakab's award winning slicer image.]]&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/Miccai_2008_Tutorial A NA-MIC Workshop at MICCAI] addressed the creation of ITK-based command line modules for 3D Slicer.&lt;br /&gt;
** Slicer user Attila Nagy presented on Slicer3 for inner ear imaging ([http://www.orl.szote.u-szeged.hu/~attila/NagyA-2008-Miskolc.ppt Slides - Hungarian])&lt;br /&gt;
** Attila also provided patches to build Slicer3 and most of Slicer2 using the latest versions of Solaris and the optimized Sun C++ compilers.&lt;br /&gt;
* August 2008 &lt;br /&gt;
**[http://www.na-mic.org/Wiki/index.php/Events:August_2008_NCBC_AHM  August 14, 2008: NCBC 2008 Science Fair &amp;quot;Three ways of using the NA-MIC Kit&amp;quot; ]&lt;br /&gt;
**[http://www.na-mic.org/Wiki/index.php/Events:NCI_Workshop_August_2008 August 15, 2008: NCI Workshop - August 15, 2008 ]&lt;br /&gt;
[[Image:NITRC logo Listed.jpg|thumb|200px|http://www.nitrc.org/projects/slicer/]]&lt;br /&gt;
* July 2008&lt;br /&gt;
** [http://www.airwayinspector.org Airway Inspector] is a powerful tool for lung image analysis build on slicer2.  A port to slicer3 is getting under way in the next few weeks and is expected to take about 6 months.&lt;br /&gt;
** Slicer and the NA-MIC software environment were presented as part of the [https://www.ipam.ucla.edu/schedule.aspx?pc=mbi2008 UCLA Institute for Pure and Applied Mathematics Summer School on Mathematics and Brain Imaging].&lt;br /&gt;
** A [http://www.na-mic.org/Wiki/index.php/2008_July_Slicer_IGT_VV_Link_Session_II very productive working meeting] between researchers at BWH and Yale resulted in successful connection of Slicer3 to the BrainLab commercial image guided neurosurgery system.&lt;br /&gt;
* June 2008&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/2008_June_Workshop_Germany June 16-17, 2008: Training Event in Germany]&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/2008_Summer_Project_Week June 23-27, 2008, Summer Project Week]&lt;br /&gt;
* May 2008&lt;br /&gt;
**[[Announcements:Slicer3.2|Slicer 3.2 release]]&lt;br /&gt;
**Slicer3 included in review paper on  [http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=2039808 &amp;quot;Rapid Development of Medical Imaging Tools with Open Source Libraries&amp;quot;]&lt;br /&gt;
* April 2008&lt;br /&gt;
**[http://www.ohloh.net/p/3376/factoids Slicer rated in the top 2% of project teams in Ohloh]&lt;br /&gt;
**[[Slicer3:Slicer3_Workshop_UNC_Chapel_Hill_2008| April 14, 2008: Slicer 3 User and Developer Workshop, UNC Chapel Hill]]&lt;br /&gt;
* March 2008&lt;br /&gt;
**A new [http://en.wikipedia.org/wiki/3DSlicer 3D Slicer Wikipedia entry] has been created.&lt;br /&gt;
* Feb 2008&lt;br /&gt;
**February 20th, 2008, [[Slicer3:Spring-2008-User-Training| Spring 2008 Slicer3 User Training Workshop ]] in the SPL at 1249 Boylston St. Boston.&lt;br /&gt;
* Jan 2008&lt;br /&gt;
**[[tutorialwishlist|Wishlist for tutorials]]&lt;br /&gt;
**Lots of Slicer development activity as part of '''[http://www.na-mic.org/Wiki/index.php/AHM_2008  NA-MIC All Hands Meeting] and [http://www.na-mic.org/Wiki/index.php/2008_Winter_Project_Week Winter Project Week]&lt;br /&gt;
* December 2007&lt;br /&gt;
**A three-day retreat for [http://www.na-mic.org/Wiki/index.php/2007_December_Slicer_IGT_Programming  Slicer in Image Guided Therapy] was held in Boston.&lt;br /&gt;
* November 2007&lt;br /&gt;
** New builds are now available for [http://www.slicer.org/DownloadSlicer.php/Snapshots/linux-x86_64/Slicer3-3.0.2007-11-21-linux-x86_64.sh Linux 64], [http://www.slicer.org/DownloadSlicer.php/Snapshots/linux-x86/Slicer3-3.0.2007-11-21-linux-x86.sh Linux 32], [http://www.slicer.org/DownloadSlicer.php/Snapshots/win32/Slicer3-3.0.2007-11-19-win32.exe Windows], [http://www.slicer.org/DownloadSlicer.php/Snapshots/darwin-ppc/Slicer3-3.0.2007-11-19-darwin-ppc.sh Darwin PPC], and [http://www.slicer.org/DownloadSlicer.php/Snapshots/darwin-x86/Slicer3-3.0.2007-11-19-darwin-x86.sh Darwin x86]&lt;br /&gt;
* June 2007&lt;br /&gt;
** Lots of Slicer3 work at [http://wiki.na-mic.org/Wiki/index.php/Engineering:Programming_Events the Project Weeks]&lt;br /&gt;
* March 2007&lt;br /&gt;
** New Image Guided Therapy (IGT) functionality for tracking surgical instruments added by developers working at the [http://www.ncigt.org National Center for IGT].&lt;br /&gt;
* February 2007&lt;br /&gt;
** Feb 7-8, 2007. [[Slicer3:MiniRetreat February 7-8, 2007| Slicer3 Mini-Retreat, Boston]]&lt;br /&gt;
** Resulted in the implementation of a [[Slicer3::Python | Python interface]] to Slicer3.&lt;br /&gt;
&lt;br /&gt;
* January 2007&lt;br /&gt;
** Slicer3 developers are getting together in Salt Lake City for a &amp;quot;programming half-week&amp;quot; as part of the [http://wiki.na-mic.org/Wiki/index.php/AHM_2007 NA-MIC All-Hands Meeting]&lt;br /&gt;
** [[Slicer3:Developers#Information_for_Developers| Lots of new developer documentation added!]]&lt;br /&gt;
** Slicer3 beta released&lt;br /&gt;
** [http://na-mic.org/Mantis/main_page.php New bug tracker installed]&lt;br /&gt;
* December 2006&lt;br /&gt;
** There was a big meltdown of the na-mic.org server in December, and some things were lost including wiki history, slicer3 bug tracker and doxygen, and some of the older download files.  Please bear with us as we pick ourselves up and carry on.&lt;br /&gt;
* November 2006&lt;br /&gt;
** [[Slicer3_Alpha_builds| Slicer3 Alpha builds]] available for Linux (32 and 64 bit) and windows!&lt;br /&gt;
* October 2006&lt;br /&gt;
** Slicer3 development version shown at the [http://www.nbirn.net/press/current/ahm2006.shtm BIRN All Hands Meeting] as the platform for the BIRN Query Atlas Project and overall visualization issue in BIRN. See [[Media:BIRNFIPS2Slicer3-2006-10-24.ppt| these slides for more information]].&lt;br /&gt;
* September 2006:&lt;br /&gt;
** [http://wiki.na-mic.org/Wiki/index.php/2006_September_Slicer3_Update Development meeting at BWH September 19, 20.]&lt;br /&gt;
* July, 2006:&lt;br /&gt;
** There was active development of Slicer3 at and around the [http://wiki.na-mic.org/Wiki/index.php/2006_Programming/Project_Week_MIT NA-MIC Programming/Project week].&lt;br /&gt;
** New Slicer3 wiki page organization is under way. Please send feedback to the [mailto:slicer-devel@massmail.spl.harvard.edu slicer-developers mailing list].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*[[Editing Guide:Getting Started|Wiki Editing Guide]]&lt;br /&gt;
&lt;br /&gt;
=== For Wiki Administration ===&lt;br /&gt;
&lt;br /&gt;
* [[Special:Userlogin|Create user account]]&lt;br /&gt;
* [[Special:Listusers|Users List]]&lt;br /&gt;
* Authorized users can commit edited web pages through [https://www.slicer.org/slicerWikiWeb/ slicer's wiki2web interface]&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer3:Multiple_Cameras&amp;diff=13283</id>
		<title>Slicer3:Multiple Cameras</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer3:Multiple_Cameras&amp;diff=13283"/>
		<updated>2010-04-07T19:20:06Z</updated>

		<summary type="html">&lt;p&gt;Barre: Created page with '== Logic ==  Here are a few pointers related to the new framework. What happens under the hood, and what events developers and module maintainers can intercept to use the new fea…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Logic ==&lt;br /&gt;
&lt;br /&gt;
Here are a few pointers related to the new framework. What happens under the hood, and what events developers and module maintainers can intercept to use the new features.&lt;br /&gt;
&lt;br /&gt;
The workflow so far (Slicer 3.6, as of November 2009):&lt;br /&gt;
&lt;br /&gt;
When a vtkMRMLViewNode is created and added to the MRML scene (say by a module, or by the main app, or a third party):&lt;br /&gt;
&lt;br /&gt;
* vtkSlicerApplicationGUI, which listens to vtkMRMLScene::NodeAddedEvent, sees that a new view node has been &lt;br /&gt;
created, and calls vtkSlicerApplicationGUI::OnViewNodeAdded().&lt;br /&gt;
&lt;br /&gt;
* OnViewNodeAdded() adds a few observers to the view node, and if there is no other vtkMRMLViewNode around (i.e. if it's the first one), it is automatically tagged as &amp;quot;Active&amp;quot;. vtkSlicerApplicationGUI::UpdateMain3DViewers() is then called.&lt;br /&gt;
&lt;br /&gt;
* UpdateMain3DViewers(), a fair amount is done here, but the gist is: the function loops over all the vtkMRMLViewNode in the scene, and if it finds out that one doesn't have an associated vtkSlicerViewerWidget yet (i.e. the graphical part that really makes up the view), it allocates and Create()'s one and set its ViewNode ivar to the vtkMRMLViewNode pointer. This is the only place in Slicer3 where vtkSlicerViewerWidget::New() is created (this wasn't the case before, I factorized it). Note that some MRML nodes like vtkMRMLCamera maintain and allocate their VTK counterpart automatically (vtkCamera). This is not the case for vtkMRMLViewNode (I don't know why, but I didn't want to break that for backward compatibility, therefore that design didn't change).&lt;br /&gt;
&lt;br /&gt;
In a similar fashion, vtkSlicerApplicationGUI listens to vtkMRMLScene::NodeRemovedEvent, calls&lt;br /&gt;
vtkSlicerApplicationGUI::OnViewNodeRemoved, which remove previous observers, and calls UpdateMain3DViewers() as well. This function still does what is described above, but also loops over all the vtkSlicerViewerWidget it knows: if the corresponding vtkMRMLViewNode doesn't exist anymore (since it was just removed), it deletes that viewer widget, which should free the corresponding graphic resources.&lt;br /&gt;
&lt;br /&gt;
Module maintainers should not have to worry about the creation of Slicer Viewer Widgets, as this is taken care of as described above. What a module should do:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeAddedEvent, sent by the MRML scene: if a vtkMRMLViewNode has been added, that means you may have to prepare yourself for allocating the resources you will put in that view (vtkSlicerViewerWidget ),&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeRemovedEvent, sent by the MRML scene: if a vtkMRMLViewNode is being removed, this is definitely the time for your module to remove your resources from that view, and probably free them.&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLViewNode::ActiveModifiedEvent, sent by a vtkMRMLViewNode node (i.e. when a view node is added, it's up to you to add that observer on the view node, when the node is removed, you remove that observer): if a view becomes &amp;quot;active&amp;quot;, it means that it is &amp;quot;selected&amp;quot;. Right now, in dual view mode, the active view is the last one that was interacted with: it has a darker outline. This active event is useful essentially because of the left panel UI. If you have some UI that reflects the parameters used in VolumeRendering for example (say a LUT editor), it is possible you may want to apply those parameters only to the resources pertaining to a specific view.  In any case, when you receive an Active event, your UI is given the opportunity to update the parameters that are only relevant to that specific view.&lt;br /&gt;
&lt;br /&gt;
What is said in that first bullet point is not exactly helping though: vtkMRMLScene::NodeAddedEvent is triggered when a vtkMRMLViewNode is added, but it is still too early for your module to add resources to that view (i.e. the renderers), because the corresponding vtkSlicerViewerWidget  has not been created; this is done in UpdateMain3DViewers(). So even though you may want to listen to NodeAddedEvent to prepare some resources, you still can't add them, no renderers are ready for your actors. What you need is a way to know that the corresponding SlicerViewerWidget has been created. To fix that situation, your module should ultimately:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLViewNode::GraphicalResourcesCreatedEvent,  sent by a vtkMRMLViewNode node (same as #3, it's up to you to add that observer on the view node, by first listening to vtkMRMLScene::NodeAddedEvent). This event carries a pointer to the corresponding vtkSlicerViewerWidget that was just created in UpdateMain3DViewers(). Now seems a good time for you to add your actors to the renderers.&lt;br /&gt;
&lt;br /&gt;
Note that this doesn't necessarily conflict with the idea that a viewer widget, as Jim Miller suggested, could keep track of what is visible or not in its own render window... I guess for the time being we could &lt;br /&gt;
let the modules automatically add their actors to each new view when they are added to the scene, as described above, and then later on we can come up with something to turn the visibility on/off of actors in each viewer...&lt;br /&gt;
&lt;br /&gt;
To sum up:&lt;br /&gt;
&lt;br /&gt;
* listen to vtkMRMLScene::NodeAddedEvent and vtkMRMLScene::NodeRemovedEvent on the scene,&lt;br /&gt;
* received vtkMRMLScene::NodeAddedEvent and its a new vtkMRMLViewNode? Allocate your graphical resources (don't add them yet), add vtkMRMLViewNode::GraphicalResourcesCreatedEvent  and vtkMRMLViewNode::ActiveModifiedEvent to this new view node to know when graphical resources have been created for that view (the renderwindow, renderers, etc), and when the view becomes &amp;quot;the active one&amp;quot;,&lt;br /&gt;
* received vtkMRMLViewNode::GraphicalResourcesCreatedEvent? time to add your actors to the corresponding view,&lt;br /&gt;
* received vtkMRMLViewNode::ActiveModifiedEvent? time to refresh your UI in the left panel&lt;br /&gt;
* received vtkMRMLScene::NodeRemovedEvent and it's a vtkMRMLViewNode? Time to remove your resources from that view.&lt;br /&gt;
&lt;br /&gt;
Now of course the choice of allocating resources *per view* depends on the module. One can technically add the same actor to different renderers, but this doesn't always do the trick (especially not for volume rendering). For example, fiducials use vtkFollower actors to make sure labels always face the camera. Since the camera is different for each renderer, this resource will have to be allocated for *each view*. It's likely up to the module to maintain some sort of STL map associating a view to the resources for that view.&lt;br /&gt;
&lt;br /&gt;
== What remains to be done ==&lt;br /&gt;
&lt;br /&gt;
As of Slicer 3.6:&lt;br /&gt;
* there is one 'full featured' 3D viewer, which is the one at the top in the default layout. This is the one where volume rendering, fiducials, ROIs (box widget), and other actions take place,&lt;br /&gt;
* there can be multiple 'secondary' 3D views that have independent cameras but only see the models (essentially just the vtkActors but not widgets or volumes).&lt;br /&gt;
&lt;br /&gt;
All modules that display an actor on screen are technically concerned and need to be revisited to use the new framework. Now that the multi camera/views logic is in the core, it's a matter of letting the module maintainers&lt;br /&gt;
know that they can upgrade their code to use this particular set of functionality (which didn't exist when modules&lt;br /&gt;
like Fiducials, Volume Rendering, etc were first developed).&lt;br /&gt;
&lt;br /&gt;
Modules that need to be upgraded (please keep updating this list):&lt;br /&gt;
- Fiducials&lt;br /&gt;
- Volume Rendering&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer3:GPURayCaster&amp;diff=11786</id>
		<title>Slicer3:GPURayCaster</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer3:GPURayCaster&amp;diff=11786"/>
		<updated>2010-01-11T20:36:32Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* GPU Ray Caster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GPU Ray Caster ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This project involves moving the GPU Ray Caster from VTKEdge into VTK, then making this volume mapper available from Slicer. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Overview of GPU Ray Casting'''&lt;br /&gt;
&lt;br /&gt;
VTK supports several volume rendering techniques for both regular, rectilinear grids (vtkImageData), and tetrahedral meshes (represented by vtkUnstructuredGrid). Some of these volume mappers primarily utilize the CPU (relying on the GPU only for the final display of the resulting image), while other mappers make use of the resources available on the GPU such as 2D and 3D texture memory and texture mapping functionality. The new vtkKWEGPURayCastMapper in VTKEdge uses the latest advancements available on recent GPUs including fragment programs with conditional and loop operations, multi-texturing and frame buffer objects in order to deliver significantly improved performance over the CPU-based ray casting, while still maintaining high rendering quality.&lt;br /&gt;
&lt;br /&gt;
The basic ray casting concept is quite simple. For each pixel in the final image a ray is traced from the camera through the pixel and into the scene. As the ray passes through a volume in the scene the scalar data is sampled along the ray and those samples are processed and combined to form a final RGBA result for the pixel. The implementation of the ray casting algorithm within an object-oriented visualization system, such as VTK, that utilizes object-order rendering (polygonal projection) for other data objects in the scene is a bit more complex, requiring the ray casting process to consider the current state of the frame buffer in order to intermix the volume data with other geometric data in the scene. In our GPU implementation of ray casting, the volume data is stored on the GPU in 3D texture memory. Ray casting is initiated by rendering a polygonal representation of the outer surface of the volume. A fragment program is executed at each pixel to traverse the data and determine a resulting value that is combined with the existing pixel value in the frame buffer computed during the opaque geometry phase of rendering.&lt;br /&gt;
&lt;br /&gt;
For more detailed information, please see the July 2008 edition of The Source, which can be found here: http://kitware.com/products/archive/kitware_quarterly0708.pdf.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Integration into VTK'''&lt;br /&gt;
&lt;br /&gt;
The GPU Ray Caster was initially funded by the following SBIR projects:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Visualization of Massive Multivariate AMR Data&amp;quot;&lt;br /&gt;
National Science Foundation&lt;br /&gt;
Contract Number OII-0548729 &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Rapid, Hardware Accelerated, Large Data Visualization&amp;quot;&lt;br /&gt;
Department of Defense / Army Research Laboratory&lt;br /&gt;
Contract Number W911NF-06-C-0179&lt;br /&gt;
&lt;br /&gt;
The output of these projects was a new toolkit under GPL terms called VTKEdge. As part of this project, the GPU Ray Caster will be moved out of the VTKEdge toolkit into the BSD licensed Visualization Toolkit (VTK). In the process, the names of the classes will be changed to follow VTK conventions. &lt;br /&gt;
&lt;br /&gt;
This relocation is currently in process and is expected to be complete by January 11th. The new classes will be located in the VolumeRendering kit of VTK.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Integration into Slicer'''&lt;br /&gt;
&lt;br /&gt;
The plan is to review the current Volume Renderer module and work with Yanling Liu &amp;lt;vrnova@gmail.com&amp;gt; and&lt;br /&gt;
Alex Yarmarkovich &amp;lt;alexy@bwh.harvard.edu&amp;gt; to integrate the new mappers to the current Volume Rendering GUI, so that they can be selected at run-time.&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Qt_in_Slicer3&amp;diff=10700</id>
		<title>Qt in Slicer3</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Qt_in_Slicer3&amp;diff=10700"/>
		<updated>2009-09-16T17:20:27Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Considerations and Open Questions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page captures the design considerations about moving Slicer3 from KWWidgets to [http://qt.nokia.com/ Qt].  As of August 2009 there are no concrete plans for a switch; however there is significant momentum around Qt as an open source technology and interest in making it available to the Slicer community.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
When Slicer3 was being designed in 2004 Qt was available only under the GPL license or a commercial (pay) license (See [http://en.wikipedia.org/wiki/Qt_%28toolkit%29 the wikipedia discussion]) and neither license option was acceptable to the community.  In March 2009 Qt 4.5 was released under the LGPL license and became a possible technology for use in Slicer.&lt;br /&gt;
&lt;br /&gt;
Slicer3 is implemented using [http://www.kwwidgets.org KWWidgets] which has proven to be extremely capable and robust.  However, due to the small size of the developer team for KWWidgets Kitware has been clear that it will not be able to compete with the features being added to Qt and is in fact adopting Qt for many of its internal projects (see, for example, [http://paraview.org ParaView] which migrated to Qt over the past several years).&lt;br /&gt;
&lt;br /&gt;
==Experiments==&lt;br /&gt;
[[Image:Slicer3.5+Qt+Python-Test-2009-08-27.png|thumb|right|Screenshot from a version of slicer that has Qt accessible from the python console.]]&lt;br /&gt;
In August of 2009 several members of the slicer development team have been learning about Qt and reviewing options.  Things that are currently working:&lt;br /&gt;
* Qt and KWWidgets can co-exist in same application environment (in different top level windows).&lt;br /&gt;
* Qt widgets interfaces can be assembled using the QtDesigner, C++, or python.&lt;br /&gt;
* It is feasible to create slicer widgets that use Qt (e.g. a NodeSelector widget).&lt;br /&gt;
&lt;br /&gt;
Overall the experience has been positive but the experiments have shown that there will be a significant amount of programming work to be done for each part of the interface.  Most of the work is probably best characterized as &amp;quot;easy but time consuming&amp;quot;.  The net result of converting is expected to be positive but it is likely to be several years for there to be a payoff in terms of overall increased developer productivity and improved functionality of the overall package.&lt;br /&gt;
&lt;br /&gt;
==Development Plan Option for Transition to Qt==&lt;br /&gt;
&lt;br /&gt;
The following is a summary of the work to be done organized in a more-or-less priority order that would allow a transition in-place of functionality from KWW to Qt.&lt;br /&gt;
&lt;br /&gt;
# Configure CPack to include Qt libraries and turn on Qt support by default in nightly builds of slicer&lt;br /&gt;
# Create prototype modules built using Qt (these would appear in a distinct top level window from the rest of slicer.  The size and position would be under programatic control to make the two interface somewhat unified).&lt;br /&gt;
# Migrate the vtkSlicerViewerWidget, vtkSlicerSliceControllerWidget, and vtkSlicerSliceWidget from KWW to Qt.  This would allow the right side (2D/3D viewers) of the interface to exist in Qt with the left side (module interfaces) to exist in KWWidgets.&lt;br /&gt;
# Migrate interfaces from modules and left side functions into Qt&lt;br /&gt;
## the menu bar, tool bar, modules menu, module search and history controls&lt;br /&gt;
## the CommandLineModuleGUI (so CLI modules will work in Qt)&lt;br /&gt;
## the &amp;quot;Manipulate Slice Views&amp;quot; and &amp;quot;Manipulate 3D View&amp;quot; controls&lt;br /&gt;
# Transition other dialogs and modules to Qt&lt;br /&gt;
## Add Data, Add Volume, Save, Extension Wizard, Application Settings, Cache &amp;amp; Remote I/O Manager, Tcl/Python Interactors, ErrorLog Dialog, Keyboard Shortcuts...&lt;br /&gt;
## Core Modules: Colors, Data, Editor, Fiducials, Measurements, Models, ROI, SlicerWelcome, Slices, Transforms, Volume Rendering, Volumes&lt;br /&gt;
## Application Modules: Change Tracker, IA_FEMesh, Qdec, FetchMI, Query Atlas, AC/PC Transform, ModelMirror, EMSegment, LabelStatistics, Tractography, Fiber Bundles, NeuroNav, OpenIGTLink IF, ProstateNav, Clip Model, Extract Subvolume ROI, 4D Volume, 4D Analysis.&lt;br /&gt;
## Extension Modules and DBP Projects: Perk Station, VMTK Vessel Tools, others...&lt;br /&gt;
# Remove KWW from the builds and do a new release.&lt;br /&gt;
&lt;br /&gt;
==Slicer's KWWidgets-based GUI==&lt;br /&gt;
===Statistics===&lt;br /&gt;
* There are '''3309''' KWWidgets instances created in slicer core and modules (calls to New)&lt;br /&gt;
* These calls are from '''123''' different KWWidget classes (including 'pure' KW classes in slicer that only depend on vtkKW and not MRML or other slicer code) &lt;br /&gt;
* '''37''' KKWidgets subclasses are vtkKWMimx classes in the Meshing module&lt;br /&gt;
* There are '''105''' classes that subclass from KWWidget classes&lt;br /&gt;
&lt;br /&gt;
See: [[Slicer3:KKWidgets_being_used| this list of KWWidgets being used in Slicer3]].&lt;br /&gt;
&lt;br /&gt;
''Statistics methods:  Calculations based on slicer3 trunk revision 10456 2009-09-10.  This does not include Tcl or Python code or extension modules (they use basically the same widgets).''&lt;br /&gt;
&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep New | wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep &amp;quot;::New&amp;quot; | tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;=&amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;&amp;gt;&amp;quot; &amp;quot;\n&amp;quot; | grep -v &amp;quot;^//&amp;quot; | grep &amp;quot;vtkKW.*New&amp;quot; | sed 's/::New.*//' | sort | uniq | wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep &amp;quot;::New&amp;quot; | tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;=&amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;&amp;gt;&amp;quot; &amp;quot;\n&amp;quot; | grep -v &amp;quot;^//&amp;quot; | grep &amp;quot;vtkKW.*New&amp;quot; | sed 's/::New.*//' | sort | uniq | grep Mimx |  wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep public | wc'&lt;br /&gt;
&lt;br /&gt;
==Qt widgets of interest==&lt;br /&gt;
&lt;br /&gt;
Playing with Qt Designer is a good way to explore Qt's core widgets. However, some KWW widgets are fairly complex, or uses Tk canvases pretty heavily; here are a few Qt widgets replacements worth considering. They are either found in the core distribution, or in [http://qt.nokia.com/products/appdev/add-on-products/catalog/4 Qt Solutions Catalog] (LGPL):&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsCoreWidgetsOverview.png Thumbwheel]. Qt provides a [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtthumbwheel QtThumbWheel]&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWFileBrowserDialogExample.png FileBrowser] set of classes. Qt provides a [http://doc.trolltech.com/4.5/qfiledialog.html#sidebarUrls QFileDialog] class. It uses the native file dialogs on Win32/MacOS, and [http://doc.trolltech.com/4.5/qfiledialog.html#sidebarUrls a different one] on Unix, though it can use the same non-native dialog on all platforms. It can be set to pick directories only; a combination of QFile and QDirView can achieve a [http://doc.trolltech.com/4.5/images/dirview-example.png similar/better result]. ParaView uses a custom (rewritten) [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewQtFileDialog.png File Dialog] to handle client-server file browsing. Load/Save buttons are trivial to implement.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:VtkKWColorPickerDialog_Classes.png Color Picker]. Qt provides a [http://doc.trolltech.com/4.5/qcolordialog.html#details QColorDialog], [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolorpicker QtColorPicker], [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolortriangle QtColorTriangle] and [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolorcombobox QtColorComboBox]. It is worth noting that QColorDialog offers basic colors (swatches), custom colors, RGB/HSV sliders on Win32/Unix, but uses a much more elaborate (native?) [http://www.randelshofer.ch/quaqua/guide/images/jcolorchooser.png dialog on Mac].&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsTransferFunctionEditors.png Transfer Function Editors]. ParaView (BSD) and Maverick share a [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewTransferFunctionEditor.png similar transfer function editor] that is not as elaborated as KWW's, though this might do the trick for now. ParaView recently added a second (user-contributed) [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewTransferFunctionEditor2.png transfer function editor] that provides free-form and gaussian curves.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.slicer.org/slicerWiki/index.php/Modules:MainApplicationGUI-Documentation-3.4#Slicer_Viewers Collapsible Frames]. The first (easiest) solution is to use a [http://doc.trolltech.com/4.5/qgroupbox.html#details QGroupBox] and manually connect the checked SIGNAL with the setVisible SLOT of all the children. You would get the same behavior (a checkbox on the left of the title instead of a cross and arrow on the left). The second solution is to inherit from QGroupBox and change the display (change the mark in the checkbox display to have + and -). [http://wiki.slicer.org/slicerWiki/index.php/File:QGroupBox.png screenshot for both solutions]. Qt also offers tab widgets and toolboxes widgets to save space.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:EMSegmentationModuleWizardAnimated.gif Wizard] classes. Qt provides sophisticated [http://doc.trolltech.com/4.5/qwizard.html#wizard-look-and-feel QWizard] classes, as well as a [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Utilities/qt-state-machine-framework/ Qt State Machine] framework. It is not clear if a Qt Wizard can be embedded inside another widget, since it inherits QDialog.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewTransferFunctionEditor2.png Range and Extent] Widgets. JS will show how to develop a [http://wiki.slicer.org/slicerWiki/index.php/File:QtSlicerDemoScreenshot-0.2.png Range slider] in a few minutes (ok, say a couple hours).&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsLogDialog.png error/info log window]. A Qt [http://wiki.slicer.org/slicerWiki/index.php/File:KWQtLogDialog.png Log Dialog] was developed internally at Kitware (SB), and could most likely be reused.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsCoreWidgetsOverview.png Multi Column Widget and Tree]. Qt provides a sophisticated [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtpropertybrowser/ Qt Property Browser], as well as a large set of classes part of its [http://doc.trolltech.com/4.5/model-view-introduction.html Model/View Framework], including [http://doc.trolltech.com/4.5/model-view-view.html#using-an-existing-view tree, list and tables views/widgets], delegates, selection models, drag&amp;amp;drop, etc. See how it is used in Kitware's [http://wiki.slicer.org/slicerWiki/index.php/File:ScreenshotMerlinByKitware.png Merlin/Maverick].&lt;br /&gt;
&lt;br /&gt;
* Undo/Redo. Qt offers a [http://doc.trolltech.com/4.5/qundo.html Undo/Redo framework].&lt;br /&gt;
&lt;br /&gt;
* Misc. Qt [http://doc.trolltech.com/4.5/qdial.html#details QDial], [http://doc.trolltech.com/4.5/qcalendarwidget.html#details QCalendarWidget], [http://doc.trolltech.com/4.5/qprogressbar.html#details QProgressBar], [http://doc.trolltech.com/4.5/qspinbox.html#details QSpinBox], [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtpiemenu QtPieMenu]&lt;br /&gt;
&lt;br /&gt;
* Qt's resource editor is way more powerful and easy to use, and integrated in Qt Designer.&lt;br /&gt;
&lt;br /&gt;
==Considerations and Open Questions==&lt;br /&gt;
# Coding styles and conventions for classes that interface vtk and Qt&lt;br /&gt;
## inheritance&lt;br /&gt;
## memory management (see [http://labs.trolltech.com/blogs/2009/08/25/count-with-me-how-many-smart-pointer-classes-does-qt-have/ how many smart pointer classes does Qt have?])&lt;br /&gt;
# a significant number of higher level Qt widgets are required (Ranges, Extents, TransferFunctionEditors, Material Properties...)&lt;br /&gt;
# Work needs to be coordinated among developers at multiple sites.  Significant face-to-face time should be planned to keep everyone in sync on the progress.&lt;br /&gt;
# It will be inevitable that revisiting some modules will involve redesign and feature improvements even if our focus is specifically on swapping the GUI.&lt;br /&gt;
# Difficult bugs will occur somewhere along the process even if the plan appears smooth.&lt;br /&gt;
# We should consider training courses or conferences to get us up to speed on best practices for development.  (http://www.ics.com/QuickStart/, http://qt.nokia.com/qtdevdays2009)&lt;br /&gt;
# What larger design re-works should be considered at the same time?  I.e. should slicer functionality be re-organized as python packages so we can get away from the monolithic application attributes of the current main program (without a reduction in functionality or usability).&lt;br /&gt;
&lt;br /&gt;
==Development Approaches / Tradeoffs ==&lt;br /&gt;
Several development approaches could be taken each of which has pros/cons and risks.&lt;br /&gt;
&lt;br /&gt;
# ''Immediate rewrite:'' this approach would be to start a from scratch to build a new GUI using Qt.  Pros: likely to result in a cleaner architecture.  Cons: all progress stops until new version is ready; current slicer developers are not Qt experts so not ready to build complex application from scratch; Qt does not have all the needed widgets to implement slicer (they need to be built along side slicer).&lt;br /&gt;
# ''Wait and see:'' wait until Qt more 3rd party widgets fill in the missing functionality and then do the rewrite.  Cons: any new GUI development in the old framework will seem like a dead end.  Pros: the current framework isn't really broken so why change?&lt;br /&gt;
# ''Peaceful coexistence:'' allow both GUI frameworks to be used together and allow people to develop in whichever is most productive for them.  Cons: extra dependencies and potential maintenance issues; may require duplicated code; still need to resolve the architecture issues for mixing vtk and qt.  Pros: removes pressure to do instant port; allows developers to get good at Qt before undertaking a big porting effort; allows development of 3rd party widgets that will make future ports easier.&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Qt_in_Slicer3&amp;diff=10699</id>
		<title>Qt in Slicer3</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Qt_in_Slicer3&amp;diff=10699"/>
		<updated>2009-09-16T17:19:26Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Qt widgets of interest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page captures the design considerations about moving Slicer3 from KWWidgets to [http://qt.nokia.com/ Qt].  As of August 2009 there are no concrete plans for a switch; however there is significant momentum around Qt as an open source technology and interest in making it available to the Slicer community.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
When Slicer3 was being designed in 2004 Qt was available only under the GPL license or a commercial (pay) license (See [http://en.wikipedia.org/wiki/Qt_%28toolkit%29 the wikipedia discussion]) and neither license option was acceptable to the community.  In March 2009 Qt 4.5 was released under the LGPL license and became a possible technology for use in Slicer.&lt;br /&gt;
&lt;br /&gt;
Slicer3 is implemented using [http://www.kwwidgets.org KWWidgets] which has proven to be extremely capable and robust.  However, due to the small size of the developer team for KWWidgets Kitware has been clear that it will not be able to compete with the features being added to Qt and is in fact adopting Qt for many of its internal projects (see, for example, [http://paraview.org ParaView] which migrated to Qt over the past several years).&lt;br /&gt;
&lt;br /&gt;
==Experiments==&lt;br /&gt;
[[Image:Slicer3.5+Qt+Python-Test-2009-08-27.png|thumb|right|Screenshot from a version of slicer that has Qt accessible from the python console.]]&lt;br /&gt;
In August of 2009 several members of the slicer development team have been learning about Qt and reviewing options.  Things that are currently working:&lt;br /&gt;
* Qt and KWWidgets can co-exist in same application environment (in different top level windows).&lt;br /&gt;
* Qt widgets interfaces can be assembled using the QtDesigner, C++, or python.&lt;br /&gt;
* It is feasible to create slicer widgets that use Qt (e.g. a NodeSelector widget).&lt;br /&gt;
&lt;br /&gt;
Overall the experience has been positive but the experiments have shown that there will be a significant amount of programming work to be done for each part of the interface.  Most of the work is probably best characterized as &amp;quot;easy but time consuming&amp;quot;.  The net result of converting is expected to be positive but it is likely to be several years for there to be a payoff in terms of overall increased developer productivity and improved functionality of the overall package.&lt;br /&gt;
&lt;br /&gt;
==Development Plan Option for Transition to Qt==&lt;br /&gt;
&lt;br /&gt;
The following is a summary of the work to be done organized in a more-or-less priority order that would allow a transition in-place of functionality from KWW to Qt.&lt;br /&gt;
&lt;br /&gt;
# Configure CPack to include Qt libraries and turn on Qt support by default in nightly builds of slicer&lt;br /&gt;
# Create prototype modules built using Qt (these would appear in a distinct top level window from the rest of slicer.  The size and position would be under programatic control to make the two interface somewhat unified).&lt;br /&gt;
# Migrate the vtkSlicerViewerWidget, vtkSlicerSliceControllerWidget, and vtkSlicerSliceWidget from KWW to Qt.  This would allow the right side (2D/3D viewers) of the interface to exist in Qt with the left side (module interfaces) to exist in KWWidgets.&lt;br /&gt;
# Migrate interfaces from modules and left side functions into Qt&lt;br /&gt;
## the menu bar, tool bar, modules menu, module search and history controls&lt;br /&gt;
## the CommandLineModuleGUI (so CLI modules will work in Qt)&lt;br /&gt;
## the &amp;quot;Manipulate Slice Views&amp;quot; and &amp;quot;Manipulate 3D View&amp;quot; controls&lt;br /&gt;
# Transition other dialogs and modules to Qt&lt;br /&gt;
## Add Data, Add Volume, Save, Extension Wizard, Application Settings, Cache &amp;amp; Remote I/O Manager, Tcl/Python Interactors, ErrorLog Dialog, Keyboard Shortcuts...&lt;br /&gt;
## Core Modules: Colors, Data, Editor, Fiducials, Measurements, Models, ROI, SlicerWelcome, Slices, Transforms, Volume Rendering, Volumes&lt;br /&gt;
## Application Modules: Change Tracker, IA_FEMesh, Qdec, FetchMI, Query Atlas, AC/PC Transform, ModelMirror, EMSegment, LabelStatistics, Tractography, Fiber Bundles, NeuroNav, OpenIGTLink IF, ProstateNav, Clip Model, Extract Subvolume ROI, 4D Volume, 4D Analysis.&lt;br /&gt;
## Extension Modules and DBP Projects: Perk Station, VMTK Vessel Tools, others...&lt;br /&gt;
# Remove KWW from the builds and do a new release.&lt;br /&gt;
&lt;br /&gt;
==Slicer's KWWidgets-based GUI==&lt;br /&gt;
===Statistics===&lt;br /&gt;
* There are '''3309''' KWWidgets instances created in slicer core and modules (calls to New)&lt;br /&gt;
* These calls are from '''123''' different KWWidget classes (including 'pure' KW classes in slicer that only depend on vtkKW and not MRML or other slicer code) &lt;br /&gt;
* '''37''' KKWidgets subclasses are vtkKWMimx classes in the Meshing module&lt;br /&gt;
* There are '''105''' classes that subclass from KWWidget classes&lt;br /&gt;
&lt;br /&gt;
See: [[Slicer3:KKWidgets_being_used| this list of KWWidgets being used in Slicer3]].&lt;br /&gt;
&lt;br /&gt;
''Statistics methods:  Calculations based on slicer3 trunk revision 10456 2009-09-10.  This does not include Tcl or Python code or extension modules (they use basically the same widgets).''&lt;br /&gt;
&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep New | wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep &amp;quot;::New&amp;quot; | tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;=&amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;&amp;gt;&amp;quot; &amp;quot;\n&amp;quot; | grep -v &amp;quot;^//&amp;quot; | grep &amp;quot;vtkKW.*New&amp;quot; | sed 's/::New.*//' | sort | uniq | wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep &amp;quot;::New&amp;quot; | tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;=&amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;&amp;gt;&amp;quot; &amp;quot;\n&amp;quot; | grep -v &amp;quot;^//&amp;quot; | grep &amp;quot;vtkKW.*New&amp;quot; | sed 's/::New.*//' | sort | uniq | grep Mimx |  wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep public | wc'&lt;br /&gt;
&lt;br /&gt;
==Qt widgets of interest==&lt;br /&gt;
&lt;br /&gt;
Playing with Qt Designer is a good way to explore Qt's core widgets. However, some KWW widgets are fairly complex, or uses Tk canvases pretty heavily; here are a few Qt widgets replacements worth considering. They are either found in the core distribution, or in [http://qt.nokia.com/products/appdev/add-on-products/catalog/4 Qt Solutions Catalog] (LGPL):&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsCoreWidgetsOverview.png Thumbwheel]. Qt provides a [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtthumbwheel QtThumbWheel]&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWFileBrowserDialogExample.png FileBrowser] set of classes. Qt provides a [http://doc.trolltech.com/4.5/qfiledialog.html#sidebarUrls QFileDialog] class. It uses the native file dialogs on Win32/MacOS, and [http://doc.trolltech.com/4.5/qfiledialog.html#sidebarUrls a different one] on Unix, though it can use the same non-native dialog on all platforms. It can be set to pick directories only; a combination of QFile and QDirView can achieve a [http://doc.trolltech.com/4.5/images/dirview-example.png similar/better result]. ParaView uses a custom (rewritten) [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewQtFileDialog.png File Dialog] to handle client-server file browsing. Load/Save buttons are trivial to implement.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:VtkKWColorPickerDialog_Classes.png Color Picker]. Qt provides a [http://doc.trolltech.com/4.5/qcolordialog.html#details QColorDialog], [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolorpicker QtColorPicker], [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolortriangle QtColorTriangle] and [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolorcombobox QtColorComboBox]. It is worth noting that QColorDialog offers basic colors (swatches), custom colors, RGB/HSV sliders on Win32/Unix, but uses a much more elaborate (native?) [http://www.randelshofer.ch/quaqua/guide/images/jcolorchooser.png dialog on Mac].&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsTransferFunctionEditors.png Transfer Function Editors]. ParaView (BSD) and Maverick share a [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewTransferFunctionEditor.png similar transfer function editor] that is not as elaborated as KWW's, though this might do the trick for now. ParaView recently added a second (user-contributed) [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewTransferFunctionEditor2.png transfer function editor] that provides free-form and gaussian curves.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.slicer.org/slicerWiki/index.php/Modules:MainApplicationGUI-Documentation-3.4#Slicer_Viewers Collapsible Frames]. The first (easiest) solution is to use a [http://doc.trolltech.com/4.5/qgroupbox.html#details QGroupBox] and manually connect the checked SIGNAL with the setVisible SLOT of all the children. You would get the same behavior (a checkbox on the left of the title instead of a cross and arrow on the left). The second solution is to inherit from QGroupBox and change the display (change the mark in the checkbox display to have + and -). [http://wiki.slicer.org/slicerWiki/index.php/File:QGroupBox.png screenshot for both solutions]. Qt also offers tab widgets and toolboxes widgets to save space.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:EMSegmentationModuleWizardAnimated.gif Wizard] classes. Qt provides sophisticated [http://doc.trolltech.com/4.5/qwizard.html#wizard-look-and-feel QWizard] classes, as well as a [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Utilities/qt-state-machine-framework/ Qt State Machine] framework. It is not clear if a Qt Wizard can be embedded inside another widget, since it inherits QDialog.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewTransferFunctionEditor2.png Range and Extent] Widgets. JS will show how to develop a [http://wiki.slicer.org/slicerWiki/index.php/File:QtSlicerDemoScreenshot-0.2.png Range slider] in a few minutes (ok, say a couple hours).&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsLogDialog.png error/info log window]. A Qt [http://wiki.slicer.org/slicerWiki/index.php/File:KWQtLogDialog.png Log Dialog] was developed internally at Kitware (SB), and could most likely be reused.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsCoreWidgetsOverview.png Multi Column Widget and Tree]. Qt provides a sophisticated [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtpropertybrowser/ Qt Property Browser], as well as a large set of classes part of its [http://doc.trolltech.com/4.5/model-view-introduction.html Model/View Framework], including [http://doc.trolltech.com/4.5/model-view-view.html#using-an-existing-view tree, list and tables views/widgets], delegates, selection models, drag&amp;amp;drop, etc. See how it is used in Kitware's [http://wiki.slicer.org/slicerWiki/index.php/File:ScreenshotMerlinByKitware.png Merlin/Maverick].&lt;br /&gt;
&lt;br /&gt;
* Undo/Redo. Qt offers a [http://doc.trolltech.com/4.5/qundo.html Undo/Redo framework].&lt;br /&gt;
&lt;br /&gt;
* Misc. Qt [http://doc.trolltech.com/4.5/qdial.html#details QDial], [http://doc.trolltech.com/4.5/qcalendarwidget.html#details QCalendarWidget], [http://doc.trolltech.com/4.5/qprogressbar.html#details QProgressBar], [http://doc.trolltech.com/4.5/qspinbox.html#details QSpinBox], [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtpiemenu QtPieMenu]&lt;br /&gt;
&lt;br /&gt;
* Qt's resource editor is way more powerful and easy to use, and integrated in Qt Designer.&lt;br /&gt;
&lt;br /&gt;
==Considerations and Open Questions==&lt;br /&gt;
# Coding styles and conventions for classes that interface vtk and Qt&lt;br /&gt;
## inheritance&lt;br /&gt;
## memory management&lt;br /&gt;
# a significant number of higher level Qt widgets are required (Ranges, Extents, TransferFunctionEditors, Material Properties...)&lt;br /&gt;
# Work needs to be coordinated among developers at multiple sites.  Significant face-to-face time should be planned to keep everyone in sync on the progress.&lt;br /&gt;
# It will be inevitable that revisiting some modules will involve redesign and feature improvements even if our focus is specifically on swapping the GUI.&lt;br /&gt;
# Difficult bugs will occur somewhere along the process even if the plan appears smooth.&lt;br /&gt;
# We should consider training courses or conferences to get us up to speed on best practices for development.  (http://www.ics.com/QuickStart/, http://qt.nokia.com/qtdevdays2009)&lt;br /&gt;
# What larger design re-works should be considered at the same time?  I.e. should slicer functionality be re-organized as python packages so we can get away from the monolithic application attributes of the current main program (without a reduction in functionality or usability).&lt;br /&gt;
&lt;br /&gt;
==Development Approaches / Tradeoffs ==&lt;br /&gt;
Several development approaches could be taken each of which has pros/cons and risks.&lt;br /&gt;
&lt;br /&gt;
# ''Immediate rewrite:'' this approach would be to start a from scratch to build a new GUI using Qt.  Pros: likely to result in a cleaner architecture.  Cons: all progress stops until new version is ready; current slicer developers are not Qt experts so not ready to build complex application from scratch; Qt does not have all the needed widgets to implement slicer (they need to be built along side slicer).&lt;br /&gt;
# ''Wait and see:'' wait until Qt more 3rd party widgets fill in the missing functionality and then do the rewrite.  Cons: any new GUI development in the old framework will seem like a dead end.  Pros: the current framework isn't really broken so why change?&lt;br /&gt;
# ''Peaceful coexistence:'' allow both GUI frameworks to be used together and allow people to develop in whichever is most productive for them.  Cons: extra dependencies and potential maintenance issues; may require duplicated code; still need to resolve the architecture issues for mixing vtk and qt.  Pros: removes pressure to do instant port; allows developers to get good at Qt before undertaking a big porting effort; allows development of 3rd party widgets that will make future ports easier.&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Qt_in_Slicer3&amp;diff=10698</id>
		<title>Qt in Slicer3</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Qt_in_Slicer3&amp;diff=10698"/>
		<updated>2009-09-16T06:31:12Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Qt widgets of interest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page captures the design considerations about moving Slicer3 from KWWidgets to [http://qt.nokia.com/ Qt].  As of August 2009 there are no concrete plans for a switch; however there is significant momentum around Qt as an open source technology and interest in making it available to the Slicer community.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
When Slicer3 was being designed in 2004 Qt was available only under the GPL license or a commercial (pay) license (See [http://en.wikipedia.org/wiki/Qt_%28toolkit%29 the wikipedia discussion]) and neither license option was acceptable to the community.  In March 2009 Qt 4.5 was released under the LGPL license and became a possible technology for use in Slicer.&lt;br /&gt;
&lt;br /&gt;
Slicer3 is implemented using [http://www.kwwidgets.org KWWidgets] which has proven to be extremely capable and robust.  However, due to the small size of the developer team for KWWidgets Kitware has been clear that it will not be able to compete with the features being added to Qt and is in fact adopting Qt for many of its internal projects (see, for example, [http://paraview.org ParaView] which migrated to Qt over the past several years).&lt;br /&gt;
&lt;br /&gt;
==Experiments==&lt;br /&gt;
[[Image:Slicer3.5+Qt+Python-Test-2009-08-27.png|thumb|right|Screenshot from a version of slicer that has Qt accessible from the python console.]]&lt;br /&gt;
In August of 2009 several members of the slicer development team have been learning about Qt and reviewing options.  Things that are currently working:&lt;br /&gt;
* Qt and KWWidgets can co-exist in same application environment (in different top level windows).&lt;br /&gt;
* Qt widgets interfaces can be assembled using the QtDesigner, C++, or python.&lt;br /&gt;
* It is feasible to create slicer widgets that use Qt (e.g. a NodeSelector widget).&lt;br /&gt;
&lt;br /&gt;
Overall the experience has been positive but the experiments have shown that there will be a significant amount of programming work to be done for each part of the interface.  Most of the work is probably best characterized as &amp;quot;easy but time consuming&amp;quot;.  The net result of converting is expected to be positive but it is likely to be several years for there to be a payoff in terms of overall increased developer productivity and improved functionality of the overall package.&lt;br /&gt;
&lt;br /&gt;
==Development Plan Option for Transition to Qt==&lt;br /&gt;
&lt;br /&gt;
The following is a summary of the work to be done organized in a more-or-less priority order that would allow a transition in-place of functionality from KWW to Qt.&lt;br /&gt;
&lt;br /&gt;
# Configure CPack to include Qt libraries and turn on Qt support by default in nightly builds of slicer&lt;br /&gt;
# Create prototype modules built using Qt (these would appear in a distinct top level window from the rest of slicer.  The size and position would be under programatic control to make the two interface somewhat unified).&lt;br /&gt;
# Migrate the vtkSlicerViewerWidget, vtkSlicerSliceControllerWidget, and vtkSlicerSliceWidget from KWW to Qt.  This would allow the right side (2D/3D viewers) of the interface to exist in Qt with the left side (module interfaces) to exist in KWWidgets.&lt;br /&gt;
# Migrate interfaces from modules and left side functions into Qt&lt;br /&gt;
## the menu bar, tool bar, modules menu, module search and history controls&lt;br /&gt;
## the CommandLineModuleGUI (so CLI modules will work in Qt)&lt;br /&gt;
## the &amp;quot;Manipulate Slice Views&amp;quot; and &amp;quot;Manipulate 3D View&amp;quot; controls&lt;br /&gt;
# Transition other dialogs and modules to Qt&lt;br /&gt;
## Add Data, Add Volume, Save, Extension Wizard, Application Settings, Cache &amp;amp; Remote I/O Manager, Tcl/Python Interactors, ErrorLog Dialog, Keyboard Shortcuts...&lt;br /&gt;
## Core Modules: Colors, Data, Editor, Fiducials, Measurements, Models, ROI, SlicerWelcome, Slices, Transforms, Volume Rendering, Volumes&lt;br /&gt;
## Application Modules: Change Tracker, IA_FEMesh, Qdec, FetchMI, Query Atlas, AC/PC Transform, ModelMirror, EMSegment, LabelStatistics, Tractography, Fiber Bundles, NeuroNav, OpenIGTLink IF, ProstateNav, Clip Model, Extract Subvolume ROI, 4D Volume, 4D Analysis.&lt;br /&gt;
## Extension Modules and DBP Projects: Perk Station, VMTK Vessel Tools, others...&lt;br /&gt;
# Remove KWW from the builds and do a new release.&lt;br /&gt;
&lt;br /&gt;
==Slicer's KWWidgets-based GUI==&lt;br /&gt;
===Statistics===&lt;br /&gt;
* There are '''3309''' KWWidgets instances created in slicer core and modules (calls to New)&lt;br /&gt;
* These calls are from '''123''' different KWWidget classes (including 'pure' KW classes in slicer that only depend on vtkKW and not MRML or other slicer code) &lt;br /&gt;
* '''37''' KKWidgets subclasses are vtkKWMimx classes in the Meshing module&lt;br /&gt;
* There are '''105''' classes that subclass from KWWidget classes&lt;br /&gt;
&lt;br /&gt;
See: [[Slicer3:KKWidgets_being_used| this list of KWWidgets being used in Slicer3]].&lt;br /&gt;
&lt;br /&gt;
''Statistics methods:  Calculations based on slicer3 trunk revision 10456 2009-09-10.  This does not include Tcl or Python code or extension modules (they use basically the same widgets).''&lt;br /&gt;
&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep New | wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep &amp;quot;::New&amp;quot; | tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;=&amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;&amp;gt;&amp;quot; &amp;quot;\n&amp;quot; | grep -v &amp;quot;^//&amp;quot; | grep &amp;quot;vtkKW.*New&amp;quot; | sed 's/::New.*//' | sort | uniq | wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep &amp;quot;::New&amp;quot; | tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;=&amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;&amp;gt;&amp;quot; &amp;quot;\n&amp;quot; | grep -v &amp;quot;^//&amp;quot; | grep &amp;quot;vtkKW.*New&amp;quot; | sed 's/::New.*//' | sort | uniq | grep Mimx |  wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep public | wc'&lt;br /&gt;
&lt;br /&gt;
==Qt widgets of interest==&lt;br /&gt;
&lt;br /&gt;
Playing with Qt Designer is a good way to explore Qt's core widgets. However, some KWW widgets are fairly complex, or uses Tk canvases pretty heavily; here are a few Qt widgets replacements worth considering. They are either found in the core distribution, or in [http://qt.nokia.com/products/appdev/add-on-products/catalog/4 Qt Solutions Catalog] (LGPL):&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsCoreWidgetsOverview.png Thumbwheel]. Qt provides a [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtthumbwheel QtThumbWheel]&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWFileBrowserDialogExample.png FileBrowser] set of classes. Qt provides a [http://doc.trolltech.com/4.5/qfiledialog.html#sidebarUrls QFileDialog] class. It uses the native file dialogs on Win32/MacOS, and [http://doc.trolltech.com/4.5/qfiledialog.html#sidebarUrls a different one] on Unix, though it can use the same non-native dialog on all platforms. It can be set to pick directories only; a combination of QFile and QDirView can achieve a [http://doc.trolltech.com/4.5/images/dirview-example.png similar/better result]. ParaView uses a custom (rewritten) [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewQtFileDialog.png File Dialog] to handle client-server file browsing. Load/Save buttons are trivial to implement.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:VtkKWColorPickerDialog_Classes.png Color Picker]. Qt provides a [http://doc.trolltech.com/4.5/qcolordialog.html#details QColorDialog], [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolorpicker QtColorPicker], [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolortriangle QtColorTriangle] and [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolorcombobox QtColorComboBox]. It is worth noting that QColorDialog offers basic colors (swatches), custom colors, RGB/HSV sliders on Win32/Unix, but uses a much more elaborate (native?) [http://www.randelshofer.ch/quaqua/guide/images/jcolorchooser.png dialog on Mac].&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsTransferFunctionEditors.png Transfer Function Editors]. ParaView (BSD) and Maverick share a [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewTransferFunctionEditor.png similar transfer function editor] that is not as elaborated as KWW's, though this might do the trick for now. ParaView recently added a second (user-contributed) [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewTransferFunctionEditor2.png transfer function editor] that provides free-form and gaussian curves.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.slicer.org/slicerWiki/index.php/Modules:MainApplicationGUI-Documentation-3.4#Slicer_Viewers Collapsible Frames]. The first (easiest) solution is to use a [http://doc.trolltech.com/4.5/qgroupbox.html#details QGroupBox] and manually connect the checked SIGNAL with the setVisible SLOT of all the children. You would get the same behavior (a checkbox on the left of the title instead of a cross and arrow on the left). The second solution is to inherit from QGroupBox and change the display (change the mark in the checkbox display to have + and -). [http://wiki.slicer.org/slicerWiki/index.php/File:QGroupBox.png screenshot for both solutions]. Qt also offers tab widgets and toolboxes widgets to save space.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:EMSegmentationModuleWizardAnimated.gif Wizard] classes. Qt provides sophisticated [http://doc.trolltech.com/4.5/qwizard.html#wizard-look-and-feel QWizard] classes, as well as a [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Utilities/qt-state-machine-framework/ Qt State Machine] framework. It is not clear if a Qt Wizard can be embedded inside another widget, since it inherits QDialog.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewTransferFunctionEditor2.png Range and Extent] Widgets. JS will show how to develop a [http://wiki.slicer.org/slicerWiki/index.php/File:QtSlicerDemoScreenshot-0.2.png Range slider] in a few minutes (ok, say a couple hours).&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsLogDialog.png error/info log window]. A Qt [http://wiki.slicer.org/slicerWiki/index.php/File:KWQtLogDialog.png Log Dialog] was developed internally at Kitware (SB), and could most likely be reused.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsCoreWidgetsOverview.png Multi Column Widget and Tree]. Qt provides a sophisticated [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtpropertybrowser/ Qt Property Browser], as well as a large set of classes part of its [http://doc.trolltech.com/4.5/model-view-introduction.html Model/View Framework], including [http://doc.trolltech.com/4.5/model-view-view.html#using-an-existing-view tree, list and tables views/widgets], delegates, selection models, drag&amp;amp;drop, etc. See how it is used in Kitware's [http://wiki.slicer.org/slicerWiki/index.php/File:ScreenshotMerlinByKitware.png Merlin/Maverick].&lt;br /&gt;
&lt;br /&gt;
* Undo/Redo. Qt offers a [http://doc.trolltech.com/4.5/qundo.html Undo/Redo framework].&lt;br /&gt;
&lt;br /&gt;
* Misc. Qt [http://doc.trolltech.com/4.5/qdial.html#details QDial], [http://doc.trolltech.com/4.5/qcalendarwidget.html#details QCalendarWidget], [http://doc.trolltech.com/4.5/qprogressbar.html#details QProgressBar], [http://doc.trolltech.com/4.5/qspinbox.html#details QSpinBox].&lt;br /&gt;
 &lt;br /&gt;
* Qt's resource editor is way more powerful and easy to use, and integrated in Qt Designer.&lt;br /&gt;
&lt;br /&gt;
==Considerations and Open Questions==&lt;br /&gt;
# Coding styles and conventions for classes that interface vtk and Qt&lt;br /&gt;
## inheritance&lt;br /&gt;
## memory management&lt;br /&gt;
# a significant number of higher level Qt widgets are required (Ranges, Extents, TransferFunctionEditors, Material Properties...)&lt;br /&gt;
# Work needs to be coordinated among developers at multiple sites.  Significant face-to-face time should be planned to keep everyone in sync on the progress.&lt;br /&gt;
# It will be inevitable that revisiting some modules will involve redesign and feature improvements even if our focus is specifically on swapping the GUI.&lt;br /&gt;
# Difficult bugs will occur somewhere along the process even if the plan appears smooth.&lt;br /&gt;
# We should consider training courses or conferences to get us up to speed on best practices for development.  (http://www.ics.com/QuickStart/, http://qt.nokia.com/qtdevdays2009)&lt;br /&gt;
# What larger design re-works should be considered at the same time?  I.e. should slicer functionality be re-organized as python packages so we can get away from the monolithic application attributes of the current main program (without a reduction in functionality or usability).&lt;br /&gt;
&lt;br /&gt;
==Development Approaches / Tradeoffs ==&lt;br /&gt;
Several development approaches could be taken each of which has pros/cons and risks.&lt;br /&gt;
&lt;br /&gt;
# ''Immediate rewrite:'' this approach would be to start a from scratch to build a new GUI using Qt.  Pros: likely to result in a cleaner architecture.  Cons: all progress stops until new version is ready; current slicer developers are not Qt experts so not ready to build complex application from scratch; Qt does not have all the needed widgets to implement slicer (they need to be built along side slicer).&lt;br /&gt;
# ''Wait and see:'' wait until Qt more 3rd party widgets fill in the missing functionality and then do the rewrite.  Cons: any new GUI development in the old framework will seem like a dead end.  Pros: the current framework isn't really broken so why change?&lt;br /&gt;
# ''Peaceful coexistence:'' allow both GUI frameworks to be used together and allow people to develop in whichever is most productive for them.  Cons: extra dependencies and potential maintenance issues; may require duplicated code; still need to resolve the architecture issues for mixing vtk and qt.  Pros: removes pressure to do instant port; allows developers to get good at Qt before undertaking a big porting effort; allows development of 3rd party widgets that will make future ports easier.&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:ScreenshotMerlinByKitware.png&amp;diff=10697</id>
		<title>File:ScreenshotMerlinByKitware.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:ScreenshotMerlinByKitware.png&amp;diff=10697"/>
		<updated>2009-09-16T06:22:07Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:KWQtLogDialog.png&amp;diff=10696</id>
		<title>File:KWQtLogDialog.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:KWQtLogDialog.png&amp;diff=10696"/>
		<updated>2009-09-16T06:14:36Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:QtSlicerDemoScreenshot-0.2.png&amp;diff=10695</id>
		<title>File:QtSlicerDemoScreenshot-0.2.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:QtSlicerDemoScreenshot-0.2.png&amp;diff=10695"/>
		<updated>2009-09-16T06:07:59Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Qt_in_Slicer3&amp;diff=10694</id>
		<title>Qt in Slicer3</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Qt_in_Slicer3&amp;diff=10694"/>
		<updated>2009-09-16T06:04:45Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Qt widgets of interest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page captures the design considerations about moving Slicer3 from KWWidgets to [http://qt.nokia.com/ Qt].  As of August 2009 there are no concrete plans for a switch; however there is significant momentum around Qt as an open source technology and interest in making it available to the Slicer community.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
When Slicer3 was being designed in 2004 Qt was available only under the GPL license or a commercial (pay) license (See [http://en.wikipedia.org/wiki/Qt_%28toolkit%29 the wikipedia discussion]) and neither license option was acceptable to the community.  In March 2009 Qt 4.5 was released under the LGPL license and became a possible technology for use in Slicer.&lt;br /&gt;
&lt;br /&gt;
Slicer3 is implemented using [http://www.kwwidgets.org KWWidgets] which has proven to be extremely capable and robust.  However, due to the small size of the developer team for KWWidgets Kitware has been clear that it will not be able to compete with the features being added to Qt and is in fact adopting Qt for many of its internal projects (see, for example, [http://paraview.org ParaView] which migrated to Qt over the past several years).&lt;br /&gt;
&lt;br /&gt;
==Experiments==&lt;br /&gt;
[[Image:Slicer3.5+Qt+Python-Test-2009-08-27.png|thumb|right|Screenshot from a version of slicer that has Qt accessible from the python console.]]&lt;br /&gt;
In August of 2009 several members of the slicer development team have been learning about Qt and reviewing options.  Things that are currently working:&lt;br /&gt;
* Qt and KWWidgets can co-exist in same application environment (in different top level windows).&lt;br /&gt;
* Qt widgets interfaces can be assembled using the QtDesigner, C++, or python.&lt;br /&gt;
* It is feasible to create slicer widgets that use Qt (e.g. a NodeSelector widget).&lt;br /&gt;
&lt;br /&gt;
Overall the experience has been positive but the experiments have shown that there will be a significant amount of programming work to be done for each part of the interface.  Most of the work is probably best characterized as &amp;quot;easy but time consuming&amp;quot;.  The net result of converting is expected to be positive but it is likely to be several years for there to be a payoff in terms of overall increased developer productivity and improved functionality of the overall package.&lt;br /&gt;
&lt;br /&gt;
==Development Plan Option for Transition to Qt==&lt;br /&gt;
&lt;br /&gt;
The following is a summary of the work to be done organized in a more-or-less priority order that would allow a transition in-place of functionality from KWW to Qt.&lt;br /&gt;
&lt;br /&gt;
# Configure CPack to include Qt libraries and turn on Qt support by default in nightly builds of slicer&lt;br /&gt;
# Create prototype modules built using Qt (these would appear in a distinct top level window from the rest of slicer.  The size and position would be under programatic control to make the two interface somewhat unified).&lt;br /&gt;
# Migrate the vtkSlicerViewerWidget, vtkSlicerSliceControllerWidget, and vtkSlicerSliceWidget from KWW to Qt.  This would allow the right side (2D/3D viewers) of the interface to exist in Qt with the left side (module interfaces) to exist in KWWidgets.&lt;br /&gt;
# Migrate interfaces from modules and left side functions into Qt&lt;br /&gt;
## the menu bar, tool bar, modules menu, module search and history controls&lt;br /&gt;
## the CommandLineModuleGUI (so CLI modules will work in Qt)&lt;br /&gt;
## the &amp;quot;Manipulate Slice Views&amp;quot; and &amp;quot;Manipulate 3D View&amp;quot; controls&lt;br /&gt;
# Transition other dialogs and modules to Qt&lt;br /&gt;
## Add Data, Add Volume, Save, Extension Wizard, Application Settings, Cache &amp;amp; Remote I/O Manager, Tcl/Python Interactors, ErrorLog Dialog, Keyboard Shortcuts...&lt;br /&gt;
## Core Modules: Colors, Data, Editor, Fiducials, Measurements, Models, ROI, SlicerWelcome, Slices, Transforms, Volume Rendering, Volumes&lt;br /&gt;
## Application Modules: Change Tracker, IA_FEMesh, Qdec, FetchMI, Query Atlas, AC/PC Transform, ModelMirror, EMSegment, LabelStatistics, Tractography, Fiber Bundles, NeuroNav, OpenIGTLink IF, ProstateNav, Clip Model, Extract Subvolume ROI, 4D Volume, 4D Analysis.&lt;br /&gt;
## Extension Modules and DBP Projects: Perk Station, VMTK Vessel Tools, others...&lt;br /&gt;
# Remove KWW from the builds and do a new release.&lt;br /&gt;
&lt;br /&gt;
==Slicer's KWWidgets-based GUI==&lt;br /&gt;
===Statistics===&lt;br /&gt;
* There are '''3309''' KWWidgets instances created in slicer core and modules (calls to New)&lt;br /&gt;
* These calls are from '''123''' different KWWidget classes (including 'pure' KW classes in slicer that only depend on vtkKW and not MRML or other slicer code) &lt;br /&gt;
* '''37''' KKWidgets subclasses are vtkKWMimx classes in the Meshing module&lt;br /&gt;
* There are '''105''' classes that subclass from KWWidget classes&lt;br /&gt;
&lt;br /&gt;
See: [[Slicer3:KKWidgets_being_used| this list of KWWidgets being used in Slicer3]].&lt;br /&gt;
&lt;br /&gt;
''Statistics methods:  Calculations based on slicer3 trunk revision 10456 2009-09-10.  This does not include Tcl or Python code or extension modules (they use basically the same widgets).''&lt;br /&gt;
&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep New | wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep &amp;quot;::New&amp;quot; | tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;=&amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;&amp;gt;&amp;quot; &amp;quot;\n&amp;quot; | grep -v &amp;quot;^//&amp;quot; | grep &amp;quot;vtkKW.*New&amp;quot; | sed 's/::New.*//' | sort | uniq | wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep &amp;quot;::New&amp;quot; | tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;=&amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;&amp;gt;&amp;quot; &amp;quot;\n&amp;quot; | grep -v &amp;quot;^//&amp;quot; | grep &amp;quot;vtkKW.*New&amp;quot; | sed 's/::New.*//' | sort | uniq | grep Mimx |  wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep public | wc'&lt;br /&gt;
&lt;br /&gt;
==Qt widgets of interest==&lt;br /&gt;
&lt;br /&gt;
Playing with Qt Designer is a good way to explore Qt's core widgets. However, some KWW widgets are fairly complex, or uses Tk canvases pretty heavily; here are a few Qt widgets replacements worth considering. They are either found in the core distribution, or in [http://qt.nokia.com/products/appdev/add-on-products/catalog/4 Qt Solutions Catalog] (LGPL):&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsCoreWidgetsOverview.png Thumbwheel]. Qt provides a [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtthumbwheel QtThumbWheel]&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWFileBrowserDialogExample.png FileBrowser] set of classes. Qt provides a [http://doc.trolltech.com/4.5/qfiledialog.html#sidebarUrls QFileDialog] class. It uses the native file dialogs on Win32/MacOS, and [http://doc.trolltech.com/4.5/qfiledialog.html#sidebarUrls a different one] on Unix, though it can use the same non-native dialog on all platforms. It can be set to pick directories only; a combination of QFile and QDirView can achieve a [http://doc.trolltech.com/4.5/images/dirview-example.png similar/better result]. ParaView uses a custom (rewritten) [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewQtFileDialog.png File Dialog] to handle client-server file browsing.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:VtkKWColorPickerDialog_Classes.png Color Picker]. Qt provides a [http://doc.trolltech.com/4.5/qcolordialog.html#details QColorDialog], [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolorpicker QtColorPicker], [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolortriangle QtColorTriangle] and [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolorcombobox QtColorComboBox]. It is worth noting that QColorDialog offers basic colors (swatches), custom colors, RGB/HSV sliders on Win32/Unix, but uses a much more elaborate (native?) [http://www.randelshofer.ch/quaqua/guide/images/jcolorchooser.png dialog on Mac].&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsTransferFunctionEditors.png Transfer Function Editors]. ParaView (BSD) and Maverick share a [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewTransferFunctionEditor.png similar transfer function editor] that is not as elaborated as KWW's, though this might do the trick for now. ParaView recently added a second (user-contributed) [http://wiki.slicer.org/slicerWiki/index.php/File:ParaViewTransferFunctionEditor2.png transfer function editor] that provides free-form and gaussian curves.&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.slicer.org/slicerWiki/index.php/Modules:MainApplicationGUI-Documentation-3.4#Slicer_Viewers Collapsible Frames]. The first (easiest) solution is to use a [http://doc.trolltech.com/4.5/qgroupbox.html#details QGroupBox] and manually connect the checked SIGNAL with the setVisible SLOT of all the children. You would get the same behavior (a checkbox on the left of the title instead of a cross and arrow on the left). The second solution is to inherit from QGroupBox and change the display (change the mark in the checkbox display to have + and -). [http://wiki.slicer.org/slicerWiki/index.php/File:QGroupBox.png screenshot for both solutions].&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:EMSegmentationModuleWizardAnimated.gif Wizard] classes. Qt provides sophisticated [http://doc.trolltech.com/4.5/qwizard.html#wizard-look-and-feel QWizard] classes, as well as a [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Utilities/qt-state-machine-framework/ Qt State Machine] framework. It is not clear if a Qt Wizard can be embedded inside another widget, since it inherits QDialog.&lt;br /&gt;
&lt;br /&gt;
==Considerations and Open Questions==&lt;br /&gt;
# Coding styles and conventions for classes that interface vtk and Qt&lt;br /&gt;
## inheritance&lt;br /&gt;
## memory management&lt;br /&gt;
# a significant number of higher level Qt widgets are required (Ranges, Extents, TransferFunctionEditors, Material Properties...)&lt;br /&gt;
# Work needs to be coordinated among developers at multiple sites.  Significant face-to-face time should be planned to keep everyone in sync on the progress.&lt;br /&gt;
# It will be inevitable that revisiting some modules will involve redesign and feature improvements even if our focus is specifically on swapping the GUI.&lt;br /&gt;
# Difficult bugs will occur somewhere along the process even if the plan appears smooth.&lt;br /&gt;
# We should consider training courses or conferences to get us up to speed on best practices for development.  (http://www.ics.com/QuickStart/, http://qt.nokia.com/qtdevdays2009)&lt;br /&gt;
# What larger design re-works should be considered at the same time?  I.e. should slicer functionality be re-organized as python packages so we can get away from the monolithic application attributes of the current main program (without a reduction in functionality or usability).&lt;br /&gt;
&lt;br /&gt;
==Development Approaches / Tradeoffs ==&lt;br /&gt;
Several development approaches could be taken each of which has pros/cons and risks.&lt;br /&gt;
&lt;br /&gt;
# ''Immediate rewrite:'' this approach would be to start a from scratch to build a new GUI using Qt.  Pros: likely to result in a cleaner architecture.  Cons: all progress stops until new version is ready; current slicer developers are not Qt experts so not ready to build complex application from scratch; Qt does not have all the needed widgets to implement slicer (they need to be built along side slicer).&lt;br /&gt;
# ''Wait and see:'' wait until Qt more 3rd party widgets fill in the missing functionality and then do the rewrite.  Cons: any new GUI development in the old framework will seem like a dead end.  Pros: the current framework isn't really broken so why change?&lt;br /&gt;
# ''Peaceful coexistence:'' allow both GUI frameworks to be used together and allow people to develop in whichever is most productive for them.  Cons: extra dependencies and potential maintenance issues; may require duplicated code; still need to resolve the architecture issues for mixing vtk and qt.  Pros: removes pressure to do instant port; allows developers to get good at Qt before undertaking a big porting effort; allows development of 3rd party widgets that will make future ports easier.&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:ParaViewTransferFunctionEditor2.png&amp;diff=10693</id>
		<title>File:ParaViewTransferFunctionEditor2.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:ParaViewTransferFunctionEditor2.png&amp;diff=10693"/>
		<updated>2009-09-16T06:01:41Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:ParaViewTransferFunctionEditor.png&amp;diff=10692</id>
		<title>File:ParaViewTransferFunctionEditor.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:ParaViewTransferFunctionEditor.png&amp;diff=10692"/>
		<updated>2009-09-16T05:57:20Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:ParaViewQtFileDialog.png&amp;diff=10691</id>
		<title>File:ParaViewQtFileDialog.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:ParaViewQtFileDialog.png&amp;diff=10691"/>
		<updated>2009-09-16T05:55:35Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:QGroupBox.png&amp;diff=10690</id>
		<title>File:QGroupBox.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:QGroupBox.png&amp;diff=10690"/>
		<updated>2009-09-16T05:46:29Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Qt_in_Slicer3&amp;diff=10689</id>
		<title>Qt in Slicer3</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Qt_in_Slicer3&amp;diff=10689"/>
		<updated>2009-09-16T05:25:29Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Slicer's KWWidgets-based GUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page captures the design considerations about moving Slicer3 from KWWidgets to [http://qt.nokia.com/ Qt].  As of August 2009 there are no concrete plans for a switch; however there is significant momentum around Qt as an open source technology and interest in making it available to the Slicer community.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
When Slicer3 was being designed in 2004 Qt was available only under the GPL license or a commercial (pay) license (See [http://en.wikipedia.org/wiki/Qt_%28toolkit%29 the wikipedia discussion]) and neither license option was acceptable to the community.  In March 2009 Qt 4.5 was released under the LGPL license and became a possible technology for use in Slicer.&lt;br /&gt;
&lt;br /&gt;
Slicer3 is implemented using [http://www.kwwidgets.org KWWidgets] which has proven to be extremely capable and robust.  However, due to the small size of the developer team for KWWidgets Kitware has been clear that it will not be able to compete with the features being added to Qt and is in fact adopting Qt for many of its internal projects (see, for example, [http://paraview.org ParaView] which migrated to Qt over the past several years).&lt;br /&gt;
&lt;br /&gt;
==Experiments==&lt;br /&gt;
[[Image:Slicer3.5+Qt+Python-Test-2009-08-27.png|thumb|right|Screenshot from a version of slicer that has Qt accessible from the python console.]]&lt;br /&gt;
In August of 2009 several members of the slicer development team have been learning about Qt and reviewing options.  Things that are currently working:&lt;br /&gt;
* Qt and KWWidgets can co-exist in same application environment (in different top level windows).&lt;br /&gt;
* Qt widgets interfaces can be assembled using the QtDesigner, C++, or python.&lt;br /&gt;
* It is feasible to create slicer widgets that use Qt (e.g. a NodeSelector widget).&lt;br /&gt;
&lt;br /&gt;
Overall the experience has been positive but the experiments have shown that there will be a significant amount of programming work to be done for each part of the interface.  Most of the work is probably best characterized as &amp;quot;easy but time consuming&amp;quot;.  The net result of converting is expected to be positive but it is likely to be several years for there to be a payoff in terms of overall increased developer productivity and improved functionality of the overall package.&lt;br /&gt;
&lt;br /&gt;
==Development Plan Option for Transition to Qt==&lt;br /&gt;
&lt;br /&gt;
The following is a summary of the work to be done organized in a more-or-less priority order that would allow a transition in-place of functionality from KWW to Qt.&lt;br /&gt;
&lt;br /&gt;
# Configure CPack to include Qt libraries and turn on Qt support by default in nightly builds of slicer&lt;br /&gt;
# Create prototype modules built using Qt (these would appear in a distinct top level window from the rest of slicer.  The size and position would be under programatic control to make the two interface somewhat unified).&lt;br /&gt;
# Migrate the vtkSlicerViewerWidget, vtkSlicerSliceControllerWidget, and vtkSlicerSliceWidget from KWW to Qt.  This would allow the right side (2D/3D viewers) of the interface to exist in Qt with the left side (module interfaces) to exist in KWWidgets.&lt;br /&gt;
# Migrate interfaces from modules and left side functions into Qt&lt;br /&gt;
## the menu bar, tool bar, modules menu, module search and history controls&lt;br /&gt;
## the CommandLineModuleGUI (so CLI modules will work in Qt)&lt;br /&gt;
## the &amp;quot;Manipulate Slice Views&amp;quot; and &amp;quot;Manipulate 3D View&amp;quot; controls&lt;br /&gt;
# Transition other dialogs and modules to Qt&lt;br /&gt;
## Add Data, Add Volume, Save, Extension Wizard, Application Settings, Cache &amp;amp; Remote I/O Manager, Tcl/Python Interactors, ErrorLog Dialog, Keyboard Shortcuts...&lt;br /&gt;
## Core Modules: Colors, Data, Editor, Fiducials, Measurements, Models, ROI, SlicerWelcome, Slices, Transforms, Volume Rendering, Volumes&lt;br /&gt;
## Application Modules: Change Tracker, IA_FEMesh, Qdec, FetchMI, Query Atlas, AC/PC Transform, ModelMirror, EMSegment, LabelStatistics, Tractography, Fiber Bundles, NeuroNav, OpenIGTLink IF, ProstateNav, Clip Model, Extract Subvolume ROI, 4D Volume, 4D Analysis.&lt;br /&gt;
## Extension Modules and DBP Projects: Perk Station, VMTK Vessel Tools, others...&lt;br /&gt;
# Remove KWW from the builds and do a new release.&lt;br /&gt;
&lt;br /&gt;
==Slicer's KWWidgets-based GUI==&lt;br /&gt;
===Statistics===&lt;br /&gt;
* There are '''3309''' KWWidgets instances created in slicer core and modules (calls to New)&lt;br /&gt;
* These calls are from '''123''' different KWWidget classes (including 'pure' KW classes in slicer that only depend on vtkKW and not MRML or other slicer code) &lt;br /&gt;
* '''37''' KKWidgets subclasses are vtkKWMimx classes in the Meshing module&lt;br /&gt;
* There are '''105''' classes that subclass from KWWidget classes&lt;br /&gt;
&lt;br /&gt;
See: [[Slicer3:KKWidgets_being_used| this list of KWWidgets being used in Slicer3]].&lt;br /&gt;
&lt;br /&gt;
''Statistics methods:  Calculations based on slicer3 trunk revision 10456 2009-09-10.  This does not include Tcl or Python code or extension modules (they use basically the same widgets).''&lt;br /&gt;
&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep New | wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep &amp;quot;::New&amp;quot; | tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;=&amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;&amp;gt;&amp;quot; &amp;quot;\n&amp;quot; | grep -v &amp;quot;^//&amp;quot; | grep &amp;quot;vtkKW.*New&amp;quot; | sed 's/::New.*//' | sort | uniq | wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep &amp;quot;::New&amp;quot; | tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;=&amp;quot; &amp;quot;\n&amp;quot; | tr &amp;quot;&amp;gt;&amp;quot; &amp;quot;\n&amp;quot; | grep -v &amp;quot;^//&amp;quot; | grep &amp;quot;vtkKW.*New&amp;quot; | sed 's/::New.*//' | sort | uniq | grep Mimx |  wc&lt;br /&gt;
 grep -r vtkKW . | grep -v svn | grep public | wc'&lt;br /&gt;
&lt;br /&gt;
==Qt widgets of interest==&lt;br /&gt;
&lt;br /&gt;
Playing with Qt Designer is a good way to explore Qt's core widgets. However, some KWW widgets are fairly complex, or uses Tk canvases pretty heavily; here are a few Qt widgets replacements worth considering. They are either found in the core distribution, or in [http://qt.nokia.com/products/appdev/add-on-products/catalog/4 Qt Solutions Catalog] (LGPL):&lt;br /&gt;
&lt;br /&gt;
* KWW's [http://www.kwwidgets.org/Wiki/Image:KWWidgetsCoreWidgetsOverview.png Thumbwheel]. Qt provides a [http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtthumbwheel QtThumbWheel]&lt;br /&gt;
&lt;br /&gt;
==Considerations and Open Questions==&lt;br /&gt;
# Coding styles and conventions for classes that interface vtk and Qt&lt;br /&gt;
## inheritance&lt;br /&gt;
## memory management&lt;br /&gt;
# a significant number of higher level Qt widgets are required (Ranges, Extents, TransferFunctionEditors, Material Properties...)&lt;br /&gt;
# Work needs to be coordinated among developers at multiple sites.  Significant face-to-face time should be planned to keep everyone in sync on the progress.&lt;br /&gt;
# It will be inevitable that revisiting some modules will involve redesign and feature improvements even if our focus is specifically on swapping the GUI.&lt;br /&gt;
# Difficult bugs will occur somewhere along the process even if the plan appears smooth.&lt;br /&gt;
# We should consider training courses or conferences to get us up to speed on best practices for development.  (http://www.ics.com/QuickStart/, http://qt.nokia.com/qtdevdays2009)&lt;br /&gt;
# What larger design re-works should be considered at the same time?  I.e. should slicer functionality be re-organized as python packages so we can get away from the monolithic application attributes of the current main program (without a reduction in functionality or usability).&lt;br /&gt;
&lt;br /&gt;
==Development Approaches / Tradeoffs ==&lt;br /&gt;
Several development approaches could be taken each of which has pros/cons and risks.&lt;br /&gt;
&lt;br /&gt;
# ''Immediate rewrite:'' this approach would be to start a from scratch to build a new GUI using Qt.  Pros: likely to result in a cleaner architecture.  Cons: all progress stops until new version is ready; current slicer developers are not Qt experts so not ready to build complex application from scratch; Qt does not have all the needed widgets to implement slicer (they need to be built along side slicer).&lt;br /&gt;
# ''Wait and see:'' wait until Qt more 3rd party widgets fill in the missing functionality and then do the rewrite.  Cons: any new GUI development in the old framework will seem like a dead end.  Pros: the current framework isn't really broken so why change?&lt;br /&gt;
# ''Peaceful coexistence:'' allow both GUI frameworks to be used together and allow people to develop in whichever is most productive for them.  Cons: extra dependencies and potential maintenance issues; may require duplicated code; still need to resolve the architecture issues for mixing vtk and qt.  Pros: removes pressure to do instant port; allows developers to get good at Qt before undertaking a big porting effort; allows development of 3rd party widgets that will make future ports easier.&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5283</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5283"/>
		<updated>2008-06-27T14:58:58Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Notes from what was done during [http://www.na-mic.org/Wiki/index.php/2008_Summer_Project_Week 2008 Summer Project Week] &lt;br /&gt;
&lt;br /&gt;
* Various user-friendly optimization (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Ipek Oguz: Help with Offscreen Rendering and making sure it can behave as a command-line program (without a KWW GUI)&lt;br /&gt;
** Ragani: Try to convert legacy code, vtkImageResliceST.cxx, based on old vtkImageReslice&lt;br /&gt;
** Craig Sharp: Help with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;br /&gt;
** Luis: discuss the IO formats introspection (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
** Cleanup some installation/configuration rules in QdecModule and TumorGrowth&lt;br /&gt;
* Wednesday&lt;br /&gt;
** Gary Christensen &amp;amp; team: CMake/CPack presentation, help&lt;br /&gt;
** Will: build Slicer3 (need to update the Wiki)&lt;br /&gt;
** Alex: check the Models tree widget issue, i.e. that it is lacking the usability found in Slicer2 (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
** Add option vtkKWTreeWithScrollbars to resize the tree manually (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Steve Aylward: SlicerIGT funding&lt;br /&gt;
* Thursday&lt;br /&gt;
** Steve, Ron, Will: strategy for the infrastructure required to create Slicer3 binaries and separate modules that can be reviewed, downloaded, integrated in Slicer3. Not to be completed by RSNA. Experimentation for the moment. I (Seb) will produce some installers for Slicer3-Core + Modules, installers/ZIP for the CLP (which need to be fixed so that they can be built/installed separately against Slicer3), installers/ZIP for Slicer3-modules (using the macros that will pull them out of their repository and build them automatically), and a GUI in Slicer3 to fetch the ZIP and unpack them.&lt;br /&gt;
** Wendy: got some info about the current font system, and make sure she agrees with the rewrite. We will stick to a simpler system, i.e. stick to the default system font and compute a smaller font from there. There will still be a (likely hidden) way to increase the font size globally, in case somebody is presenting through a projector. Feedback from the community will lead to some adjustment, but we will stay clear from hardcoding font size and family.&lt;br /&gt;
** Bill: work on the launcher so that it supports a splash screen and the current StarKit launcher can be avoid in RPM installers... &lt;br /&gt;
*** Win32 Resources:&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.microsoft.com/msj/1099/c/c1099.aspx How can I implement a start-up screen that displays a bitmap in MFC?]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://support.microsoft.com/kb/815376 How to create and insert a splash screen in an SDI application or in an MDI application by using Visual C++ .NET or Visual C++ 2005]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.ucancode.net/Visual_C_Control/Splash-screen-of-transparent-bitmap-vc-sample.htm VC++ MFC Sample Code:   Transparent bitmap splash screen]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.codeproject.com/KB/winsdk/win32splash.aspx Own-thread Win32 splash screen]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.codejock.com/support/articles/mfc/general/g_2.asp Dialog With Splash Screen]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.endurasoft.com/techtalk/splash.htm Making a Splash]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.codeproject.com/KB/dialog/splasher.aspx Splasher v1.32 - A Splash Screen Implementation]&amp;lt;/small&amp;gt;&lt;br /&gt;
*** X11 Resources:&lt;br /&gt;
* Friday&lt;br /&gt;
** Bill: work on the launcher with splashscreen&lt;br /&gt;
** Nathan (Gary Christensen): work on the Atlas app, optimize memory consumption&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5279</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5279"/>
		<updated>2008-06-27T13:47:38Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Steve Aylward: SlicerIGT funding?&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Ipek Oguz: Help with Offscreen Rendering and making sure it can behave as a command-line program (without a KWW GUI)&lt;br /&gt;
** Ragani: Try to convert legacy code, vtkImageResliceST.cxx, based on old vtkImageReslice&lt;br /&gt;
** Craig Sharp: Help with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;br /&gt;
** Luis: discuss the IO formats introspection (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
** Cleanup some installation/configuration rules in QdecModule and TumorGrowth&lt;br /&gt;
* Wednesday&lt;br /&gt;
** Gary Christensen &amp;amp; team: CMake/CPack presentation, help&lt;br /&gt;
** Will: build Slicer3 (need to update the Wiki)&lt;br /&gt;
** Alex: check the Models tree widget issue, i.e. that it is lacking the usability found in Slicer2 (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
** Add option vtkKWTreeWithScrollbars to resize the tree manually (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Thursday&lt;br /&gt;
** Steve, Ron, Will: strategy for the infrastructure required to create Slicer3 binaries and separate modules that can be reviewed, downloaded, integrated in Slicer3. Not to be completed by RSNA. Experimentation for the moment. I (Seb) will produce some installers for Slicer3-Core + Modules, installers/ZIP for the CLP (which need to be fixed so that they can be built/installed separately against Slicer3), installers/ZIP for Slicer3-modules (using the macros that will pull them out of their repository and build them automatically), and a GUI in Slicer3 to fetch the ZIP and unpack them.&lt;br /&gt;
** Wendy: got some info about the current font system, and make sure she agrees with the rewrite. We will stick to a simpler system, i.e. stick to the default system font and compute a smaller font from there. There will still be a (likely hidden) way to increase the font size globally, in case somebody is presenting through a projector. Feedback from the community will lead to some adjustment, but we will stay clear from hardcoding font size and family.&lt;br /&gt;
** Bill: work on the launcher so that it supports a splash screen and the current StarKit launcher can be avoid in RPM installers... &lt;br /&gt;
*** Win32 Resources:&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.microsoft.com/msj/1099/c/c1099.aspx How can I implement a start-up screen that displays a bitmap in MFC?]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://support.microsoft.com/kb/815376 How to create and insert a splash screen in an SDI application or in an MDI application by using Visual C++ .NET or Visual C++ 2005]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.ucancode.net/Visual_C_Control/Splash-screen-of-transparent-bitmap-vc-sample.htm VC++ MFC Sample Code:   Transparent bitmap splash screen]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.codeproject.com/KB/winsdk/win32splash.aspx Own-thread Win32 splash screen]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.codejock.com/support/articles/mfc/general/g_2.asp Dialog With Splash Screen]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.endurasoft.com/techtalk/splash.htm Making a Splash]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.codeproject.com/KB/dialog/splasher.aspx Splasher v1.32 - A Splash Screen Implementation]&amp;lt;/small&amp;gt;&lt;br /&gt;
*** X11 Resources:&lt;br /&gt;
* Friday&lt;br /&gt;
** Bill: work on the launcher with splashscreen&lt;br /&gt;
** Nathan (Gary Christensen): work on the Atlas app, optimize memory consumption&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5268</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5268"/>
		<updated>2008-06-26T20:32:22Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
# Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
#* I (Seb) to check with Luis&lt;br /&gt;
#* '''[UPDATE]''' see ImageFileReader&amp;lt;...&amp;gt;::GenerateOutputInformation, BUT every IO file/reader need to expose the list of file extensions it can read and write. Luis is on it, to be added 3.8 end of July. Luis is fast, it's [http://public.kitware.com/cgi-bin/viewcvs.cgi/Code/IO/itkImageIOBase.h?root=Insight&amp;amp;r1=1.48&amp;amp;r2=1.49 in the CVS], and examplified in [http://public.kitware.com/cgi-bin/viewcvs.cgi/Testing/Code/IO/itkImageIOFileNameExtensionsTests.cxx?root=Insight&amp;amp;sortby=date&amp;amp;view=log itkImageIOFileNameExtensionsTests.cxx] &lt;br /&gt;
# Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
#* I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&lt;br /&gt;
# Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
#* My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&lt;br /&gt;
#* Ron: Starting with the system default font is a good idea. I have encountered many situations where it is critical to be able to change the font to larger or smaller. Having a keyboard shortcut for situations where the menu is not accessible might be a good idea too: Ctrl + and ctrl - come to mind, like in firefox.&lt;br /&gt;
#* '''[UPDATE]''' Starting the font cleanup, will keep only the default font size, and a smaller one computed from the system default (instead of hardcoding everything), and possibility of increasing from there. &lt;br /&gt;
# Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
#* Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will. &lt;br /&gt;
#* '''[UPDATE]''' Actually a better starting point could be the vtkBarChartActor since each bar can be used for the multi-progress widget in KWW; Will will add an option to have it horizontal.&lt;br /&gt;
# Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
#* My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&lt;br /&gt;
#* '''[UPDATE]''' vtkKWTreeWithScrollbars has now a ResizeButtonsVisibility flag that is set for the models and MRML tree, and allow for two small resize buttons to be used to resize a tree.[[Image:KWWidgetsExpandTreeButton.png|center|thumb|250px]] &lt;br /&gt;
# Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
#* I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again. Given the size of the testing scene (say, 200 elements), the multicolumn widget would be too slow if each row had a label, a color button, a visibility button, etc., and the indentation would be a ugly hack. The tree widget does support custom widgets per row, but not in separate columns: they would be misaligned (either on the left or right of a leaf label). &lt;br /&gt;
#* '''[UPDATE]''' It seems we need the TkTreeCtrl widget which was added last year when this problem was raised already; Seb to create a C++ class around this monster library and expose only the methods we need for this very specific problem; it will take some time, since TkTreeCtrl is the most complex Tcl/Tk widget to be found in KWWidgets so far.&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5266</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5266"/>
		<updated>2008-06-26T20:20:49Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis&amp;lt;br&amp;gt;'''[UPDATE]''' see ImageFileReader&amp;lt;...&amp;gt;::GenerateOutputInformation, BUT every IO file/reader need to expose the list of file extensions it can read and write. Luis is on it, to be added 3.8 end of July. Luis is fast, it's [http://public.kitware.com/cgi-bin/viewcvs.cgi/Code/IO/itkImageIOBase.h?root=Insight&amp;amp;r1=1.48&amp;amp;r2=1.49 in the CVS], and examplified in [http://public.kitware.com/cgi-bin/viewcvs.cgi/Testing/Code/IO/itkImageIOFileNameExtensionsTests.cxx?root=Insight&amp;amp;sortby=date&amp;amp;view=log itkImageIOFileNameExtensionsTests.cxx]&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
** &amp;lt;small&amp;gt;Ron: Starting with the system default font is a good idea. I have encountered many situations where it is critical to be able to change the font to larger or smaller. Having a keyboard shortcut for situations where the menu is not accessible might be a good idea too: Ctrl + and ctrl - come to mind, like in firefox.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will. Actually a better starting point could be the vtkBarChartActor, Will will add an option to have it horizontal.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;br&amp;gt;'''[UPDATE]''' vtkKWTreeWithScrollbars has now a ResizeButtonsVisibility flag that is set for the models and MRML tree, and allow for two small resize buttons to be used to resize a tree.&amp;lt;/small&amp;gt;[[Image:KWWidgetsExpandTreeButton.png|center|thumb|250px]] &lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;br&amp;gt;'''[UPDATE]''' Given the size of the testing scene (say, 200 elements), the multicolumn widget would be too slow if each row had a label, a color button, a visibility button, etc., and the indentation would be a ugly hack. The tree widget does support custom widgets per row, but not in separate columns: they would be misaligned (either on the left or right of a leaf label). It seems we need the TkTreeCtrl widget which was added last year when this problem was raised already; Seb to create a C++ class around this monster library and expose only the methods we need for this very specific problem; it will take some time, since TkTreeCtrl is the most complex Tcl/Tk widget to be found in KWWidgets so far.&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer3:Build_Instructions&amp;diff=5260</id>
		<title>Slicer3:Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer3:Build_Instructions&amp;diff=5260"/>
		<updated>2008-06-26T18:19:19Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* getbuildtest on linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= All-in-one Script to checkout and build Slicer3 =&lt;br /&gt;
&lt;br /&gt;
To compile and build Slicer3, you need a set of development packages installed on your machine: &lt;br /&gt;
* [[Slicer3:Build_Instructions#getbuildtest_on_linux| pre-requisite material for Linux]]&lt;br /&gt;
* [[Slicer3:Build_Instructions#getbuildtest_on_windows| pre-requisite material for Windows]]&lt;br /&gt;
* [[Slicer3:Build_Instructions#getbuildtest_on_Apple_Mac_OS_X |pre-requisite material for Mac]]&lt;br /&gt;
&lt;br /&gt;
There's a script called getbuildtest.tcl that makes the support libraries (VTK, ITK, teem, etc) and also builds slicer and does a dashboard submission.  (Click [[Slicer3:getbuildtest | here for background on getbuildtest]] and the experimental getbuildtest2 version).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building the 3.2 release ==&lt;br /&gt;
&lt;br /&gt;
Just do the following two commands (see [[Slicer3:Build_Instructions#getbuildtest_on_windows|for windows users]] below):&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
   svn co http://www.na-mic.org/svn/Slicer3/branches/Slicer-3-2 Slicer3&lt;br /&gt;
 &lt;br /&gt;
   ./Slicer3/Scripts/getbuildtest.tcl&lt;br /&gt;
&lt;br /&gt;
== Building the latest development version ==&lt;br /&gt;
&lt;br /&gt;
   svn co http://www.na-mic.org/svn/Slicer3/trunk Slicer3&lt;br /&gt;
 &lt;br /&gt;
   ./Slicer3/Scripts/getbuildtest.tcl&lt;br /&gt;
&lt;br /&gt;
Note: that a Slicer3-lib and Slicer3-build directory will be created for you. This is meant to be used to set up new machines and to run nightly testing of the full builds.&lt;br /&gt;
&lt;br /&gt;
To run (all platforms):&lt;br /&gt;
&lt;br /&gt;
 ./Slicer3-build/Slicer3&lt;br /&gt;
&lt;br /&gt;
Note: the whole build environment takes about 8G of disk space.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Note also that getbuildtest will do an Experimental submission to the [http://www.cdash.org/CDash/index.php?project=Slicer3 Slicer3 dashboard]. If you want to use getbuildtest without submitting to the dashboard, you can set the test type to nothing with&lt;br /&gt;
&lt;br /&gt;
 getbuildtest.tcl -t &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Other options for the -t (--test-type) option are Nightly or Continuous (or any of the [http://www.cmake.org/Wiki/CMake_Testing_With_CTest CTest] options).&lt;br /&gt;
&lt;br /&gt;
== What does getbuildtest.tcl do? ==&lt;br /&gt;
&lt;br /&gt;
This script just automates the steps needed to build slicer.  What you end up with is a set of source and build directories that can either be further manipulated with getbuildtest or can be worked with normally.  That is, on windows you will have solution files that you can load in visual studio for debugging and further development.&lt;br /&gt;
&lt;br /&gt;
Specifically, getbuildtest does the following steps:&lt;br /&gt;
&lt;br /&gt;
* Refreshes Slicer3 svn&lt;br /&gt;
* Runs Scripts/genlib.tcl which does the following for each of the support libraries&lt;br /&gt;
** does a cvs/svn checkout/update&lt;br /&gt;
** runs cmake with the correct settings for use with Slicer3&lt;br /&gt;
** runs make (or developer studio) to build the libraries&lt;br /&gt;
* Runs cmake on Slicer3&lt;br /&gt;
* Builds Slicer3&lt;br /&gt;
* Runs ctest on Slicer3&lt;br /&gt;
* (optionally) Runs CPack on Slicer3&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&lt;br /&gt;
  usage: getbuildtest [options] [target]&lt;br /&gt;
    [target] is determined automatically if not specified&lt;br /&gt;
    [options] is one of the following:&lt;br /&gt;
     --help : prints this message and exits&lt;br /&gt;
     --clean : delete lib and build directories first&lt;br /&gt;
     -t --test-type : CTest test target&lt;br /&gt;
     --release : compile with optimization flags&lt;br /&gt;
     --update : does a cvs/svn update on each lib&lt;br /&gt;
     --pack : builds a distribution package (cpack)&lt;br /&gt;
&lt;br /&gt;
== Errors from getbuildtest ==&lt;br /&gt;
&lt;br /&gt;
You will need to have your firewall configured to allow access to cvs servers through port 2401. Also you need 8081 for submitting to the dashboard.&lt;br /&gt;
&lt;br /&gt;
Other errors might mean you don't have all the build tools (see next section).&lt;br /&gt;
&lt;br /&gt;
If you want to generate a log of the build process, you can use a command like the following:&lt;br /&gt;
&lt;br /&gt;
 # for csh/tcsh:&lt;br /&gt;
 ./Scripts/getbuildtest.tcl |&amp;amp; tee build.log&lt;br /&gt;
or&lt;br /&gt;
 # for sh/bash:&lt;br /&gt;
 ./Scripts/getbuildtest.tcl 2&amp;gt;&amp;amp;1 | tee build.log&lt;br /&gt;
&lt;br /&gt;
== Updating Your getbuildtest Build ==&lt;br /&gt;
&lt;br /&gt;
There are a few options:&lt;br /&gt;
&lt;br /&gt;
* you can re-run getbuildtest and it will update slicer3 and rebuild (just slicer3)&lt;br /&gt;
* you can add the --update option and all the libs will get a cvs/svn update and will rebuild if needed (good for tracking the development head of VTK/ITK/KWWidgets etc).&lt;br /&gt;
* you can just 'svn update' in the Slicer3 directory and then do 'make' in the Slicer3-build to get just the latest Slicer3 code.&lt;br /&gt;
&lt;br /&gt;
The following command for unix machines will update, build, and launch the latest Slicer3:&lt;br /&gt;
&lt;br /&gt;
 svn update &amp;amp;&amp;amp; (cd ../Slicer3-build; make &amp;amp;&amp;amp; ./bin/Slicer3)&lt;br /&gt;
&lt;br /&gt;
Note that on Windows you can also use the CMakeSetup.exe interface to CMake and then use Microsoft Visual Studio for debugging.  You can use a command like the following in a cygwin shell to use the slicer launcher to start up visual studio with the correct environment to find the .dll files needed for debugging.&lt;br /&gt;
&lt;br /&gt;
 ./Slicer3.exe --launch c:/Program\ Files/Microsoft\ Visual\ Studio\ 8/Common7/IDE/devenv.exe --detach Slicer3.sln&lt;br /&gt;
&lt;br /&gt;
== getbuildtest on linux ==&lt;br /&gt;
&lt;br /&gt;
To compile Slicer3 and do development, be sure you have a complete set of development packages installed on your machine.  The exact packages vary by distribution, but include:&lt;br /&gt;
* gcc&lt;br /&gt;
* gcc-c++&lt;br /&gt;
* libX11 &lt;br /&gt;
* libX11-devel (libX11-dev  on Ubuntu 7.04)&lt;br /&gt;
* libXt-devel (libXt-dev on Ubuntu)&lt;br /&gt;
* opengl/mesa (libgl1-mesa-dev on Ubuntu)&lt;br /&gt;
&lt;br /&gt;
Ubuntu one line install:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install subversion cvs tcl8.4 gcc g++ libX11-dev libXt-dev libxext-dev libgl1-mesa-dev libncurses5-dev tcsh&lt;br /&gt;
&lt;br /&gt;
Also, be sure you have OpenGL and the GLX extension to X working.  To check the installation, it is usually enough to confirm that the command &amp;lt;pre&amp;gt;glxgears&amp;lt;/pre&amp;gt; runs with no errors.&lt;br /&gt;
&lt;br /&gt;
== getbuildtest on windows ==&lt;br /&gt;
&lt;br /&gt;
The script should work fine on a properly configured windows environment. Current requirements are:&lt;br /&gt;
&lt;br /&gt;
* Developer Studio 8 2005 &lt;br /&gt;
** For Developer Studio 9.0 2008 Visual C++ Express which is free from Microsoft [[Slicer3:Build_Instructions#Information_on_Free_Microsoft_C.2B.2B_Compiler_on_Windows|see below]].&lt;br /&gt;
** Other releases of visual studio also work (7, and 7.1)&lt;br /&gt;
** If they are installed in the default locations in &amp;quot;c:/Program Files&amp;quot; they will be detected by the build script automatically (you need to edit slicer_variables.tcl to point to the installation).&lt;br /&gt;
* [http://www.cygwin.com Cygwin] with the following packages&lt;br /&gt;
** tcltk&lt;br /&gt;
** svn&lt;br /&gt;
** cvs&lt;br /&gt;
** unzip&lt;br /&gt;
** curl&lt;br /&gt;
* With Developers Studio and cygwin installed, you only need to do the svn checkout and getbuildtest script to get a fully working Slicer3 plus all the tools you need to develop new code.&lt;br /&gt;
&lt;br /&gt;
Note: CMake and VTK will not work on a FAT formatted disk (use NTFS).&lt;br /&gt;
&lt;br /&gt;
== getbuildtest on Apple Mac OS X ==&lt;br /&gt;
&lt;br /&gt;
For Mac OS 10.4.10 install the following from the OS disks (not installed by default on new machines):&lt;br /&gt;
* Xcode Tools (OS Disk 1, default window)&lt;br /&gt;
* X11: also on OS Disk 1, but you need to scroll down and find the Optional Installs installer and select X11 under Applications. See [http://porting.openoffice.org/mac/faq/installing/X11.html step-by-step instructions].&lt;br /&gt;
* X11SDK - from OS Disk 1, Xcode Tools/Packages/X11SDK.pkg&lt;br /&gt;
* Subversion.  Installation [http://downloads.open.collab.net/binaries.html options here].  Get the latest svn version for compatibility with the server and be sure your client includes SSL (so it can access https repositories).&lt;br /&gt;
&lt;br /&gt;
Remember to run getbuildtest from an xterm so the tests can access the X server.&lt;br /&gt;
&lt;br /&gt;
Note: The X11 application on Mac OSX 10.5.x (Leopard) crashes frequently.  This is a known issue that is still under investigation.&lt;br /&gt;
&lt;br /&gt;
== configuration options ==&lt;br /&gt;
&lt;br /&gt;
The file Slicer3/slicer_variables.tcl includes configuration options for which versions of support libraries to use.  You may want to change these for testing or to get access to new functionality.&lt;br /&gt;
&lt;br /&gt;
These flags control the versions of code pulled from external repositories:&lt;br /&gt;
&lt;br /&gt;
 set ::Slicer3_TAG &amp;quot;http://www.na-mic.org/svn/Slicer3/trunk&amp;quot;&lt;br /&gt;
 set ::CMAKE_TAG &amp;quot;CMake-2-6&amp;quot;&lt;br /&gt;
 set ::KWWidgets_TAG &amp;quot;Slicer-3-2&amp;quot;&lt;br /&gt;
 set ::VTK_TAG &amp;quot;VTK-5-2&amp;quot;&lt;br /&gt;
 set ::ITK_TAG ITK-3-6&lt;br /&gt;
 set ::PYTHON_TAG &amp;quot;http://svn.python.org/projects/python/branches/release25-maint&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Other libraries, such as Tcl/Tk, teem, and curl, together with windows binaries for CMake and Tcl/Tk are mirrored for efficiency at http://www.na-mic.org/svn/Slicer3-lib-mirrors.&lt;br /&gt;
&lt;br /&gt;
For example, you may want a build against the ITK cvs head.  Change the flag value and then run &lt;br /&gt;
&lt;br /&gt;
 getbuildtest.tcl --update &lt;br /&gt;
&lt;br /&gt;
which will get the version from cvs, build it, and rebuild slicer3.  Depending on how radically different the versions you build are, you may need to use the --clean option which will delete all build directories and rebuild.&lt;br /&gt;
&lt;br /&gt;
= Manual checkout/build of Slicer3 and support libraries: =&lt;br /&gt;
&lt;br /&gt;
Note: the getbuiltest script described above simply automates and systematizes a sequence of build operations that can be performed manually.  You may want to use the manual method if you are testing against different versions of VTK or ITK, or if you have existing build trees that you want to re-use.  ''Note that not all combinations of software versions and build flags are actively tested.  The following information may not be up to date as new code is added to the various repositories.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisite software ==&lt;br /&gt;
&lt;br /&gt;
You need to get and build the following packages if you aren't using the getbuildtest script:&lt;br /&gt;
&lt;br /&gt;
# [http://www.cmake.org CMake (2.4.1 or later)]&lt;br /&gt;
# [http://www.tcl.tk Tcl/Tk (8.4 or later)]&lt;br /&gt;
# [http://sourceforge.net/projects/incrtcl/ incrTcl (3.2.1)]&lt;br /&gt;
# [http://www.vtk.org VTK 5.0]&lt;br /&gt;
# [http://www.itk.org ITK 3.4]&lt;br /&gt;
# [http://www.kwwidgets.org KWWidgets Slicer-3-0 tag]&lt;br /&gt;
# [http://teem.sf.net Teem (1.9.0)]&lt;br /&gt;
# [http://www.na-mic.org/svn/Slicer3-lib-mirrors/trunk/cmcurl/ SlicerLibCurl (HEAD tag)]&lt;br /&gt;
&lt;br /&gt;
== Build Steps ==&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
 $ svn co http://www.na-mic.org/svn/Slicer3/trunk Slicer3&lt;br /&gt;
 $ cvs -d :pserver:anoncvs@www.vtk.org:/cvsroot/VTK co VTK -r VTK-5-0&lt;br /&gt;
 $ cvs -d :pserver:anoncvs@www.itk.org:/cvsroot/Insight co Insight -r ITK-3-4&lt;br /&gt;
 $ cvs -d :pserver:anoncvs@www.kwwidgets.org:/cvsroot/KWWidgets co KWWidgets -r Slicer-3-0&lt;br /&gt;
 $ svn co http://www.na-mic.org/svn/Slicer3-lib-mirrors/trunk/cmcurl cmcurl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configure and build ITK ===&lt;br /&gt;
&lt;br /&gt;
* BUILD_SHARED_LIBS ON&lt;br /&gt;
* CMAKE_SKIP_RPATH ON&lt;br /&gt;
&lt;br /&gt;
=== Configure and build VTK ===&lt;br /&gt;
&lt;br /&gt;
* All systems:&lt;br /&gt;
** BUILD_SHARED_LIBS ON&lt;br /&gt;
** CMAKE_SKIP_RPATH ON&lt;br /&gt;
** VTK_WRAP_TCL ON&lt;br /&gt;
** VTK_DEBUG_LEAKS ON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* MacOSX specific (Make sure to install [http://www.apple.com/downloads/macosx/apple/x11formacosx.html X11]):&lt;br /&gt;
** VTK_USE_CARBON OFF&lt;br /&gt;
** VTK_USE_X ON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Note, those options '''should not''' appear, since they disapear since VTK5:&lt;br /&gt;
** VTK_USE_HYBRID ON&lt;br /&gt;
** VTK_USE_PATENTED ON&lt;br /&gt;
&lt;br /&gt;
* Make sure that the TCL and TK path are set properly&lt;br /&gt;
** TCL_* and TK_*&lt;br /&gt;
&lt;br /&gt;
=== Configure and build KWWidgets ===&lt;br /&gt;
&lt;br /&gt;
* You need to specify where your VTK build tree is.&lt;br /&gt;
* BUILD_SHARED_LIBS ON&lt;br /&gt;
* CMAKE_SKIP_RPATH ON&lt;br /&gt;
&lt;br /&gt;
=== Configure and build curl ===&lt;br /&gt;
&lt;br /&gt;
* BUILD_SHARED_LIBS OFF&lt;br /&gt;
&lt;br /&gt;
== Build and Run Slicer3 ==&lt;br /&gt;
&lt;br /&gt;
=== Manually ===&lt;br /&gt;
&lt;br /&gt;
# Check out and build slicer3 (e.g. on linux)&lt;br /&gt;
&lt;br /&gt;
  svn co http://www.na-mic.org/svn/Slicer3/trunk Slicer3&lt;br /&gt;
  mkdir Slicer3-build&lt;br /&gt;
  cd Slicer3-build&lt;br /&gt;
  ccmake ../Slicer3&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
Again make sure to turn:&lt;br /&gt;
&lt;br /&gt;
* BUILD_SHARED_LIBS ON&lt;br /&gt;
* CMAKE_SKIP_RPATH ON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; Start slicer with the Slicer3 executable in your build directory.&lt;br /&gt;
&lt;br /&gt;
= SBuild =&lt;br /&gt;
SBuild is a new, experimental build system for Slicer.  It is based on getbuildtest2.tcl and genlib2.tcl, but rather than try to hid the gory details of building Slicer, SBuild attempts to expose a reasonable amount to the developer.  The interface should be reasonably intuitive, but a brief walk through is useful.  Click on the thumbnails for larger views.  SBuild allows you to update and build just the portions of Slicer that you may require or want to build.  Any of the required libraries may be specified to be build by SBuild, or to use an existing build.  Existing libraries are not controlled by SBuild.  Under the hood, SBuild calls CMake to do the heavy lifting, just like getbuildtest2.tcl.&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
{|&lt;br /&gt;
|+ SBuild screenshots&lt;br /&gt;
|-&lt;br /&gt;
| [[image:SBuild-MainWindow.png|center|250px|Main SBuild Window]] || [[image:SBuild-RequiredWindow.png|center|250px|Required libraries]] &lt;br /&gt;
||[[image:SBuild-AllExternal.png|center|250px|SBuild configured for all external builds]]  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Configure the &amp;quot;Slicer Source Directory&amp;quot; by clicking on the &amp;quot;...&amp;quot; button, or typing a path to where you would like Slicer source saved&lt;br /&gt;
## Configure the &amp;quot;Slicer Build Directory&amp;quot; and &amp;quot;Slicer Library Directory&amp;quot; in the same fashion&lt;br /&gt;
# (Optional:) Switch to the &amp;quot;Required Libs&amp;quot; tab&lt;br /&gt;
## Configure any of the external builds that you may have by clicking on the checkbox next to the &amp;quot;Use external build&amp;quot; label&lt;br /&gt;
## When prompted, find the external build directory&lt;br /&gt;
## Note: SBuild looks for specific files inside the directory you choose, if not found you will be warned.  In this case, choose better.&lt;br /&gt;
## Any of the required libraries may be Updated, Configured, or Built from this tab.&lt;br /&gt;
# To build everything, go to the Slicer3 tab and click &amp;quot;All&amp;quot;&lt;br /&gt;
## Output of the build process should fly by.&lt;br /&gt;
&lt;br /&gt;
== Binary downloads ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:SBuild-darwin-ppc.gz| Mac OSX PPC (must use X11)]]&lt;br /&gt;
* [[Media:SBuild-darwin-x86.gz| Mac OSX x86 (must use X11)]]&lt;br /&gt;
* [[Media:SBuild-linux-x86.gz| Linux x86]]&lt;br /&gt;
* [[Media:SBuild-linux-x86_64.gz| Linux x86-64]]&lt;br /&gt;
* [[Media:SBuild-win32_exe.gz| Win32 (please properly rename it)]]&lt;br /&gt;
* [[Media:SBuild.kit.gz| Generic tclkit (any platform)]]&lt;br /&gt;
&lt;br /&gt;
== Adding new Libraries to SBuild ==&lt;br /&gt;
The default package of SBuild contains the minimal number of required libraries to build Slicer.  Currently no optional libraries are installed.  The procedure for providing an SBuild plugin is modestly complicated, but several good examples exist.  All plugins go in SBuild.vfs/lib/SBuildPlugins.  As an example, let's create a plugin called Mythical, contained in SBuild.vfs/lib/SBuildPlugins/Mythical.tcl.&lt;br /&gt;
&lt;br /&gt;
In the Slicer3/Scripts/SBuild directory, run '''./bootstrap run''' to run SBuild, and '''./bootstrap build''' to build the Tcl Starkits.&lt;br /&gt;
&lt;br /&gt;
The first section of Mythical.tcl provides some housekeeping details:&lt;br /&gt;
&lt;br /&gt;
 package provide SBuildPlugins 1.0 &lt;br /&gt;
 &lt;br /&gt;
 lappend ::SBuild(Plugins) Mythical &lt;br /&gt;
 &lt;br /&gt;
 set ::Plugin(Mythical,Type) &amp;quot;optional&amp;quot;&lt;br /&gt;
 set ::Plugin(Mythical,Order) 100&lt;br /&gt;
 set ::Plugin(Mythical,CanUseUserBuild) 1&lt;br /&gt;
&lt;br /&gt;
The Mythical plugin must append itself to ::SBuild(Plugins) to register, and declares itself optional, builds in order 100, and can use user provided builds.&lt;br /&gt;
&lt;br /&gt;
Each plugin must provide several Tcl procs to do various functions.  The naming convention is PluginName-Function-Architecture.  In this example PluginName is Mythical.  SBuild first looks for the -Architecture variant, and failing, calls the PluginName-Function.  For instance, Mythical-Update is the Tcl proc that updates the source for Mythical, while Mythical-Build-Windows is a specialization for Windows.  The important functions are: Update, Configure, Build, and ConfigureSlicer.  The ConfigureSlicer function may append a CMake argument to be used when Slicer is configured.  If external packages are allowed, the ConfigureExternal function is called.  ConfigureExternal usually looks for libraries and sets a LibPath to be used to configure Slicer.  Examples of these functions are shown below.&lt;br /&gt;
&lt;br /&gt;
 # Here is where we would add lines to the main Slicer3 configuration&lt;br /&gt;
 proc Mythical-Setup {} {&lt;br /&gt;
   global SBuild&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # How do we setup for an external build&lt;br /&gt;
 proc Mythical-ConfigureExternal {} {&lt;br /&gt;
   global SBuild&lt;br /&gt;
   set SBuild(Mythical,LibPath) [file dirname [FindFile $::SBuild(Mythical,ExternalBuildPath) [list libMythicalCommon* MythicalCommon*.lib MythicalCommon*.dll]]]&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Add a line to Slicer's CMake command&lt;br /&gt;
 proc Mythical-ConfigureSlicer {} {&lt;br /&gt;
   global Plugin SBuild Slicer&lt;br /&gt;
   set dir [file join $SBuild(SlicerLibDir) Insight-build]&lt;br /&gt;
   if { $SBuild(Mythical,UseExternalBuild) } {&lt;br /&gt;
     set dir $SBuild(Mythical,ExternalBuildPath)&lt;br /&gt;
   }&lt;br /&gt;
   Debug &amp;quot;setting Mythical_DIR to $dir&amp;quot;&lt;br /&gt;
   lappend Slicer(CMakeArguments) -DMythical_DIR:FILEPATH=$dir&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # How do we update Mythical?&lt;br /&gt;
 proc Mythical-Update {} {&lt;br /&gt;
   Debug &amp;quot;Checking out Mythical&amp;quot;&lt;br /&gt;
   global SBuild Plugin&lt;br /&gt;
   file mkdir Insight&lt;br /&gt;
   ExecuteCommand $SBuild(SVNCommand) co http://www.mythical.org/svn/Mythical/trunk Mythical&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Configure to build&lt;br /&gt;
 proc Mythical-Configure {} {&lt;br /&gt;
   Debug &amp;quot;Configure Mythical&amp;quot;&lt;br /&gt;
   global SBuild Plugin&lt;br /&gt;
   file mkdir Mythical-build&lt;br /&gt;
   cd Mythical-build&lt;br /&gt;
   ExecuteCommand $SBuild(CMake) \&lt;br /&gt;
     -G$SBuild(Generator) \&lt;br /&gt;
     -DCMAKE_CXX_COMPILER:STRING=$::SBuild(CompilerPath)/$SBuild(Compiler) \&lt;br /&gt;
     -DCMAKE_CXX_COMPILER_FULLPATH:FILEPATH=$::SBuild(CompilerPath)/$SBuild(Compiler) \&lt;br /&gt;
     -DBUILD_SHARED_LIBS:BOOL=ON \&lt;br /&gt;
     -DCMAKE_SKIP_RPATH:BOOL=ON \&lt;br /&gt;
     -DBUILD_EXAMPLES:BOOL=OFF \&lt;br /&gt;
     -DBUILD_TESTING:BOOL=OFF \&lt;br /&gt;
     -DCMAKE_BUILD_TYPE:STRING=$::SBuild(BuildType) \&lt;br /&gt;
     -DCMAKE_CXX_FLAGS_DEBUG:STRING=$::SBuild(CMakeCXXFlagsDebug) \&lt;br /&gt;
     ../Insight&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # How do we build on windows?&lt;br /&gt;
 proc Mythical-Build-Windows {} {&lt;br /&gt;
   global SBuild&lt;br /&gt;
   cd Insight-build&lt;br /&gt;
   ExecuteCommand $SBuild(Make) Mythical.SLN /build  $SBuild(BuildType)&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # How do we build on other Makefile-based systems?&lt;br /&gt;
 proc Mythical-Build {} {&lt;br /&gt;
   Debug &amp;quot;Building Mythical&amp;quot;&lt;br /&gt;
   global SBuild&lt;br /&gt;
   cd Insight-build&lt;br /&gt;
   eval ExecuteCommand $SBuild(Make) $SBuild(ParallelMake)&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Clean up Mythical (nothing for the moment).&lt;br /&gt;
 proc Mythical-Clean {} {&lt;br /&gt;
   Debug &amp;quot;Cleaning Mythical&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[Main_Page| Slicer Wiki Pages]]&lt;br /&gt;
* [[Slicer3::Eclipse | Howto integrate Slicer3 into Eclipse]]&lt;br /&gt;
&lt;br /&gt;
== Information on Free Microsoft C++ Compiler on Windows ==&lt;br /&gt;
To build with the free version of the windows compiler, follow the instructions [[Slicer3:Build_Instructions_Windows| here.]]&lt;br /&gt;
&lt;br /&gt;
As of April 11, 2008, this works with the slicer3 svn trunk.  You will need to manually install a newer version of cmake as part of the process described in the link above.&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5259</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5259"/>
		<updated>2008-06-26T17:56:44Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Steve Aylward: SlicerIGT funding?&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Ipek Oguz: Help with Offscreen Rendering and making sure it can behave as a command-line program (without a KWW GUI)&lt;br /&gt;
** Ragani: Try to convert legacy code, vtkImageResliceST.cxx, based on old vtkImageReslice&lt;br /&gt;
** Craig Sharp: Help with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;br /&gt;
** Luis: discuss the IO formats introspection (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
** Cleanup some installation/configuration rules in QdecModule and TumorGrowth&lt;br /&gt;
* Wednesday&lt;br /&gt;
** Gary Christensen &amp;amp; team: CMake/CPack presentation, help&lt;br /&gt;
** Will: build Slicer3 (need to update the Wiki)&lt;br /&gt;
** Alex: check the Models tree widget issue, i.e. that it is lacking the usability found in Slicer2 (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
** Add option vtkKWTreeWithScrollbars to resize the tree manually (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Thursday&lt;br /&gt;
** Steve, Ron, Will: strategy for the infrastructure required to create Slicer3 binaries and separate modules that can be reviewed, downloaded, integrated in Slicer3. Not to be completed by RSNA. Experimentation for the moment. I (Seb) will produce some installers for Slicer3-Core + Modules, installers/ZIP for the CLP (which need to be fixed so that they can be built/installed separately against Slicer3), installers/ZIP for Slicer3-modules (using the macros that will pull them out of their repository and build them automatically), and a GUI in Slicer3 to fetch the ZIP and unpack them.&lt;br /&gt;
** Wendy: got some info about the current font system, and make sure she agrees with the rewrite. We will stick to a simpler system, i.e. stick to the default system font and compute a smaller font from there. There will still be a (likely hidden) way to increase the font size globally, in case somebody is presenting through a projector. Feedback from the community will lead to some adjustment, but we will stay clear from hardcoding font size and family.&lt;br /&gt;
** Bill: work on the launcher so that it supports a splash screen and the current StarKit launcher can be avoid in RPM installers... &lt;br /&gt;
*** Win32 Resources:&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.microsoft.com/msj/1099/c/c1099.aspx How can I implement a start-up screen that displays a bitmap in MFC?]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://support.microsoft.com/kb/815376 How to create and insert a splash screen in an SDI application or in an MDI application by using Visual C++ .NET or Visual C++ 2005]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.ucancode.net/Visual_C_Control/Splash-screen-of-transparent-bitmap-vc-sample.htm VC++ MFC Sample Code:   Transparent bitmap splash screen]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.codeproject.com/KB/winsdk/win32splash.aspx Own-thread Win32 splash screen]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.codejock.com/support/articles/mfc/general/g_2.asp Dialog With Splash Screen]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.endurasoft.com/techtalk/splash.htm Making a Splash]&amp;lt;/small&amp;gt;&lt;br /&gt;
**** &amp;lt;small&amp;gt;[http://www.codeproject.com/KB/dialog/splasher.aspx Splasher v1.32 - A Splash Screen Implementation]&amp;lt;/small&amp;gt;&lt;br /&gt;
*** X11 Resources:&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5258</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5258"/>
		<updated>2008-06-26T15:53:58Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis&amp;lt;br&amp;gt;'''[UPDATE]''' see ImageFileReader&amp;lt;...&amp;gt;::GenerateOutputInformation, BUT every IO file/reader need to expose the list of file extensions it can read and write. Luis is on it, to be added 3.8 end of July. Luis is fast, it's [http://public.kitware.com/cgi-bin/viewcvs.cgi/Code/IO/itkImageIOBase.h?root=Insight&amp;amp;r1=1.48&amp;amp;r2=1.49 in the CVS], and examplified in [http://public.kitware.com/cgi-bin/viewcvs.cgi/Testing/Code/IO/itkImageIOFileNameExtensionsTests.cxx?root=Insight&amp;amp;sortby=date&amp;amp;view=log itkImageIOFileNameExtensionsTests.cxx]&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
** &amp;lt;small&amp;gt;Ron: Starting with the system default font is a good idea. I have encountered many situations where it is critical to be able to change the font to larger or smaller. Having a keyboard shortcut for situations where the menu is not accessible might be a good idea too: Ctrl + and ctrl - come to mind, like in firefox.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will. Actually a better starting point could be the color bar actor.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;br&amp;gt;'''[UPDATE]''' vtkKWTreeWithScrollbars has now a ResizeButtonsVisibility flag that is set for the models and MRML tree, and allow for two small resize buttons to be used to resize a tree.&amp;lt;/small&amp;gt;[[Image:KWWidgetsExpandTreeButton.png|center|thumb|250px]] &lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;br&amp;gt;'''[UPDATE]''' Given the size of the testing scene (say, 200 elements), the multicolumn widget would be too slow if each row had a label, a color button, a visibility button, etc., and the indentation would be a ugly hack. The tree widget does support custom widgets per row, but not in separate columns: they would be misaligned (either on the left or right of a leaf label). It seems we need the TkTreeCtrl widget which was added last year when this problem was raised already; Seb to create a C++ class around this monster library and expose only the methods we need for this very specific problem; it will take some time, since TkTreeCtrl is the most complex Tcl/Tk widget to be found in KWWidgets so far.&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5257</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5257"/>
		<updated>2008-06-26T15:42:17Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Steve Aylward: SlicerIGT funding?&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Ipek Oguz: Help with Offscreen Rendering and making sure it can behave as a command-line program (without a KWW GUI)&lt;br /&gt;
** Ragani: Try to convert legacy code, vtkImageResliceST.cxx, based on old vtkImageReslice&lt;br /&gt;
** Craig Sharp: Help with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;br /&gt;
** Luis: discuss the IO formats introspection (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
** Cleanup some installation/configuration rules in QdecModule and TumorGrowth&lt;br /&gt;
* Wednesday&lt;br /&gt;
** Gary Christensen &amp;amp; team: CMake/CPack presentation, help&lt;br /&gt;
** Will: build Slicer3 (need to update the Wiki)&lt;br /&gt;
** Alex: check the Models tree widget issue, i.e. that it is lacking the usability found in Slicer2 (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
** Add option vtkKWTreeWithScrollbars to resize the tree manually (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Thursday&lt;br /&gt;
** Steve, Ron, Will: strategy for the infrastructure required to create Slicer3 binaries and separate modules that can be reviewed, downloaded, integrated in Slicer3. Not to be completed by RSNA. Experimentation for the moment. I (Seb) will produce some installers for Slicer3-Core + Modules, installers/ZIP for the CLP (which need to be fixed so that they can be built/installed separately against Slicer3), installers/ZIP for Slicer3-modules (using the macros that will pull them out of their repository and build them automatically), and a GUI in Slicer3 to fetch the ZIP and unpack them.&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5256</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5256"/>
		<updated>2008-06-26T15:14:43Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis&amp;lt;br&amp;gt;'''[UPDATE]''' see ImageFileReader&amp;lt;...&amp;gt;::GenerateOutputInformation, BUT every IO file/reader need to expose the list of file extensions it can read and write. Luis is on it, to be added 3.8 end of July. Luis is fast, it's [http://public.kitware.com/cgi-bin/viewcvs.cgi/Code/IO/itkImageIOBase.h?root=Insight&amp;amp;r1=1.48&amp;amp;r2=1.49 in the CVS], and examplified in [http://public.kitware.com/cgi-bin/viewcvs.cgi/Testing/Code/IO/itkImageIOFileNameExtensionsTests.cxx?root=Insight&amp;amp;sortby=date&amp;amp;view=log itkImageIOFileNameExtensionsTests.cxx]&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
** &amp;lt;small&amp;gt;Ron: Starting with the system default font is a good idea. I have encountered many situations where it is critical to be able to change the font to larger or smaller. Having a keyboard shortcut for situations where the menu is not accessible might be a good idea too: Ctrl + and ctrl - come to mind, like in firefox.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;br&amp;gt;'''[UPDATE]''' vtkKWTreeWithScrollbars has now a ResizeButtonsVisibility flag that is set for the models and MRML tree, and allow for two small resize buttons to be used to resize a tree.&amp;lt;/small&amp;gt;[[Image:KWWidgetsExpandTreeButton.png|center|thumb|250px]] &lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;br&amp;gt;'''[UPDATE]''' Given the size of the testing scene (say, 200 elements), the multicolumn widget would be too slow if each row had a label, a color button, a visibility button, etc., and the indentation would be a ugly hack. The tree widget does support custom widgets per row, but not in separate columns: they would be misaligned (either on the left or right of a leaf label). It seems we need the TkTreeCtrl widget which was added last year when this problem was raised already; Seb to create a C++ class around this monster library and expose only the methods we need for this very specific problem; it will take some time, since TkTreeCtrl is the most complex Tcl/Tk widget to be found in KWWidgets so far.&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:KWWidgetsExpandTreeButton.png&amp;diff=5255</id>
		<title>File:KWWidgetsExpandTreeButton.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:KWWidgetsExpandTreeButton.png&amp;diff=5255"/>
		<updated>2008-06-26T15:10:52Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5254</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5254"/>
		<updated>2008-06-26T14:58:38Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis&amp;lt;br&amp;gt;'''[UPDATE]''' see ImageFileReader&amp;lt;...&amp;gt;::GenerateOutputInformation, BUT every IO file/reader need to expose the list of file extensions it can read and write. Luis is on it, to be added 3.8 end of July. Luis is fast, it's [http://public.kitware.com/cgi-bin/viewcvs.cgi/Code/IO/itkImageIOBase.h?root=Insight&amp;amp;r1=1.48&amp;amp;r2=1.49 in the CVS], and examplified in [http://public.kitware.com/cgi-bin/viewcvs.cgi/Testing/Code/IO/itkImageIOFileNameExtensionsTests.cxx?root=Insight&amp;amp;sortby=date&amp;amp;view=log itkImageIOFileNameExtensionsTests.cxx]&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
** &amp;lt;small&amp;gt;Ron: Starting with the system default font is a good idea. I have encountered many situations where it is critical to be able to change the font to larger or smaller. Having a keyboard shortcut for situations where the menu is not accessible might be a good idea too: Ctrl + and ctrl - come to mind, like in firefox.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;br&amp;gt;'''[UPDATE]''' vtkKWTreeWithScrollbars has now a ResizeButtonsVisibility flag that is set for the models and MRML tree, and allow for two small resize buttons to be used to resize a tree.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;br&amp;gt;'''[UPDATE]''' Given the size of the testing scene (say, 200 elements), the multicolumn widget would be too slow if each row had a label, a color button, a visibility button, etc., and the indentation would be a ugly hack. The tree widget does support custom widgets per row, but not in separate columns: they would be misaligned (either on the left or right of a leaf label). It seems we need the TkTreeCtrl widget which was added last year when this problem was raised already; Seb to create a C++ class around this monster library and expose only the methods we need for this very specific problem; it will take some time, since TkTreeCtrl is the most complex Tcl/Tk widget to be found in KWWidgets so far.&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5253</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5253"/>
		<updated>2008-06-26T14:46:13Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Training Event in Germany */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis&amp;lt;br&amp;gt;'''[UPDATE]''' see ImageFileReader&amp;lt;...&amp;gt;::GenerateOutputInformation, BUT every IO file/reader need to expose the list of file extensions it can read and write. Luis is on it, to be added 3.8 end of July. Luis is fast, it's [http://public.kitware.com/cgi-bin/viewcvs.cgi/Code/IO/itkImageIOBase.h?root=Insight&amp;amp;r1=1.48&amp;amp;r2=1.49 in the CVS], and examplified in [http://public.kitware.com/cgi-bin/viewcvs.cgi/Testing/Code/IO/itkImageIOFileNameExtensionsTests.cxx?root=Insight&amp;amp;sortby=date&amp;amp;view=log itkImageIOFileNameExtensionsTests.cxx]&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
** &amp;lt;small&amp;gt;Ron: Starting with the system default font is a good idea. I have encountered many situations where it is critical to be able to change the font to larger or smaller. Having a keyboard shortcut for situations where the menu is not accessible might be a good idea too: Ctrl + and ctrl - come to mind, like in firefox.&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;br&amp;gt;'''[UPDATE]''' vtkKWTreeWithScrollbars has now a ResizeButtonsVisibility flag that is set for the models and MRML tree, and allow for two small resize buttons to be used to resize a tree.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;br&amp;gt;'''[UPDATE]''' Given the size of the testing scene (say, 200 elements), the multicolumn widget would be too slow if each row had a label, a color button, a visibility button, etc., and the indentation would be a ugly hack. The tree widget does support custom widgets per row, but not in separate columns: they would be misaligned (either on the left or right of a leaf label). It seems we need the TkTreeCtrl widget which was added last year when this problem was raised already; Seb to create a C++ class around this monster library and expose only the methods we need for this very specific problem; it will take some time, since TkTreeCtrl is the most complex Tcl/Tk widget to be found in KWWidgets so far.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Tree: seen while Daniele was doing her tutorial: drag and dropping a leaf to a new parent will trigger an event that would repopulate the whole tree, hence losing the focus of the selection; she had to go down the list, etc etc. Let's make sure the focus is not lost...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5251</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5251"/>
		<updated>2008-06-25T21:26:09Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Steve Aylward: SlicerIGT funding?&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Ipek Oguz: Help with Offscreen Rendering and making sure it can behave as a command-line program (without a KWW GUI)&lt;br /&gt;
** Ragani: Try to convert legacy code, vtkImageResliceST.cxx, based on old vtkImageReslice&lt;br /&gt;
** Craig Sharp: Help with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;br /&gt;
** Luis: discuss the IO formats introspection (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
** Cleanup some installation/configuration rules in QdecModule and TumorGrowth&lt;br /&gt;
* Wednesday&lt;br /&gt;
** Gary Christensen &amp;amp; team: CMake/CPack presentation, help&lt;br /&gt;
** Will: build Slicer3 (need to update the Wiki)&lt;br /&gt;
** Alex: check the Models tree widget issue, i.e. that it is lacking the usability found in Slicer2 (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
** Add option vtkKWTreeWithScrollbars to resize the tree manually (see [[User:Barre/TODO|TODO]])&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5250</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5250"/>
		<updated>2008-06-25T21:25:04Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis&amp;lt;br&amp;gt;'''[UPDATE]''' see ImageFileReader&amp;lt;...&amp;gt;::GenerateOutputInformation, BUT every IO file/reader need to expose the list of file extensions it can read and write. Luis is on it, to be added 3.8 end of July.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;br&amp;gt;'''[UPDATE]''' vtkKWTreeWithScrollbars has now a ResizeButtonsVisibility flag that is set for the models and MRML tree, and allow for two small resize buttons to be used to resize a tree.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;br&amp;gt;'''[UPDATE]''' Given the size of the testing scene (say, 200 elements), the multicolumn widget would be too slow if each row had a label, a color button, a visibility button, etc., and the indentation would be a ugly hack. The tree widget does support custom widgets per row, but not in separate columns: they would be misaligned (either on the left or right of a leaf label). It seems we need the TkTreeCtrl widget which was added last year when this problem was raised already; Seb to create a C++ class around this monster library and expose only the methods we need for this very specific problem; it will take some time, since TkTreeCtrl is the most complex Tcl/Tk widget to be found in KWWidgets so far.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Tree: seen while Daniele was doing her tutorial: drag and dropping a leaf to a new parent will trigger an event that would repopulate the whole tree, hence losing the focus of the selection; she had to go down the list, etc etc. Let's make sure the focus is not lost...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5249</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5249"/>
		<updated>2008-06-25T21:06:07Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis&amp;lt;br&amp;gt;'''[UPDATE]''' see ImageFileReader&amp;lt;...&amp;gt;::GenerateOutputInformation, BUT every IO file/reader need to expose the list of file extensions it can read and write. Luis is on it, to be added 3.8 end of July.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;br&amp;gt;'''[UPDATE]''' vtkKWTreeWithScrollbars has now a ResizeButtonsVisibility flag that is set for the models and MRML tree, and allow for two small resize buttons to be used to resize a tree.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Tree: seen while Daniele was doing her tutorial: drag and dropping a leaf to a new parent will trigger an event that would repopulate the whole tree, hence losing the focus of the selection; she had to go down the list, etc etc. Let's make sure the focus is not lost...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5248</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5248"/>
		<updated>2008-06-25T21:04:11Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Steve Aylward: SlicerIGT funding?&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Ipek Oguz: Help with Offscreen Rendering and making sure it can behave as a command-line program (without a KWW GUI)&lt;br /&gt;
** Ragani: Try to convert legacy code, vtkImageResliceST.cxx, based on old vtkImageReslice&lt;br /&gt;
** Craig Sharp: Help with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;br /&gt;
** Luis: discuss the IO formats introspection (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
** Cleanup some installation/configuration rules in QdecModule and TumorGrowth&lt;br /&gt;
* Wednesday&lt;br /&gt;
** Gary Christensen &amp;amp; team: CMake/CPack presentation, help&lt;br /&gt;
** Will: build Slicer3 (need to update the Wiki)&lt;br /&gt;
** Add option vtkKWTreeWithScrollbars to resize the tree manually (see [[User:Barre/TODO|TODO]])&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5247</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5247"/>
		<updated>2008-06-25T16:35:00Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Steve Aylward: SlicerIGT funding?&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Ipek Oguz: Help with Offscreen Rendering and making sure it can behave as a command-line program (without a KWW GUI)&lt;br /&gt;
** Ragani: Try to convert legacy code, vtkImageResliceST.cxx, based on old vtkImageReslice&lt;br /&gt;
** Craig Sharp: Help with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;br /&gt;
** Cleanup some installation/configuration rules in QdecModule and TumorGrowth&lt;br /&gt;
* Wednesday&lt;br /&gt;
** Gary Christensen &amp;amp; team?&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5246</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5246"/>
		<updated>2008-06-25T13:21:33Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Training Event in Germany */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis;&amp;lt;br&amp;gt;'''[UPDATE]''' see ImageFileReader&amp;lt;...&amp;gt;::GenerateOutputInformation, BUT every IO file/reader need to expose the list of file extensions it can read and write. Luis is on it, to be added 3.8 end of July.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Tree: seen while Daniele was doing her tutorial: drag and dropping a leaf to a new parent will trigger an event that would repopulate the whole tree, hence losing the focus of the selection; she had to go down the list, etc etc. Let's make sure the focus is not lost...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5245</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5245"/>
		<updated>2008-06-25T03:31:35Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization (see [[User:Barre/TODO|TODO]])&lt;br /&gt;
* Steve Aylward: SlicerIGT funding?&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Ipek Oguz: Help with Offscreen Rendering and making sure it can behave as a command-line program (without a KWW GUI)&lt;br /&gt;
** Ragani: Try to convert legacy code, vtkImageResliceST.cxx, based on old vtkImageReslice&lt;br /&gt;
** Craig Sharp: Help with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;br /&gt;
** Cleanup some installation/configuration rules in QdecModule and TumorGrowth&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5244</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5244"/>
		<updated>2008-06-24T22:01:59Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Training Event in Germany */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis; DONE, see ImageFileReader&amp;lt;...&amp;gt;::GenerateOutputInformation, BUT every IO file/reader need to expose the list of file extensions it can read and write. Luis is on it, to be added 3.8 end of July.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Tree: seen while Daniele was doing her tutorial: drag and dropping a leaf to a new parent will trigger an event that would repopulate the whole tree, hence losing the focus of the selection; she had to go down the list, etc etc. Let's make sure the focus is not lost...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5243</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5243"/>
		<updated>2008-06-24T22:01:17Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Training Event in Germany */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis; DONE, see ImageFileReader&amp;lt;...&amp;gt;::GenerateOutputInformation, BUT every IO file/reader need to expose the list of file extensions it can read and write. Luis is on it.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Tree: seen while Daniele was doing her tutorial: drag and dropping a leaf to a new parent will trigger an event that would repopulate the whole tree, hence losing the focus of the selection; she had to go down the list, etc etc. Let's make sure the focus is not lost...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5242</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5242"/>
		<updated>2008-06-24T21:42:17Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization [[User:Barre/TODO|TODO]]&lt;br /&gt;
* Steve Aylward: SlicerIGT funding?&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Ipek Oguz: Help with Offscreen Rendering and making sure it can behave as a command-line program (without a KWW GUI)&lt;br /&gt;
** Ragani: Try to convert legacy code, vtkImageResliceST.cxx, based on old vtkImageReslice&lt;br /&gt;
** Craig Sharp: Help with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5241</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5241"/>
		<updated>2008-06-24T20:27:31Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization [[User:Barre/TODO|TODO]]&lt;br /&gt;
* Steve Aylward: SlicerIGT funding?&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Ipek Oguz: Help with Offscreen Rendering and making sure it can behave as a command-line program (without a KWW GUI)&lt;br /&gt;
** Craig Sharp: Help with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5240</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5240"/>
		<updated>2008-06-24T18:36:13Z</updated>

		<summary type="html">&lt;p&gt;Barre: /* Training Event in Germany */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Tree: seen while Daniele was doing her tutorial: drag and dropping a leaf to a new parent will trigger an event that would repopulate the whole tree, hence losing the focus of the selection; she had to go down the list, etc etc. Let's make sure the focus is not lost...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5239</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5239"/>
		<updated>2008-06-24T18:20:15Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization [[User:Barre/TODO|TODO]]&lt;br /&gt;
* Steve Aylward: SlicerIGT funding?&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Ipek Oguz: ?&lt;br /&gt;
** Craig Sharp: Helped with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5238</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5238"/>
		<updated>2008-06-24T18:17:25Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization [[User:Barre/TODO|TODO]]&lt;br /&gt;
* Tuesday&lt;br /&gt;
** Craig Sharp: Helped with Plastimatch; including the CMake code for a CLP was conflicting with his own CMake code. At the end of the day, his library needed to be linked against ITK, as opposed to just his executables; why the CLP CMake code revealed that &amp;quot;problem&amp;quot; is not clear, but in any case that's the way to go in general...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5237</id>
		<title>User:Barre/2008 Summer Project Week</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/2008_Summer_Project_Week&amp;diff=5237"/>
		<updated>2008-06-24T17:51:37Z</updated>

		<summary type="html">&lt;p&gt;Barre: New page: * Various user-friendly optimization TODO * Tuesday  ** Helped Craig  Sharp with Plastimatch; including the CMakeLists.txt code for a CLP was conflicting with his own C...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Various user-friendly optimization [[User:Barre/TODO|TODO]]&lt;br /&gt;
* Tuesday &lt;br /&gt;
** Helped Craig  Sharp with Plastimatch; including the CMakeLists.txt code for a CLP was conflicting with his own CMake code. At the end of the day, it was just his library that needed to be linked against ITK, as opposed to just his executables...&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre&amp;diff=5236</id>
		<title>User:Barre</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre&amp;diff=5236"/>
		<updated>2008-06-24T17:47:39Z</updated>

		<summary type="html">&lt;p&gt;Barre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [mailto:sebastien.barre@kitware.com Sebastien Barre]&lt;br /&gt;
* Research Engineer&lt;br /&gt;
* [http://www.kitware.com Kitware, Inc.]&lt;br /&gt;
* [http://www.kitware.com/profile/team/barre.html Profile]&lt;br /&gt;
* [[User:Barre/TODO|TODO]]&lt;br /&gt;
* [[User:Barre/2008 Summer Project Week|2008 Summer Project Week]]&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5235</id>
		<title>User:Barre/TODO</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre/TODO&amp;diff=5235"/>
		<updated>2008-06-24T17:46:02Z</updated>

		<summary type="html">&lt;p&gt;Barre: New page: ==Training Event in Germany==  Notes from a session with Ron, important items to address to improve Slicer3 usability.  * Save Data: how can one save a data...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[2008 June Workshop Germany |Training Event in Germany]]==&lt;br /&gt;
&lt;br /&gt;
Notes from a session with Ron, important items to address to improve Slicer3 usability.&lt;br /&gt;
&lt;br /&gt;
* Save Data: how can one save a data file as a specific/different ITK file format. ITK uses a IO plugin framework to support new file formats: is there a way to find the list of file formats supported by ITK at run-time.&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) to check with Luis&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Save Data: the &amp;quot;Save&amp;quot; dialog in general is very confusing and buggy. The &amp;quot;Save All&amp;quot; and &amp;quot;Save None&amp;quot; button are mislabelled since they don't perform any save. Saving data to a new file format requires the user to double-click in the file name and manually change the file extension (provided that this extension is known to the user). Changing the data directory does not update the data locations in the multicolumn list (it does if you change the data directory twice). Changing the scene directory has no impact on the data directory.&lt;br /&gt;
**&amp;lt;small&amp;gt; I (Seb) suggest that the &amp;quot;Save All/None&amp;quot; should be something like &amp;quot;Mark all for save&amp;quot;, &amp;quot;Mark none for save&amp;quot;. A button should be placed next to each data filename/location to quickly switch to a new file type (depending on what ITK can save to at run-time). The dialog is large, we have room to put a help string/label that explains a little more how the whole dialog works. Changing the data directory should update the location of each data entry in the multicolumn list correctly. A button should be added to quickly set the data directory to match the scene directory (it should not be automatic though).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Font Size: the font is definitely too small for the &amp;quot;Modules&amp;quot; menubutton or the filename label in any of the Red/Yellow/Green slice viewports. The &amp;quot;View -&amp;gt; Font Size&amp;quot; menu does not report the current font size. &lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is to avoid hard-coding font size as much as possible, and not let the user override either font size or font family: we can not support all the possible layout combinations, or guarantee it will all fit; let's focus instead on making sure it looks nice and fit decently with the default system font size. The label in the RYG slice viewports is cropped automatically to something likely too small, and not updated later on when the slice viewport is resized/maximized: to fix.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Progress Bar: the progress bar used while loading data has been removed because it was triggering too many &amp;quot;update idletasks&amp;quot;. We still need one though.&lt;br /&gt;
** &amp;lt;small&amp;gt;Steve suggests creating an OpenGL progress bar directly inside a small renderwindow. I (Seb) checked VTK's scale/slider interaction widget to see if that would do the trick. To be investigated further with the VTK's widget guru, Will.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; may be too small for some users, as it gets more and more crowded.&lt;br /&gt;
** &amp;lt;small&amp;gt;My (Seb) opinion is that we can't have it resize automatically because who knows how tall it could be, and it would push everything down. Ron is OK to have an option to do it manually, so I plan to add two icon/buttons to increase/decrease the height (numbe of lines) of the tree, say add 15 more lines, and double the size, etc. I wish we could just &amp;quot;drag&amp;quot; the whole tree frame to a new size, like expanding a window, but that's just too hard (or impossible) to implement with this Tk widget.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Models, tree: the tree in &amp;quot;Models -&amp;gt; Hierarchy -&amp;gt; Model Hierarchy&amp;quot; is not as intuitive as the previous UI found in Slicer2; for each model, one could check/uncheck the visibility and change the opacity using controls placed directly next to the model's name (i.e. on the same row). The model name/label itself would use a background color matching the color used to display the model in the 3D view, a nice hint. The tree used in Slicer3 does not do nearly as much, i.e. the user has to select a node then change its visibily using a checkbutton placed in a different frame below the tree (note that the visibility and color can be changed quickly though, by using a popup menu by right-clicking on the tree leaf).&lt;br /&gt;
** &amp;lt;small&amp;gt;I (Seb) had several discussion about this item with Alex, and I'm still not sure why this can't be done technically by adding custom widgets next to the label name for each leaf in the tree, but I will have a look at it again.&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Barre&amp;diff=5234</id>
		<title>User:Barre</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Barre&amp;diff=5234"/>
		<updated>2008-06-24T17:45:35Z</updated>

		<summary type="html">&lt;p&gt;Barre: New page: * [mailto:sebastien.barre@kitware.com Sebastien Barre] * Research Engineer * [http://www.kitware.com Kitware, Inc.] * [http://www.kitware.com/profile/team/barre.html Profile] * [[User:Barr...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [mailto:sebastien.barre@kitware.com Sebastien Barre]&lt;br /&gt;
* Research Engineer&lt;br /&gt;
* [http://www.kitware.com Kitware, Inc.]&lt;br /&gt;
* [http://www.kitware.com/profile/team/barre.html Profile]&lt;br /&gt;
* [[User:Barre/TODO|TODO]]&lt;/div&gt;</summary>
		<author><name>Barre</name></author>
		
	</entry>
</feed>