<?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=Matt.mccormick&amp;*</id>
	<title>Slicer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.slicer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Matt.mccormick&amp;*"/>
	<link rel="alternate" type="text/html" href="https://www.slicer.org/wiki/Special:Contributions/Matt.mccormick"/>
	<updated>2026-04-08T08:54:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20170509&amp;diff=51830</id>
		<title>Developer Meetings/20170509</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20170509&amp;diff=51830"/>
		<updated>2017-05-09T14:14:52Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* To Discuss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mbox&lt;br /&gt;
| type = style&lt;br /&gt;
| text = If you would like to list your topic here, [[Special:UserLogin|create a wiki account]] and [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]&amp;lt;br&amp;gt;You can join the hangout using http://bit.ly/slicer-hangout-kw.&lt;br /&gt;
| image= [[File:smile.png|40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Update =&lt;br /&gt;
&lt;br /&gt;
= To Discuss =&lt;br /&gt;
&lt;br /&gt;
* Matt will discuss the upcoming change associated with ITK 4.12 release&lt;br /&gt;
* Adding MINC2 Image IO support&lt;br /&gt;
* Would like to add Signed Tensor to Transform Visualizer:&lt;br /&gt;
** https://gitlab.kitware.com/vtk/vtk/merge_requests/2781#note_262772&lt;br /&gt;
** https://github.com/KitwareMedical/VTKSignedTensor&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
* Since the ITK 4.12 rc1 was just tagged, the MINC2 patches are being integrated. When this is done, Slicer will be updated.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20170509&amp;diff=51824</id>
		<title>Developer Meetings/20170509</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20170509&amp;diff=51824"/>
		<updated>2017-05-09T13:36:43Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* To Discuss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mbox&lt;br /&gt;
| type = style&lt;br /&gt;
| text = If you would like to list your topic here, [[Special:UserLogin|create a wiki account]] and [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]&amp;lt;br&amp;gt;You can join the hangout using http://bit.ly/slicer-hangout-kw.&lt;br /&gt;
| image= [[File:smile.png|40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Update =&lt;br /&gt;
&lt;br /&gt;
= To Discuss =&lt;br /&gt;
&lt;br /&gt;
* Matt will discuss the upcoming change associated with ITK 4.12 release&lt;br /&gt;
* Adding MINC2 Image IO support&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20170328&amp;diff=50644</id>
		<title>Developer Meetings/20170328</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20170328&amp;diff=50644"/>
		<updated>2017-03-28T14:15:15Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* To Discuss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = style&lt;br /&gt;
| text = If you would like to list your topic here, [[Special:UserLogin|create a wiki account]] and [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]&amp;lt;br&amp;gt;You can join the hangout using http://bit.ly/slicer-hangout-kw.&lt;br /&gt;
| image= [[File:smile.png|40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= To Discuss =&lt;br /&gt;
&lt;br /&gt;
* Creation of private list (slicer-admin@googlegroups.com) that will be associated to web resources managed by the core developers. These resources will for example include:&lt;br /&gt;
** the [https://github.com/slicerbot slicerbot] Github user&lt;br /&gt;
** access to the DigitalOcean instances used to host slicer.org, wiki, ...&lt;br /&gt;
&lt;br /&gt;
* Different web resource descriptions along with instructions to access them will be documented.&lt;br /&gt;
&lt;br /&gt;
* Automatic generation of API documentation. See https://github.com/Slicer/Slicer/pull/690&lt;br /&gt;
&lt;br /&gt;
* Slicer module/extension template duplication: Does it still make sense to have the module and extension templates in [https://github.com/Slicer/Slicer/tree/master/Utilities/Templates Utilities/Templates] along with the complete example of extensions in [https://github.com/Slicer/Slicer/tree/master/Extensions/Testing Extensions/Testing] ?&lt;br /&gt;
&lt;br /&gt;
* Gitbook CEO replied to our inquiry about increasing the limit and asked &amp;quot;How many people to you foresee contributing to your docs ?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Request for adding Slicer license as an official SPDX (Software Package Data Exchange) License:&lt;br /&gt;
** https://spdx.org/spdx-license-list/request-new-license&lt;br /&gt;
** https://spdx.org/licenses/&lt;br /&gt;
** Rational: Then, we could&lt;br /&gt;
*** (1) use the qualifier &amp;quot;'License :: OSI Approved :: Slicer License&amp;quot; in python packages (and similar references in other ecosystems),&lt;br /&gt;
*** and (2) also [https://github.com/github/choosealicense.com/blob/gh-pages/CONTRIBUTING.md#adding-a-license potentially request] to have the Slicer listed as an option on Github (that said, we need at least a 1000 repos using the license on GitHub ... and we currently have [https://github.com/search?utf8=%E2%9C%93&amp;amp;q=3D+Slicer+filename%3ALICENSE&amp;amp;type=Code 110 reported]).&lt;br /&gt;
&lt;br /&gt;
* SSL error on windows: http://slicer-devel.65872.n3.nabble.com/SSL-error-in-latest-nightly-td4038361.html&lt;br /&gt;
&lt;br /&gt;
* Slicer related bugs in ITK addressed for 4.11.1 release:&lt;br /&gt;
** [https://issues.itk.org/jira/browse/ITK-3519 ITK-3519] When ThinPlateSplineTransform is read from file, -&amp;gt;ComputeWMatrix() is required to avoid a crash.&lt;br /&gt;
** [https://issues.itk.org/jira/browse/ITK-3523 ITK-3523] incorrect dicom from encapsulated metadata&lt;br /&gt;
** [https://issues.itk.org/jira/browse/ITK-3529 ITK-3529] Failed to build ITK Remote module using Release 4.11.0&lt;br /&gt;
** [https://issues.itk.org/jira/browse/ITK-3498 ITK-3498] Support modules in find_package OPTIONAL_COMPONENTS (related to getting ITK-3529 in the release branch)&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
&lt;br /&gt;
* Talk with Jon from Intel:&lt;br /&gt;
** ITK, Slicer, VTK .. popular tool.&lt;br /&gt;
** Explore how Intel could have the biggest impact.&lt;br /&gt;
** Explore area where we are headed to.&lt;br /&gt;
** Bring Intel to contribute something meaningful.&lt;br /&gt;
** How to move forward ? Collect feedback. Come with initial list of idea. Priority list.&lt;br /&gt;
** From Andras: Identify a specific project and see how we can move forward.&lt;br /&gt;
** From Matt (last week): Improve ITK threading geared toward registration.&lt;br /&gt;
** From Steve:&lt;br /&gt;
*** A lot of tool in house to look at executable and identify issue on a given arch. May something could be done in that directory.&lt;br /&gt;
*** Jon: Easy to generate a lot of results from tool. But need to identify a use case&lt;br /&gt;
*** Steve/Andrey: May be improve perf of BRAINSFit&lt;br /&gt;
*** Andras: Slicer uses one processor most of the time .. learn about how to maximize use of processor. &lt;br /&gt;
*** Jon: Profiling would allow to identify where we can optimize. Would it make sense to use Mkl ? First assumption is that we don t need MKL.&lt;br /&gt;
*** Steve: May it could be made available for open source project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Appendix =&lt;br /&gt;
&lt;br /&gt;
=== Exchange with Gitbook CEO ===&lt;br /&gt;
&lt;br /&gt;
==== From GitBook CEO ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi Jean-Christophe,&lt;br /&gt;
&lt;br /&gt;
Cool project !&lt;br /&gt;
&lt;br /&gt;
How many people to you foresee contributing to your docs ?&lt;br /&gt;
&lt;br /&gt;
Kind Regards,&lt;br /&gt;
Aaron, Co-Founder &amp;amp; CEO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== From Jc: March 22 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Dear Gitbook team,&lt;br /&gt;
&lt;br /&gt;
Thanks for both maintaining this awesome project and also offering for free it for open-source project. This is great.&lt;br /&gt;
&lt;br /&gt;
The Slicer community, whom I represent here, is evaluating Gitbook as an outlet for publishing its&lt;br /&gt;
user manual(s) associated with 3D Slicer.&lt;br /&gt;
&lt;br /&gt;
3D Slicer is an open source software platform for medical image informatics, image processing, and&lt;br /&gt;
three-dimensional visualization. It has been downloaded more than 250K times in past 5 years (with&lt;br /&gt;
a current download rate of 300 per day) and is used in more than 18 countries.&lt;br /&gt;
&lt;br /&gt;
To effectively support our community, we would like to allow contributor from all other the world to&lt;br /&gt;
submit change requests to our manuals. To allow this, we were wondering if you could bump the&lt;br /&gt;
number of contributors limit to a larger number. Unlimited would be ideal.&lt;br /&gt;
&lt;br /&gt;
Thanks for considering,&lt;br /&gt;
Jc&lt;br /&gt;
&lt;br /&gt;
For reference: https://www.gitbook.com/@slicer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/ModuleExtensionListing/Extensions_by_category&amp;diff=48961</id>
		<title>Documentation/Nightly/ModuleExtensionListing/Extensions by category</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/ModuleExtensionListing/Extensions_by_category&amp;diff=48961"/>
		<updated>2016-12-02T16:06:54Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Ultrasound */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
* [[#Extensions_by_category|Extensions by category]]&lt;br /&gt;
= Extensions by category =&lt;br /&gt;
25 categories:&lt;br /&gt;
* [[#Extensions_by_category_Astronomy|Astronomy]]&lt;br /&gt;
* [[#Extensions_by_category_Cardiac|Cardiac]]&lt;br /&gt;
* [[#Extensions_by_category_Cardiac_MRI_toolkit|Cardiac MRI toolkit]]&lt;br /&gt;
* [[#Extensions_by_category_Chest_Imaging_Platform|Chest Imaging Platform]]&lt;br /&gt;
* [[#Extensions_by_category_Converters|Converters]]&lt;br /&gt;
* [[#Extensions_by_category_Developer_Tools|Developer Tools]]&lt;br /&gt;
* [[#Extensions_by_category_Diffusion|Diffusion]]&lt;br /&gt;
* [[#Extensions_by_category_Editor_Effects|Editor Effects]]&lt;br /&gt;
* [[#Extensions_by_category_Examples|Examples]]&lt;br /&gt;
* [[#Extensions_by_category_Exporter|Exporter]]&lt;br /&gt;
* [[#Extensions_by_category_Filtering|Filtering]]&lt;br /&gt;
* [[#Extensions_by_category_IGT|IGT]]&lt;br /&gt;
* [[#Extensions_by_category_Informatics|Informatics]]&lt;br /&gt;
* [[#Extensions_by_category_Libraries|Libraries]]&lt;br /&gt;
* [[#Extensions_by_category_Mesh_Generation|Mesh Generation]]&lt;br /&gt;
* [[#Extensions_by_category_Microscopy|Microscopy]]&lt;br /&gt;
* [[#Extensions_by_category_Nuclear_Medicine|Nuclear Medicine]]&lt;br /&gt;
* [[#Extensions_by_category_Quantification|Quantification]]&lt;br /&gt;
* [[#Extensions_by_category_Radiotherapy|Radiotherapy]]&lt;br /&gt;
* [[#Extensions_by_category_Registration|Registration]]&lt;br /&gt;
* [[#Extensions_by_category_Scoliosis|Scoliosis]]&lt;br /&gt;
* [[#Extensions_by_category_Segmentation|Segmentation]]&lt;br /&gt;
* [[#Extensions_by_category_Sequences|Sequences]]&lt;br /&gt;
* [[#Extensions_by_category_Shape_Analysis|Shape Analysis]]&lt;br /&gt;
* [[#Extensions_by_category_Tractography|Tractography]]&lt;br /&gt;
* [[#Extensions_by_category_Training|Training]]&lt;br /&gt;
* [[#Extensions_by_category_Ultrasound|Ultrasound]]&lt;br /&gt;
* [[#Extensions_by_category_Vascular_Modeling_Toolkit|Vascular Modeling Toolkit]]&lt;br /&gt;
* [[#Extensions_by_category_Wizards|Wizards]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Astronomy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Astronomy == &lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerAstro|Slicer Astro]] [https://github.com/Punzo/SlicerAstro/wiki]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Cardiac'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Cardiac ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerHeart|Slicer Heart]]&lt;br /&gt;
* [http://brainsia.github.io/CardiacAgatstonMeasures/ Cardiac Agatston Measures]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Cardiac_MRI_toolkit'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Cardiac MRI toolkit ==&lt;br /&gt;
* [http://capulet.med.utah.edu/namic/cmrslicer/ Cardiac MRI Toolkit]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Chest_Imaging_Platform'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Chest Imaging Platform ==&lt;br /&gt;
* [http://www.chestimagingplatform.org Chest Imaging Platform]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Converters'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Converters ==&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/PETDICOM PETDICOMExtension]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Developer_Tools'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Developer Tools ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DeveloperToolsForExtensions|Developer Tools For Extensions]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DebuggingTools|Debugging Tools]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MatlabBridge|Matlab Bridge]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ImageMaker|Image Maker]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Diffusion'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Diffusion ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ResampleDTIlogEuclidean|Resample DTIlog Euclidean]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Editor_Effects'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Editor Effects ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/WindowLevelEffect|Window Level Effect]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Exporter'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Examples ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/OpenCVExample|OpenCV Example]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Examples'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Exporter ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerToKiwiExporter|Slicer To Kiwi Exporter]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_IGT'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Filtering ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/pyLARSlicerExtension|pyLAR Slicer Extension]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Filtering'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== IGT ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/NeedleFinder|Needle Finder]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/TrackerStabilizer Tracker Stabilizer]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/GyroGuide|Gyro Guide]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CornerAnnotation|Corner Annotation]]&lt;br /&gt;
* [https://github.com/SlicerIGT/LumpNav Lump Nav]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PercutaneousApproachAnalysis|Percutaneous Approach Analysis]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerIGT|Slicer IGT]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/iGyne|i Gyne]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ResectionPlanner|Resection Planner]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Informatics'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Informatics ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CurveMaker|Curve Maker]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/LongitudinalPETCT|Longitudinal PETCT]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Reporting|Reporting]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/mpReview|mp Review]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/TCIABrowser|TCIABrowser]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerProstate|Slicer Prostate]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Mesh_Generation'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerOpenCV|SlicerOpenCV]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Libraries'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Mesh Generation ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CBC_3D_I2MConversion|CBC 3D I2MConversion]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CleaverExtension|Cleaver Extension]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Add3DTextExtension|Add3DText Extension]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PorousScaffoldsExtension|Porous Scaffolds Extension]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Microscopy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Microscopy ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/IASEM|IASEM]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Nuclear_Medicine'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Nuclear Medicine ==&lt;br /&gt;
* [http://gti-fing.github.io/SlicerPetSpectAnalysis Pet Spect Analysis]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Quantification'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Quantification ==&lt;br /&gt;
* [http://slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/DSC_MRI_Analysis DSCMRIAnalysis]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/T1Mapping|T1Mapping]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DiceComputation|Dice Computation]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PET-IndiC|PET-Indi C]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PkModeling|Pk Modeling]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Radiotherapy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Radiotherapy ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MarginCalculator|Margin Calculator]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerRT|Slicer RT]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/GelDosimetry Gel Dosimetry Analysis]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Registration'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Registration ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CMFreg|CMFreg]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PBNRR|PBNRR]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Multi-LevelRegistration|Multi-LevelRegistration]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Scoliosis'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scoliosis ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Scoliosis|Scoliosis]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Segmentation'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Segmentation ==&lt;br /&gt;
* [http://publish.uwo.ca/~dchen285/GraphCutSegment/GraphCutSegment.html Graph Cut Segment]&lt;br /&gt;
* [http://www.nitrc.org/projects/abc ABC]&lt;br /&gt;
* [http://wiki.slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/CarreraSliceInteractiveSegmenter Carrera Slice]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SkullStripper|Skull Stripper]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PETTumorSegmentation|PETTumor Segmentation]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SwissSkullStripper|Swiss Skull Stripper]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/LAScarSegmenter|LAScar Segmenter]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/OpenCAD|Open CAD]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/IntensitySegmenter|Intensity Segmenter]]&lt;br /&gt;
* [https://github.com/Tomnl/Slicer-Wasp Wasp]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/AirwaySegmentation Airway Segmentation]&lt;br /&gt;
* [https://www.slicer.org/slicerWiki/index.php/Documentation/4.3/Modules/FastGrowCut Fast Grow Cut Effect]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/VolumeClip|Volume Clip]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Sequences'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Sequences ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Sequences|Sequences]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Shape_Analysis'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Shape Analysis ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MeshToLabelMap|Mesh To Label Map]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Q3DC|Q3DC]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ModelToModelDistance|Model To Model Distance]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/EasyClip|Easy Clip]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/PickAndPaint Pick And Paint Extension]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/AnglePlanes Angle Planes Extension]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DatabaseInteractor|Database Interactor]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Tractography'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Tractography ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/FinslerTractography|Finsler Tractography]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/UKFTractography|UKFTractography]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Training'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Training ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PerkTutor|Perk Tutor]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Vascular_Modeling_Toolkit'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Ultrasound ==&lt;br /&gt;
* [https://kitwaremedical.github.io/SlicerITKUltrasoundDoc/ SlicerITKUltrasound]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Ultrasound'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vascular Modeling Toolkit ==&lt;br /&gt;
* [http://slicer.vmtk.org/ VMTK]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Wizards'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Wizards ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ChangeTracker|Change Tracker]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/ModuleExtensionListing/Extensions_by_category&amp;diff=47382</id>
		<title>Documentation/Nightly/ModuleExtensionListing/Extensions by category</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/ModuleExtensionListing/Extensions_by_category&amp;diff=47382"/>
		<updated>2016-10-28T20:50:02Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Ultrasound */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
* [[#Extensions_by_category|Extensions by category]]&lt;br /&gt;
= Extensions by category =&lt;br /&gt;
25 categories:&lt;br /&gt;
* [[#Extensions_by_category_Astronomy|Astronomy]]&lt;br /&gt;
* [[#Extensions_by_category_Cardiac|Cardiac]]&lt;br /&gt;
* [[#Extensions_by_category_Cardiac_MRI_toolkit|Cardiac MRI toolkit]]&lt;br /&gt;
* [[#Extensions_by_category_Chest_Imaging_Platform|Chest Imaging Platform]]&lt;br /&gt;
* [[#Extensions_by_category_Converters|Converters]]&lt;br /&gt;
* [[#Extensions_by_category_Developer_Tools|Developer Tools]]&lt;br /&gt;
* [[#Extensions_by_category_Diffusion|Diffusion]]&lt;br /&gt;
* [[#Extensions_by_category_Editor_Effects|Editor Effects]]&lt;br /&gt;
* [[#Extensions_by_category_Examples|Examples]]&lt;br /&gt;
* [[#Extensions_by_category_Exporter|Exporter]]&lt;br /&gt;
* [[#Extensions_by_category_Filtering|Filtering]]&lt;br /&gt;
* [[#Extensions_by_category_IGT|IGT]]&lt;br /&gt;
* [[#Extensions_by_category_Informatics|Informatics]]&lt;br /&gt;
* [[#Extensions_by_category_Libraries|Libraries]]&lt;br /&gt;
* [[#Extensions_by_category_Mesh_Generation|Mesh Generation]]&lt;br /&gt;
* [[#Extensions_by_category_Microscopy|Microscopy]]&lt;br /&gt;
* [[#Extensions_by_category_Nuclear_Medicine|Nuclear Medicine]]&lt;br /&gt;
* [[#Extensions_by_category_Quantification|Quantification]]&lt;br /&gt;
* [[#Extensions_by_category_Radiotherapy|Radiotherapy]]&lt;br /&gt;
* [[#Extensions_by_category_Registration|Registration]]&lt;br /&gt;
* [[#Extensions_by_category_Scoliosis|Scoliosis]]&lt;br /&gt;
* [[#Extensions_by_category_Segmentation|Segmentation]]&lt;br /&gt;
* [[#Extensions_by_category_Sequences|Sequences]]&lt;br /&gt;
* [[#Extensions_by_category_Shape_Analysis|Shape Analysis]]&lt;br /&gt;
* [[#Extensions_by_category_Tractography|Tractography]]&lt;br /&gt;
* [[#Extensions_by_category_Training|Training]]&lt;br /&gt;
* [[#Extensions_by_category_Ultrasound|Ultrasound]]&lt;br /&gt;
* [[#Extensions_by_category_Vascular_Modeling_Toolkit|Vascular Modeling Toolkit]]&lt;br /&gt;
* [[#Extensions_by_category_Wizards|Wizards]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Astronomy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Astronomy == &lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerAstro|Slicer Astro]] [https://github.com/Punzo/SlicerAstro/wiki]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Cardiac'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Cardiac ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerHeart|Slicer Heart]]&lt;br /&gt;
* [http://brainsia.github.io/CardiacAgatstonMeasures/ Cardiac Agatston Measures]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Cardiac_MRI_toolkit'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Cardiac MRI toolkit ==&lt;br /&gt;
* [http://capulet.med.utah.edu/namic/cmrslicer/ Cardiac MRI Toolkit]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Chest_Imaging_Platform'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Chest Imaging Platform ==&lt;br /&gt;
* [http://www.chestimagingplatform.org Chest Imaging Platform]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Converters'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Converters ==&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/PETDICOM PETDICOMExtension]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Developer_Tools'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Developer Tools ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DeveloperToolsForExtensions|Developer Tools For Extensions]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DebuggingTools|Debugging Tools]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MatlabBridge|Matlab Bridge]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ImageMaker|Image Maker]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Diffusion'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Diffusion ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ResampleDTIlogEuclidean|Resample DTIlog Euclidean]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Editor_Effects'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Editor Effects ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/WindowLevelEffect|Window Level Effect]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Exporter'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Examples ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/OpenCVExample|OpenCV Example]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Examples'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Exporter ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerToKiwiExporter|Slicer To Kiwi Exporter]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_IGT'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Filtering ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/pyLARSlicerExtension|pyLAR Slicer Extension]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Filtering'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== IGT ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/NeedleFinder|Needle Finder]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/TrackerStabilizer Tracker Stabilizer]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/GyroGuide|Gyro Guide]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CornerAnnotation|Corner Annotation]]&lt;br /&gt;
* [https://github.com/SlicerIGT/LumpNav Lump Nav]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PercutaneousApproachAnalysis|Percutaneous Approach Analysis]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerIGT|Slicer IGT]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/iGyne|i Gyne]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ResectionPlanner|Resection Planner]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Informatics'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Informatics ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CurveMaker|Curve Maker]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/LongitudinalPETCT|Longitudinal PETCT]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Reporting|Reporting]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/mpReview|mp Review]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/TCIABrowser|TCIABrowser]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerProstate|Slicer Prostate]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Mesh_Generation'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerOpenCV|SlicerOpenCV]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Libraries'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Mesh Generation ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CBC_3D_I2MConversion|CBC 3D I2MConversion]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CleaverExtension|Cleaver Extension]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Add3DTextExtension|Add3DText Extension]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PorousScaffoldsExtension|Porous Scaffolds Extension]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Microscopy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Microscopy ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/IASEM|IASEM]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Nuclear_Medicine'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Nuclear Medicine ==&lt;br /&gt;
* [http://gti-fing.github.io/SlicerPetSpectAnalysis Pet Spect Analysis]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Quantification'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Quantification ==&lt;br /&gt;
* [http://slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/DSC_MRI_Analysis DSCMRIAnalysis]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/T1Mapping|T1Mapping]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DiceComputation|Dice Computation]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PET-IndiC|PET-Indi C]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PkModeling|Pk Modeling]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Radiotherapy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Radiotherapy ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MarginCalculator|Margin Calculator]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerRT|Slicer RT]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/GelDosimetry Gel Dosimetry Analysis]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Registration'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Registration ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CMFreg|CMFreg]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PBNRR|PBNRR]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Scoliosis'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Scoliosis ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Scoliosis|Scoliosis]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Segmentation'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Segmentation ==&lt;br /&gt;
* [http://publish.uwo.ca/~dchen285/GraphCutSegment/GraphCutSegment.html Graph Cut Segment]&lt;br /&gt;
* [http://www.nitrc.org/projects/abc ABC]&lt;br /&gt;
* [http://wiki.slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/CarreraSliceInteractiveSegmenter Carrera Slice]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SkullStripper|Skull Stripper]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PETTumorSegmentation|PETTumor Segmentation]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SwissSkullStripper|Swiss Skull Stripper]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/LAScarSegmenter|LAScar Segmenter]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/OpenCAD|Open CAD]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/IntensitySegmenter|Intensity Segmenter]]&lt;br /&gt;
* [https://github.com/Tomnl/Slicer-Wasp Wasp]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/AirwaySegmentation Airway Segmentation]&lt;br /&gt;
* [https://www.slicer.org/slicerWiki/index.php/Documentation/4.3/Modules/FastGrowCut Fast Grow Cut Effect]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/VolumeClip|Volume Clip]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Sequences'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Sequences ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Sequences|Sequences]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Shape_Analysis'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Shape Analysis ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MeshToLabelMap|Mesh To Label Map]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Q3DC|Q3DC]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ModelToModelDistance|Model To Model Distance]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/EasyClip|Easy Clip]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/PickAndPaint Pick And Paint Extension]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/AnglePlanes Angle Planes Extension]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Tractography'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Tractography ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/FinslerTractography|Finsler Tractography]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/UKFTractography|UKFTractography]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Training'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Training ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PerkTutor|Perk Tutor]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Vascular_Modeling_Toolkit'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Ultrasound ==&lt;br /&gt;
* [https://github.com/KitwareMedical/SlicerITKUltrasound SlicerITKUltrasound]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Ultrasound'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vascular Modeling Toolkit ==&lt;br /&gt;
* [http://slicer.vmtk.org/ VMTK]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Wizards'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Wizards ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ChangeTracker|Change Tracker]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/ModuleExtensionListing/Extensions_by_category&amp;diff=47381</id>
		<title>Documentation/Nightly/ModuleExtensionListing/Extensions by category</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/ModuleExtensionListing/Extensions_by_category&amp;diff=47381"/>
		<updated>2016-10-28T20:46:53Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Extensions by category */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
* [[#Extensions_by_category|Extensions by category]]&lt;br /&gt;
= Extensions by category =&lt;br /&gt;
25 categories:&lt;br /&gt;
* [[#Extensions_by_category_Astronomy|Astronomy]]&lt;br /&gt;
* [[#Extensions_by_category_Cardiac|Cardiac]]&lt;br /&gt;
* [[#Extensions_by_category_Cardiac_MRI_toolkit|Cardiac MRI toolkit]]&lt;br /&gt;
* [[#Extensions_by_category_Chest_Imaging_Platform|Chest Imaging Platform]]&lt;br /&gt;
* [[#Extensions_by_category_Converters|Converters]]&lt;br /&gt;
* [[#Extensions_by_category_Developer_Tools|Developer Tools]]&lt;br /&gt;
* [[#Extensions_by_category_Diffusion|Diffusion]]&lt;br /&gt;
* [[#Extensions_by_category_Editor_Effects|Editor Effects]]&lt;br /&gt;
* [[#Extensions_by_category_Examples|Examples]]&lt;br /&gt;
* [[#Extensions_by_category_Exporter|Exporter]]&lt;br /&gt;
* [[#Extensions_by_category_Filtering|Filtering]]&lt;br /&gt;
* [[#Extensions_by_category_IGT|IGT]]&lt;br /&gt;
* [[#Extensions_by_category_Informatics|Informatics]]&lt;br /&gt;
* [[#Extensions_by_category_Libraries|Libraries]]&lt;br /&gt;
* [[#Extensions_by_category_Mesh_Generation|Mesh Generation]]&lt;br /&gt;
* [[#Extensions_by_category_Microscopy|Microscopy]]&lt;br /&gt;
* [[#Extensions_by_category_Nuclear_Medicine|Nuclear Medicine]]&lt;br /&gt;
* [[#Extensions_by_category_Quantification|Quantification]]&lt;br /&gt;
* [[#Extensions_by_category_Radiotherapy|Radiotherapy]]&lt;br /&gt;
* [[#Extensions_by_category_Registration|Registration]]&lt;br /&gt;
* [[#Extensions_by_category_Scoliosis|Scoliosis]]&lt;br /&gt;
* [[#Extensions_by_category_Segmentation|Segmentation]]&lt;br /&gt;
* [[#Extensions_by_category_Sequences|Sequences]]&lt;br /&gt;
* [[#Extensions_by_category_Shape_Analysis|Shape Analysis]]&lt;br /&gt;
* [[#Extensions_by_category_Tractography|Tractography]]&lt;br /&gt;
* [[#Extensions_by_category_Training|Training]]&lt;br /&gt;
* [[#Extensions_by_category_Ultrasound|Ultrasound]]&lt;br /&gt;
* [[#Extensions_by_category_Vascular_Modeling_Toolkit|Vascular Modeling Toolkit]]&lt;br /&gt;
* [[#Extensions_by_category_Wizards|Wizards]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Astronomy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Astronomy == &lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerAstro|Slicer Astro]] [https://github.com/Punzo/SlicerAstro/wiki]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Cardiac'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Cardiac ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerHeart|Slicer Heart]]&lt;br /&gt;
* [http://brainsia.github.io/CardiacAgatstonMeasures/ Cardiac Agatston Measures]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Cardiac_MRI_toolkit'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Cardiac MRI toolkit ==&lt;br /&gt;
* [http://capulet.med.utah.edu/namic/cmrslicer/ Cardiac MRI Toolkit]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Chest_Imaging_Platform'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Chest Imaging Platform ==&lt;br /&gt;
* [http://www.chestimagingplatform.org Chest Imaging Platform]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Converters'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Converters ==&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/PETDICOM PETDICOMExtension]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Developer_Tools'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Developer Tools ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DeveloperToolsForExtensions|Developer Tools For Extensions]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DebuggingTools|Debugging Tools]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MatlabBridge|Matlab Bridge]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ImageMaker|Image Maker]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Diffusion'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Diffusion ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ResampleDTIlogEuclidean|Resample DTIlog Euclidean]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Editor_Effects'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Editor Effects ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/WindowLevelEffect|Window Level Effect]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Exporter'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Examples ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/OpenCVExample|OpenCV Example]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Examples'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Exporter ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerToKiwiExporter|Slicer To Kiwi Exporter]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_IGT'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Filtering ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/pyLARSlicerExtension|pyLAR Slicer Extension]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Filtering'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== IGT ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/NeedleFinder|Needle Finder]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/TrackerStabilizer Tracker Stabilizer]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/GyroGuide|Gyro Guide]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CornerAnnotation|Corner Annotation]]&lt;br /&gt;
* [https://github.com/SlicerIGT/LumpNav Lump Nav]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PercutaneousApproachAnalysis|Percutaneous Approach Analysis]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerIGT|Slicer IGT]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/iGyne|i Gyne]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ResectionPlanner|Resection Planner]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Informatics'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Informatics ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CurveMaker|Curve Maker]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/LongitudinalPETCT|Longitudinal PETCT]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Reporting|Reporting]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/mpReview|mp Review]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/TCIABrowser|TCIABrowser]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerProstate|Slicer Prostate]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Mesh_Generation'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerOpenCV|SlicerOpenCV]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Libraries'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Mesh Generation ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CBC_3D_I2MConversion|CBC 3D I2MConversion]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CleaverExtension|Cleaver Extension]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Add3DTextExtension|Add3DText Extension]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PorousScaffoldsExtension|Porous Scaffolds Extension]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Microscopy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Microscopy ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/IASEM|IASEM]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Nuclear_Medicine'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Nuclear Medicine ==&lt;br /&gt;
* [http://gti-fing.github.io/SlicerPetSpectAnalysis Pet Spect Analysis]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Quantification'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Quantification ==&lt;br /&gt;
* [http://slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/DSC_MRI_Analysis DSCMRIAnalysis]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/T1Mapping|T1Mapping]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DiceComputation|Dice Computation]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PET-IndiC|PET-Indi C]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PkModeling|Pk Modeling]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Radiotherapy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Radiotherapy ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MarginCalculator|Margin Calculator]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerRT|Slicer RT]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/GelDosimetry Gel Dosimetry Analysis]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Registration'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Registration ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CMFreg|CMFreg]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PBNRR|PBNRR]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Scoliosis'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Scoliosis ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Scoliosis|Scoliosis]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Segmentation'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Segmentation ==&lt;br /&gt;
* [http://publish.uwo.ca/~dchen285/GraphCutSegment/GraphCutSegment.html Graph Cut Segment]&lt;br /&gt;
* [http://www.nitrc.org/projects/abc ABC]&lt;br /&gt;
* [http://wiki.slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/CarreraSliceInteractiveSegmenter Carrera Slice]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SkullStripper|Skull Stripper]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PETTumorSegmentation|PETTumor Segmentation]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SwissSkullStripper|Swiss Skull Stripper]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/LAScarSegmenter|LAScar Segmenter]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/OpenCAD|Open CAD]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/IntensitySegmenter|Intensity Segmenter]]&lt;br /&gt;
* [https://github.com/Tomnl/Slicer-Wasp Wasp]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/AirwaySegmentation Airway Segmentation]&lt;br /&gt;
* [https://www.slicer.org/slicerWiki/index.php/Documentation/4.3/Modules/FastGrowCut Fast Grow Cut Effect]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/VolumeClip|Volume Clip]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Sequences'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Sequences ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Sequences|Sequences]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Shape_Analysis'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Shape Analysis ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MeshToLabelMap|Mesh To Label Map]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Q3DC|Q3DC]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ModelToModelDistance|Model To Model Distance]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/EasyClip|Easy Clip]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/PickAndPaint Pick And Paint Extension]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/AnglePlanes Angle Planes Extension]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Tractography'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Tractography ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/FinslerTractography|Finsler Tractography]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/UKFTractography|UKFTractography]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Training'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Training ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PerkTutor|Perk Tutor]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Vascular_Modeling_Toolkit'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Ultrasound ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PerkTutor|Perk Tutor]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Ultrasound'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Vascular Modeling Toolkit ==&lt;br /&gt;
* [http://slicer.vmtk.org/ VMTK]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Wizards'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Wizards ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ChangeTracker|Change Tracker]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/ModuleExtensionListing/Extensions_by_category&amp;diff=47380</id>
		<title>Documentation/Nightly/ModuleExtensionListing/Extensions by category</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/ModuleExtensionListing/Extensions_by_category&amp;diff=47380"/>
		<updated>2016-10-28T20:45:20Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Extensions by category */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
* [[#Extensions_by_category|Extensions by category]]&lt;br /&gt;
= Extensions by category =&lt;br /&gt;
25 categories:&lt;br /&gt;
* [[#Extensions_by_category_Astronomy|Astronomy]]&lt;br /&gt;
* [[#Extensions_by_category_Cardiac|Cardiac]]&lt;br /&gt;
* [[#Extensions_by_category_Cardiac_MRI_toolkit|Cardiac MRI toolkit]]&lt;br /&gt;
* [[#Extensions_by_category_Chest_Imaging_Platform|Chest Imaging Platform]]&lt;br /&gt;
* [[#Extensions_by_category_Converters|Converters]]&lt;br /&gt;
* [[#Extensions_by_category_Developer_Tools|Developer Tools]]&lt;br /&gt;
* [[#Extensions_by_category_Diffusion|Diffusion]]&lt;br /&gt;
* [[#Extensions_by_category_Editor_Effects|Editor Effects]]&lt;br /&gt;
* [[#Extensions_by_category_Examples|Examples]]&lt;br /&gt;
* [[#Extensions_by_category_Exporter|Exporter]]&lt;br /&gt;
* [[#Extensions_by_category_Filtering|Filtering]]&lt;br /&gt;
* [[#Extensions_by_category_IGT|IGT]]&lt;br /&gt;
* [[#Extensions_by_category_Informatics|Informatics]]&lt;br /&gt;
* [[#Extensions_by_category_Libraries|Libraries]]&lt;br /&gt;
* [[#Extensions_by_category_Mesh_Generation|Mesh Generation]]&lt;br /&gt;
* [[#Extensions_by_category_Microscopy|Microscopy]]&lt;br /&gt;
* [[#Extensions_by_category_Nuclear_Medicine|Nuclear Medicine]]&lt;br /&gt;
* [[#Extensions_by_category_Quantification|Quantification]]&lt;br /&gt;
* [[#Extensions_by_category_Radiotherapy|Radiotherapy]]&lt;br /&gt;
* [[#Extensions_by_category_Registration|Registration]]&lt;br /&gt;
* [[#Extensions_by_category_Scoliosis|Scoliosis]]&lt;br /&gt;
* [[#Extensions_by_category_Segmentation|Segmentation]]&lt;br /&gt;
* [[#Extensions_by_category_Sequences|Sequences]]&lt;br /&gt;
* [[#Extensions_by_category_Shape_Analysis|Shape Analysis]]&lt;br /&gt;
* [[#Extensions_by_category_Tractography|Tractography]]&lt;br /&gt;
* [[#Extensions_by_category_Training|Training]]&lt;br /&gt;
* [[#Extensions_by_category_Ultrasound|Ultrasound]]&lt;br /&gt;
* [[#Extensions_by_category_Vascular_Modeling_Toolkit|Vascular Modeling Toolkit]]&lt;br /&gt;
* [[#Extensions_by_category_Wizards|Wizards]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Astronomy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Astronomy == &lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerAstro|Slicer Astro]] [https://github.com/Punzo/SlicerAstro/wiki]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Cardiac'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Cardiac ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerHeart|Slicer Heart]]&lt;br /&gt;
* [http://brainsia.github.io/CardiacAgatstonMeasures/ Cardiac Agatston Measures]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Cardiac_MRI_toolkit'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Cardiac MRI toolkit ==&lt;br /&gt;
* [http://capulet.med.utah.edu/namic/cmrslicer/ Cardiac MRI Toolkit]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Chest_Imaging_Platform'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Chest Imaging Platform ==&lt;br /&gt;
* [http://www.chestimagingplatform.org Chest Imaging Platform]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Converters'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Converters ==&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/PETDICOM PETDICOMExtension]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Developer_Tools'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Developer Tools ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DeveloperToolsForExtensions|Developer Tools For Extensions]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DebuggingTools|Debugging Tools]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MatlabBridge|Matlab Bridge]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ImageMaker|Image Maker]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Diffusion'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Diffusion ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ResampleDTIlogEuclidean|Resample DTIlog Euclidean]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Editor_Effects'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Editor Effects ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/WindowLevelEffect|Window Level Effect]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Exporter'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Examples ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/OpenCVExample|OpenCV Example]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Examples'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Exporter ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerToKiwiExporter|Slicer To Kiwi Exporter]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_IGT'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Filtering ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/pyLARSlicerExtension|pyLAR Slicer Extension]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Filtering'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== IGT ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/NeedleFinder|Needle Finder]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/TrackerStabilizer Tracker Stabilizer]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/GyroGuide|Gyro Guide]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CornerAnnotation|Corner Annotation]]&lt;br /&gt;
* [https://github.com/SlicerIGT/LumpNav Lump Nav]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PercutaneousApproachAnalysis|Percutaneous Approach Analysis]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerIGT|Slicer IGT]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/iGyne|i Gyne]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ResectionPlanner|Resection Planner]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Informatics'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Informatics ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CurveMaker|Curve Maker]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/LongitudinalPETCT|Longitudinal PETCT]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Reporting|Reporting]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/mpReview|mp Review]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/TCIABrowser|TCIABrowser]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerProstate|Slicer Prostate]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Mesh_Generation'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerOpenCV|SlicerOpenCV]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Libraries'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Mesh Generation ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CBC_3D_I2MConversion|CBC 3D I2MConversion]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CleaverExtension|Cleaver Extension]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Add3DTextExtension|Add3DText Extension]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PorousScaffoldsExtension|Porous Scaffolds Extension]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Microscopy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Microscopy ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/IASEM|IASEM]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Nuclear_Medicine'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Nuclear Medicine ==&lt;br /&gt;
* [http://gti-fing.github.io/SlicerPetSpectAnalysis Pet Spect Analysis]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Quantification'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Quantification ==&lt;br /&gt;
* [http://slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/DSC_MRI_Analysis DSCMRIAnalysis]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/T1Mapping|T1Mapping]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DiceComputation|Dice Computation]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PET-IndiC|PET-Indi C]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PkModeling|Pk Modeling]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Radiotherapy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Radiotherapy ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MarginCalculator|Margin Calculator]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerRT|Slicer RT]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/GelDosimetry Gel Dosimetry Analysis]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Registration'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Registration ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CMFreg|CMFreg]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PBNRR|PBNRR]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Scoliosis'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Scoliosis ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Scoliosis|Scoliosis]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Segmentation'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Segmentation ==&lt;br /&gt;
* [http://publish.uwo.ca/~dchen285/GraphCutSegment/GraphCutSegment.html Graph Cut Segment]&lt;br /&gt;
* [http://www.nitrc.org/projects/abc ABC]&lt;br /&gt;
* [http://wiki.slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/CarreraSliceInteractiveSegmenter Carrera Slice]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SkullStripper|Skull Stripper]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PETTumorSegmentation|PETTumor Segmentation]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SwissSkullStripper|Swiss Skull Stripper]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/LAScarSegmenter|LAScar Segmenter]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/OpenCAD|Open CAD]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/IntensitySegmenter|Intensity Segmenter]]&lt;br /&gt;
* [https://github.com/Tomnl/Slicer-Wasp Wasp]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/AirwaySegmentation Airway Segmentation]&lt;br /&gt;
* [https://www.slicer.org/slicerWiki/index.php/Documentation/4.3/Modules/FastGrowCut Fast Grow Cut Effect]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/VolumeClip|Volume Clip]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Sequences'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Sequences ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Sequences|Sequences]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Shape_Analysis'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Shape Analysis ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MeshToLabelMap|Mesh To Label Map]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Q3DC|Q3DC]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ModelToModelDistance|Model To Model Distance]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/EasyClip|Easy Clip]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/PickAndPaint Pick And Paint Extension]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/AnglePlanes Angle Planes Extension]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Tractography'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Tractography ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/FinslerTractography|Finsler Tractography]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/UKFTractography|UKFTractography]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Training'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Training ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PerkTutor|Perk Tutor]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Vascular_Modeling_Toolkit'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Vascular Modeling Toolkit ==&lt;br /&gt;
* [http://slicer.vmtk.org/ VMTK]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Wizards'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Wizards ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ChangeTracker|Change Tracker]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Prerequisites&amp;diff=44276</id>
		<title>Documentation/Nightly/Developers/Build Instructions/Prerequisites</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Prerequisites&amp;diff=44276"/>
		<updated>2015-12-02T21:28:10Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* CentOS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== PREREQUISITES ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Please check that the following tools are installed on your machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = Qt libraries are '''required'''. Consider reading [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt|Qt requirements]].&lt;br /&gt;
| image= [[{{tool|logo|qt}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = CMake is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|cmake}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Git is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|git}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = SVN is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|svn}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Consider reading platform specific requirements listed below.&lt;br /&gt;
&lt;br /&gt;
=== Linux  ===&lt;br /&gt;
* [{{tool|download|cmake}} CMake] &amp;gt;= 3.x&lt;br /&gt;
* [{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
* [{{tool|download|svn}} Svn] &amp;gt;= 1.7&lt;br /&gt;
* Qt 4.8.6. &amp;lt;small&amp;gt;See details [http://na-mic.org/Mantis/view.php?id=3325#bugnotes here] (Note that any version &amp;gt;= Qt 4.7.4 can be used only for Ubuntu &amp;lt; 12.04)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Debian ====&lt;br /&gt;
&lt;br /&gt;
* Debian squeeze/wheezy/testing(jessie) users, start by pasting the following lines in a terminal&lt;br /&gt;
 sudo apt-get install subversion git-core git-svn&lt;br /&gt;
 sudo apt-get install make gcc g++ libX11-dev libXt-dev libgl1-mesa-dev libosmesa6-dev libglu1-mesa-dev libfontconfig-dev libxrender-dev libncurses5-dev&lt;br /&gt;
 sudo apt-get install cmake&lt;br /&gt;
 sudo apt-get install qt-sdk&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
* Ubuntu users, start by pasting the following lines in a terminal&lt;br /&gt;
 sudo apt-get install subversion git-core git-svn&lt;br /&gt;
 sudo apt-get install make gcc g++ libX11-dev libXt-dev libgl1-mesa-dev libglu1-mesa-dev libfontconfig-dev libxrender-dev libncurses5-dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu &amp;lt; 12.04''':&lt;br /&gt;
 sudo apt-get install cmake # Only for Ubuntu &amp;lt; 12.04&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu &amp;lt; 14.04.3''':&lt;br /&gt;
 sudo apt-get install libosmesa6-dev&lt;br /&gt;
&lt;br /&gt;
* NOTE: on Ubuntu 14.04.3 LTS, attempting to install &amp;lt;tt&amp;gt;libosmesa6-dev&amp;lt;/tt&amp;gt; results in an error:&lt;br /&gt;
 The following packages have unmet dependencies:&lt;br /&gt;
  libosmesa6-dev : Depends: libosmesa6 (= 10.1.3-0ubuntu0.4) but it is not going to be installed&lt;br /&gt;
 E: Unable to correct problems, you have held broken packages.&lt;br /&gt;
See [https://bugs.launchpad.net/ubuntu/+source/mesa-lts-utopic/+bug/1424059 Bug 1424059].&lt;br /&gt;
&lt;br /&gt;
Slicer compiles successfully without that package, but &amp;lt;tt&amp;gt;VTK_OPENGL_HAS_OSMESA&amp;lt;/tt&amp;gt; is disabled.&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu 12.04 and above''': You *MUST download the standard CMake binary* from http://cmake.org/download because the distributed version of CMake cannot be used to build slicer. For example, on a 64-bit system, you will download the file &amp;lt;code&amp;gt;cmake-X.Y.Z-Linux-x86_64.tar.gz&amp;lt;/code&amp;gt; associated with the latest stable version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
* Why distributed CMake can not be used on Ubuntu 12.04 and above ? &lt;br /&gt;
** http://slicer-devel.65872.n3.nabble.com/PYTHON-INCLUDE-DIR2-when-building-Slicer4-td4028557.html&lt;br /&gt;
** Slicer issue [http://na-mic.org/Mantis/view.php?id=3103 #3103]&lt;br /&gt;
** Slicer issue  [http://na-mic.org/Mantis/view.php?id=3116#c8649 #3116]&lt;br /&gt;
** CMake issue [http://public.kitware.com/Bug/view.php?id=14156 #14156]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install openssl libssl-dev&lt;br /&gt;
&lt;br /&gt;
mkdir ~/Support &amp;amp;&amp;amp; cd Support     # This is where we will download and install required software&lt;br /&gt;
&lt;br /&gt;
# By copying this one-liner in your terminal, it will download and build CMake&lt;br /&gt;
wget http://www.cmake.org/files/v3.3/cmake-3.3.1.tar.gz &amp;amp;&amp;amp; \&lt;br /&gt;
tar xzvf cmake-3.3.1.tar.gz \&lt;br /&gt;
cd cmake-3.3.1 &amp;amp;&amp;amp; \&lt;br /&gt;
cmake -DCMAKE_USE_OPENSSL:BOOL=ON &amp;amp;&amp;amp; \&lt;br /&gt;
make -j4&lt;br /&gt;
&lt;br /&gt;
# By copying this one-liner, symbolic links to cmake tools will be created in /usr/local/bin. &lt;br /&gt;
# That way calling cmake, ctest, ... from the command line will resolve to this version of CMake.&lt;br /&gt;
for tool in cmake ccmake ctest cpack; do sudo ln -s ~/Support/cmake-3.3.1/bin/$tool /usr/local/bin/$tool; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu 12.04, 12.10, 13.04 and 13.10''': Qt 4 &amp;gt;= 4.8.5 MUST be used. See reference below for more details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/Support   # This is where we will build Qt and dependent libraries&lt;br /&gt;
 &lt;br /&gt;
# Keep track of our working directory&lt;br /&gt;
cwd=$(pwd)&lt;br /&gt;
&lt;br /&gt;
# This will download, then build zlib and openssl in the current folder&lt;br /&gt;
rm -f get-and-build-openssl-for-slicer.sh&lt;br /&gt;
wget https://gist.githubusercontent.com/jcfr/9513568/raw/21f4e4cabca5ad03435ecc17ab546dab5e2c1a2f/get-and-build-openssl-for-slicer.sh&lt;br /&gt;
chmod u+x get-and-build-openssl-for-slicer.sh &lt;br /&gt;
./get-and-build-openssl-for-slicer.sh &lt;br /&gt;
&lt;br /&gt;
# This will download Qt source in the current folder&lt;br /&gt;
wget http://packages.kitware.com/download/item/6175/qt-everywhere-opensource-src-4.8.6.tar.gz&lt;br /&gt;
md5=`md5sum ./qt-everywhere-opensource-src-4.8.6.tar.gz | awk '{ print $1 }'` &amp;amp;&amp;amp;&lt;br /&gt;
[ $md5 == &amp;quot;2edbe4d6c2eff33ef91732602f3518eb&amp;quot; ] || echo &amp;quot;MD5 mismatch. Problem downloading Qt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# This will configure and build Qt in RELEASE against the zlib and openssl previously built&lt;br /&gt;
tar -xzvf qt-everywhere-opensource-src-4.8.6.tar.gz&lt;br /&gt;
mv qt-everywhere-opensource-src-4.8.6 qt-everywhere-opensource-release-src-4.8.6&lt;br /&gt;
mkdir qt-everywhere-opensource-release-build-4.8.6&lt;br /&gt;
cd qt-everywhere-opensource-release-src-4.8.6&lt;br /&gt;
./configure -prefix $cwd/qt-everywhere-opensource-release-build-4.8.6    \&lt;br /&gt;
                   -release \&lt;br /&gt;
                   -opensource -confirm-license \&lt;br /&gt;
                   -no-qt3support \&lt;br /&gt;
                   -webkit \&lt;br /&gt;
                   -nomake examples -nomake demos \&lt;br /&gt;
                   -openssl -I $cwd/openssl-1.0.1e/include   -L $cwd/openssl-1.0.1e \&lt;br /&gt;
&amp;amp;&amp;amp; make -j7 &amp;amp;&amp;amp; make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
* Why Qt 4 &amp;gt;= 4.8.5 should be used on Ubuntu 12.04 and above ?&lt;br /&gt;
** Slicer issue [http://www.na-mic.org/Bug/view.php?id=3325 #3325]&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CentOS ====&lt;br /&gt;
*CentOS user type:&lt;br /&gt;
 yum install make gcc-c++ libX11-devel libXt-devel libXrender-devel libXext-devel libGLU-devel mesa-libOSMesa-devel mesa-libGL-devel mesa-libGLU-devel ncurses&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Todo: This will have to be added in FAQ: Troubleshoot section&lt;br /&gt;
''glx-utils'' provides ''glxgears'' that can be used to test rendering&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOSX ===&lt;br /&gt;
&lt;br /&gt;
'''MacOSX 10.9.4 (Maverick):'''&lt;br /&gt;
&lt;br /&gt;
''' (1) Make sure to install this update: http://support.apple.com/kb/DL1754'''&lt;br /&gt;
&lt;br /&gt;
''' (2) Use CMake 3.0.1 - it is known to be working and is supported''' (if you want to use CMake already installed on your system, 2.8.12.2 is known to work on Mac OS X 10.9.5)&lt;br /&gt;
&lt;br /&gt;
* Mac Os X &amp;gt;= 10.5 (Leopard)&lt;br /&gt;
* [{{tool|download|cmake}} CMake] &amp;gt;= 2.8.9&lt;br /&gt;
** For Mac Os X &amp;gt;= 10.8 ([http://en.wikipedia.org/wiki/OS_X_Mountain_Lion Mountain Lion]) and/or recent XCode &amp;gt;= 4.5.X - [{{tool|download|cmake}} CMake] &amp;gt;= 2.8.11 is required. See http://www.cmake.org/files/v2.8/cmake-2.8.11-Darwin64-universal.tar.gz&lt;br /&gt;
&amp;lt;!-- Waiting for the official release, get the release candidate rc1 [http://www.cmake.org/files/v2.8/cmake-2.8.11-rc1-Darwin64-universal.tar.gz here]. For explanation, see [[Documentation/{{documentation/version}}/Developers/Build_Instructions#ld:_framework_not_found_QtWebKit|here]] and [[Documentation/{{documentation/version}}/Developers/Build_Instructions#On_MacOSX_10.8.2C_CMake_hangs_forever|here]]. These versions are also known to work: exact version 20130121-g92bd8 [http://www.cmake.org/files/dev/cmake-2.8.10.20130121-g92bd8-Darwin-universal.tar.gz here] (or version &amp;gt;= 2.8.10.20130220 [http://www.cmake.org/files/dev/?C=M;O=D here]).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -O http://www.cmake.org/files/v2.8/cmake-2.8.11-Darwin64-universal.tar.gz&lt;br /&gt;
 $ tar -xzvf cmake-2.8.11-Darwin64-universal.tar.gz --strip-components=1&lt;br /&gt;
&lt;br /&gt;
 $ CMake\ 2.8-11.app/Contents/bin/cmake --version&lt;br /&gt;
 cmake version 2.8.11&lt;br /&gt;
&lt;br /&gt;
* [{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
* [{{tool|download|svn}} Svn] &amp;gt;= 1.7&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*[[{{tool|logo|cmake}}|x16px]] [{{tool|download|cmake}} CMake] &amp;gt;= 2.8.9&lt;br /&gt;
*[[{{tool|logo|git}}|x16px]] [{{tool|download|git}} Git] &amp;gt;= 1.6.5&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* XCode (for the SDK libs)&lt;br /&gt;
* Qt 4 &amp;gt;= 4.8.5. We recommend you install the following two packages:&lt;br /&gt;
** Download and install [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-opensource-mac-4.8.6-1.dmg qt-opensource-mac-4.8.6-1.dmg]&lt;br /&gt;
** Download and install [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-opensource-mac-4.8.6-1-debug-libs.dmg qt-opensource-mac-4.8.6-1-debug-libs.dmg]&lt;br /&gt;
** For more details [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt#Mac|here]]&lt;br /&gt;
* XQuartz - For Mac Os X &amp;gt;= 10.8 ([http://en.wikipedia.org/wiki/OS_X_Mountain_Lion Mountain Lion]) install XQuartz (http://xquartz.macosforge.org) to get X11 (no longer a default in OS X).&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Newer Xcode versions (e.g. 4.3.2) use clang as the default compiler and '''clang is not compatible with ITK version 3'''.  You should use ITK version 4 with recent versions of Xcode.&lt;br /&gt;
** Xcode with gcc should ork with either version of ITK.&lt;br /&gt;
** OS X Mountain Lion: In Xcode 4.5 you now need to install command line tools (no longer included by default). Install within Xcode under the Xcode-&amp;gt;Preferences-&amp;gt;Downloads tab (otherwise git svn will give errors). Then you will need to install XQuartz (http://xquartz.macosforge.org) to get X11 (no longer a default in OS X).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* [{{tool|download|cmake}} CMake] &amp;gt;= 3.0&lt;br /&gt;
* [{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*[[{{tool|logo|cmake}}|x16px]]  [{{tool|download|cmake}}  CMake] &amp;gt;= 2.8.10&lt;br /&gt;
*[[{{tool|logo|git}}|x16px]]  [{{tool|download|git}}  Git] &amp;gt;= 1.7.10&lt;br /&gt;
* [https://code.google.com/p/msysgit/downloads/list?can=3 ''Git-X.X.X-preview2013XXXX.exe''] recommended.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Use of [http://code.google.com/p/tortoisegit/ TortoiseGit] is optional.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** {{note}}For convenience, you could update the PATH variable so that ''git'' can be automatically discovered when configuring Slicer. If not, you will have to specify the GIT_EXECUTABLE at configure time.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sliksvn.com/en/download SlikSvn] &amp;lt;!-- or [http://www.cygwin.com cygwin's svn client]--&amp;gt;. If using TortoiseSVN (versions that support command line tools), make sure you install Command line tools (disabled by default)&lt;br /&gt;
&lt;br /&gt;
* NSIS (optional): Needed if packaging Slicer - Click [http://nsis.sourceforge.net/Download here] to download.&lt;br /&gt;
&lt;br /&gt;
* Qt 4.8.6 (for VS2008). See details [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt#Windows|here]]&lt;br /&gt;
** Normally you should plan to build Qt from source to have complete control over the process. See [https://github.com/jcfr/qt-easy-build one-liner build command] &amp;lt;!-- or more detailed [[#Build_instructions]] --&amp;gt;&lt;br /&gt;
** You may find that the '''unsigned''' binary downloads from this site are usable: http://sourceforge.net/projects/qt64ng/files/qt/x86-64/4.8.6/msvc2008/ (If you use .7z varaints extract them in the default location C:\Qt\ otherwise that installation will not be properly configured for use with CMake)&lt;br /&gt;
** '''Details''': Using the Qt Designer on Windows requires that the Slicer plugins are compiled in the same mode as Qt. If Qt was compiled in Release mode (default), Slicer would have to be compiled in Release mode as well. However if Qt is compiled in Debug mode only, Slicer has to be compiled in Debug too. When Qt is in &amp;quot;Release and Debug&amp;quot; mode only the Release version of Designer.exe is generated, Slicer would have to be compiled in Release. So for developers, the &amp;lt;b&amp;gt;Debug mode is recommended&amp;lt;/b&amp;gt;.&lt;br /&gt;
** For VS2012 Qt needs to be build from source. Build will fail, which can be fixed with this diff: https://gist.github.com/Vitallium/5220503 (read the comment too)&lt;br /&gt;
&lt;br /&gt;
* IDE&lt;br /&gt;
** '''Tested/Recommended''': [https://www.microsoft.com/visualstudio/en-us/products/2008-editions Microsoft Visual Studio 9 2008] (Any edition). [http://go.microsoft.com/?linkid=7729279 VS Express 2008 with SP1 direct link] (functional as of Jan 11, 2014)&lt;br /&gt;
*** Make sure to install:&lt;br /&gt;
**** SP1. Click [http://www.microsoft.com/download/en/details.aspx?id=10986 here] to download SP1 and click [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2012/008206.html here] to understand the motivation.&lt;br /&gt;
*** Make sure to patch VS2008 using the script [https://gist.github.com/jcfr/3c7bef3f8b32f9f6ad4b fix-vc9-redist-manifests.ps1]&lt;br /&gt;
** '''Experimental''': The plan is to support [https://www.microsoft.com/visualstudio/en-us/products/2010-editions Microsoft Visual Studio 2010] (Any edition). {{note}} NOTE THAT EXPERIMENTAL MEANS THIS DOESN'T YET WORK :)&lt;br /&gt;
*** Make sure to build or install:&lt;br /&gt;
**** Qt 4.8 &lt;br /&gt;
*** Make sure to install:&lt;br /&gt;
**** SP1. Click [http://www.microsoft.com/download/en/details.aspx?id=23691 here] to download SP1 and click [http://developer.qt.nokia.com/faq/answer/why_do_all_qt_4.7_applications_crash_when_using_windows_7_x64_w_vs_2010 here] to understand the motivation.&lt;br /&gt;
**** SP1 Compiler update. Click [https://www.microsoft.com/download/en/details.aspx?id=4422 here] to download and [http://slicer-devel.65872.n3.nabble.com/Windows-7-64Bits-Slicer-4-Build-with-VC-2010-problem-tt3730524.html#a3731661 here] to understand the motivation.&lt;br /&gt;
&amp;lt;!-- JC: This links shouldn't be here: 1) Since this the developer section, it's assumed Visual Studio is installed. 2) The Dll are distributed within Slicer package --&amp;gt;&lt;br /&gt;
&amp;lt;!-- *** Optional: &amp;quot;Microsoft Visual C++ 2010 SP1 Redistributable Package&amp;quot;. Click [http://www.microsoft.com/download/en/details.aspx?id=13523 here for x64] download, or [http://www.microsoft.com/download/en/details.aspx?id=13523 here for x86] download.  [http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=29 x86 (32bit) for VS 2008] --&amp;gt;&lt;br /&gt;
** '''Experimental''' (Visual Studio 2012): Use a desktop version such as [http://www.microsoft.com/visualstudio/eng/downloads#d-express-windows-desktop Visual Studio 2012 Express &amp;lt;b&amp;gt;for Windows Desktop&amp;lt;/b&amp;gt;] and remember [http://www.microsoft.com/en-us/download/details.aspx?id=38188 Visual Studio 2012 Update 2]). Do &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; use Visual Studio Express 2012 &amp;lt;em&amp;gt;for Windows 8&amp;lt;/em&amp;gt;. You must install [http://msdn.microsoft.com/en-us/library/ms717422.aspx Windows SDK], otherwise CMake will not even find the C compiler during configure. In CMake, choose &amp;lt;tt&amp;gt;Visual Studio 11 Win64&amp;lt;/tt&amp;gt; as generator.&lt;br /&gt;
** '''Experimental''' (Visual Studio 2013 with Update 5, as of [https://github.com/Slicer/Slicer/commit/71602609ce2ae5e473ece392500825ca96213371 commit 7160260]): Slicer compilation is successful, with some caveats. Steps:&lt;br /&gt;
*** CMake &amp;gt;= 3.3.1&lt;br /&gt;
*** Build Qt 4.8.7 with SSL support using [https://github.com/jcfr/qt-easy-build/tree/4.8.7 qt-easy-build].&lt;br /&gt;
*** For Debug mode, disable &amp;lt;code&amp;gt;Slicer_USE_SimpleITK&amp;lt;/code&amp;gt; in CMake.&lt;br /&gt;
** '''Un-tested''': Cygwin suite (building with cygwin gcc not supported, but the cygwin shell environment can be used to run git, svn, etc).&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/Python_Scripting&amp;diff=43079</id>
		<title>Documentation/Nightly/Developers/FAQ/Python Scripting</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/Python_Scripting&amp;diff=43079"/>
		<updated>2015-10-24T01:53:25Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Debugging using remote-pdb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;__TOC__&lt;br /&gt;
={{#titleparts: {{PAGENAME}} | | -1 }}=&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
='''Developer FAQ: {{{1}}}'''=&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to systematically execute custom python code at startup ? ==&lt;br /&gt;
&lt;br /&gt;
Each time Slicer starts, it will look up for a file named &amp;lt;code&amp;gt;.slicerrc.py&amp;lt;/code&amp;gt; into your HOME folder.&lt;br /&gt;
&lt;br /&gt;
See [[Documentation/{{documentation/version}}/FAQ/General#What_is_my_HOME_folder_.3F|What is my HOME folder ?]]&lt;br /&gt;
&lt;br /&gt;
== How to save an image/volume using python ? ==&lt;br /&gt;
&lt;br /&gt;
The module &amp;lt;code&amp;gt;slicer.util&amp;lt;/code&amp;gt; provides methods allowing to save either a node or an entire scene:&lt;br /&gt;
* saveNode&lt;br /&gt;
* saveScene&lt;br /&gt;
&lt;br /&gt;
For more details see:&lt;br /&gt;
* https://github.com/Slicer/Slicer/blob/master/Base/Python/slicer/util.py#L229-267&lt;br /&gt;
* https://github.com/Slicer/Slicer/blob/master/Base/Python/slicer/tests/test_slicer_util_save.py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to assign a volume to a Slice view ? ==&lt;br /&gt;
&lt;br /&gt;
Assuming the &amp;lt;code&amp;gt;MRHead&amp;lt;/code&amp;gt; sample data has been loaded, you could do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
red_logic = slicer.app.layoutManager().sliceWidget(&amp;quot;Red&amp;quot;).sliceLogic()&lt;br /&gt;
red_cn = red_logic.GetSliceCompositeNode()&lt;br /&gt;
red_logic.GetSliceCompositeNode().SetBackgroundVolumeID(slicer.util.getNode('MRHead').GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Discussion: http://slicer-devel.65872.n3.nabble.com/Assign-volumes-to-views-tt4028694.html&lt;br /&gt;
&lt;br /&gt;
== How to access vtkRenderer in Slicer 3D view ? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
renderer = slicer.app.layoutManager().threeDWidget(0).threeDView().renderWindow().GetRenderers().GetFirstRenderer()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to access displayable manager associated with a Slicer 2D or 3D view ? ==&lt;br /&gt;
&lt;br /&gt;
As originally explained [http://slicer-devel.65872.n3.nabble.com/How-to-get-the-point-of-a-3D-model-based-on-the-fiducial-position-td4031760.html#a4031762 here], you could use the method &amp;lt;code&amp;gt;getDisplayableManagers()&amp;lt;/code&amp;gt; available in any [{{doxygen-class-url|qMRMLThreeDView}} qMRMLThreeDView] and [{{doxygen-class-url|qMRMLSliceView}} qMRMLSliceView].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
for v in range(lm.threeDViewCount):&lt;br /&gt;
  td = lm.threeDWidget(v)&lt;br /&gt;
  ms = vtk.vtkCollection()&lt;br /&gt;
  td.getDisplayableManagers(ms)&lt;br /&gt;
  for i in range(ms.GetNumberOfItems()):&lt;br /&gt;
   m = ms.GetItemAsObject(i)&lt;br /&gt;
   if m.GetClassName() == &amp;quot;vtkMRMLModelDisplayableManager&amp;quot;:&lt;br /&gt;
     print(m)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to center the 3D view on the scene ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
threeDWidget = layoutManager.threeDWidget(0)&lt;br /&gt;
threeDView = threeDWidget.threeDView()&lt;br /&gt;
threeDView.resetFocalPoint()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Should I use 'old style' or 'new style' python classes in my scripted module ? ==&lt;br /&gt;
&lt;br /&gt;
When python classes have no superclass specified they are 'old style' as described here [http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes].&lt;br /&gt;
&lt;br /&gt;
In general it doesn't matter for the classes in a scripted module, since they won't be subclassed either old or new style should be the same.&lt;br /&gt;
&lt;br /&gt;
For other python code in slicer where you might be subclassing, it's better to use new style classes.  See the class hierarchies in the [https://github.com/Slicer/Slicer/tree/master/Modules/Scripted/EditorLib EditorLib] and the [https://github.com/Slicer/Slicer/tree/master/Modules/Scripted/DICOM/DICOMLib DICOMLib] for examples.&lt;br /&gt;
&lt;br /&gt;
== How to harden a transform ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; n = getNode('Bone')&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; logic = slicer.vtkSlicerTransformLogic()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; logic.hardenTransform(n)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Discussion: http://slicer-devel.65872.n3.nabble.com/Scripting-hardened-transforms-tt4029456.html&lt;br /&gt;
&lt;br /&gt;
== Where can I find example scripts? ==&lt;br /&gt;
&lt;br /&gt;
Have a look at [[Documentation/{{documentation/version}}/ScriptRepository]].&lt;br /&gt;
&lt;br /&gt;
== How can I use a visual debugger for step-by-step debugging ==&lt;br /&gt;
&lt;br /&gt;
===Debugging using PyCharm or PyDev===&lt;br /&gt;
Visual debugging (setting breakpoints, execute code step-by-step, view variables, stack, etc.) of Python scripted module is possible by using [https://www.jetbrains.com/pycharm/ PyCharm] or [http://pydev.org/ PyDev] by using the ''Python debugger'' module [[Documentation/{{documentation/version}}/Extensions/DebuggingTools|Debugging tools]] extension.&lt;br /&gt;
&lt;br /&gt;
'''See detailed instructions at the [[Documentation/{{documentation/version}}/Extensions/DebuggingTools|Debugging tools extension page]].'''&lt;br /&gt;
[[File:PyDevRemoteDebugSlicer.png|800px|thumb|center|Visual debugging of Python modules in Slicer]]&lt;br /&gt;
&lt;br /&gt;
===Debugging using Visual Studio===&lt;br /&gt;
On Windows, [https://github.com/Microsoft/PTVS Python Tools for Visual Studio] (PTVS) enables debugging Python inside Visual Studio. Its remote debugging capability allows attaching the debugger to Slicer's embedded Python environment.&lt;br /&gt;
&lt;br /&gt;
See [[Documentation/{{documentation/version}}/Developers/Tutorials/Debugging_Python_in_Visual_Studio | Debugging Python in Visual Studio]] for details.&lt;br /&gt;
&lt;br /&gt;
===Debugging using remote-pdb===&lt;br /&gt;
&lt;br /&gt;
A command line debugging session with a [https://docs.python.org/3/library/pdb.html pdb] interface can be achieved with [https://github.com/ionelmc/python-remote-pdb python-remote-pdb].&lt;br /&gt;
&lt;br /&gt;
Install python-remote-pdb into Slicer's Python:&lt;br /&gt;
&lt;br /&gt;
  git clone https://github.com/ionelmc/python-remote-pdb.git&lt;br /&gt;
  cd python-remote-pdb&lt;br /&gt;
  /path/to/Slicer-build/Slicer-build/Slicer ./setup.py install&lt;br /&gt;
&lt;br /&gt;
Then, call ''set_trace()'' where you want to start the debugger.&lt;br /&gt;
&lt;br /&gt;
  from remote_pdb import set_trace; set_trace()&lt;br /&gt;
&lt;br /&gt;
In the console where Slicer was started, a message like the following will be printed:&lt;br /&gt;
&lt;br /&gt;
  RemotePdb session open at 127.0.0.1:1234, waiting for connection&lt;br /&gt;
&lt;br /&gt;
In another terminal, connect with telnet:&lt;br /&gt;
&lt;br /&gt;
  telnet 127.0.0.1 1234&lt;br /&gt;
&lt;br /&gt;
or socat (has history, readline support):&lt;br /&gt;
&lt;br /&gt;
  socat readline tcp:127.0.0.1:1234&lt;br /&gt;
&lt;br /&gt;
== Why can't I access my C++ Qt class from python ==&lt;br /&gt;
* Python wrapping of a Qt class requires a Qt style constructor with QObject as argument (it can be defaulted to null though), which is public. If one of these are missing, python wrapping will fail for that class&lt;br /&gt;
* [Other reasons go here]&lt;br /&gt;
&lt;br /&gt;
== How can I access callData argument in a VTK object observer callback function ==&lt;br /&gt;
&lt;br /&gt;
To get notification about an event emitted by a VTK object you can simply use the AddObserver method, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sceneModifiedCallback(caller, eventId):&lt;br /&gt;
  print(&amp;quot;Scene modified&amp;quot;)&lt;br /&gt;
  print(&amp;quot;There are {0} nodes in the scene&amp;quot;. format(slicer.mrmlScene.GetNumberOfNodes()))&lt;br /&gt;
&lt;br /&gt;
sceneModifiedObserverTag = slicer.mrmlScene.AddObserver(vtk.vtkCommand.ModifiedEvent, sceneModifiedCallback)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If an event also contains additional information as CallData then the type of this argument has to be specified as well, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@vtk.calldata_type(vtk.VTK_OBJECT)&lt;br /&gt;
def nodeAddedCallback(caller, eventId, callData):&lt;br /&gt;
  print(&amp;quot;Node added&amp;quot;)&lt;br /&gt;
  print(&amp;quot;New node: {0}&amp;quot;.format(callData.GetName()))&lt;br /&gt;
&lt;br /&gt;
nodeAddedModifiedObserverTag = slicer.mrmlScene.AddObserver(slicer.vtkMRMLScene.NodeAddedEvent, nodeAddedCallback)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: @vtk.calldata_type is a Python decorator, which modifies properties of a function that is declared right after the decorator. The decorator is defined in VTK (in Wrapping\Python\vtk\util\misc.py).&lt;br /&gt;
&lt;br /&gt;
Usage from a class requires an extra step of creating the callback in the class __init__ function, as Python2 by default does some extra wrapping (http://stackoverflow.com/questions/9523370/adding-attributes-to-instance-methods-in-python):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyClass:&lt;br /&gt;
  def __init__(self):&lt;br /&gt;
    from functools import partial&lt;br /&gt;
    def nodeAddedCallback(self, caller, eventId, callData):&lt;br /&gt;
      print(&amp;quot;Node added&amp;quot;)&lt;br /&gt;
      print(&amp;quot;New node: {0}&amp;quot;.format(callData.GetName()))&lt;br /&gt;
    self.nodeAddedCallback = partial(nodeAddedCallback, self)&lt;br /&gt;
    self.nodeAddedCallback.CallDataType = vtk.VTK_OBJECT&lt;br /&gt;
  def registerCallbacks(self):&lt;br /&gt;
    self.nodeAddedModifiedObserverTag = slicer.mrmlScene.AddObserver(slicer.vtkMRMLScene.NodeAddedEvent, self.nodeAddedCallback)&lt;br /&gt;
  def unregisterCallbacks(self):&lt;br /&gt;
    slicer.mrmlScene.RemoveObserver(self.nodeAddedModifiedObserverTag)&lt;br /&gt;
        &lt;br /&gt;
myObject = MyClass()&lt;br /&gt;
myObject.registerCallbacks()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Allowed CallDataType values:  VTK_STRING, VTK_OBJECT, VTK_INT, VTK_LONG, VTK_DOUBLE, VTK_FLOAT, &amp;quot;string0&amp;quot;. See more information here:&lt;br /&gt;
https://github.com/Kitware/VTK/blob/master/Wrapping/PythonCore/vtkPythonCommand.cxx&lt;br /&gt;
&lt;br /&gt;
A simplified syntax is available by using a mix-in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from slicer.util import VTKObservationMixin&lt;br /&gt;
&lt;br /&gt;
class MyClass(VTKObservationMixin):&lt;br /&gt;
  def __init__(self):&lt;br /&gt;
    VTKObservationMixin.__init__(self)&lt;br /&gt;
    self.addObserver(slicer.mrmlScene, slicer.vtkMRMLScene.NodeAddedEvent, self.nodeAddedCallback)&lt;br /&gt;
  &lt;br /&gt;
  @vtk.calldata_type(vtk.VTK_OBJECT)&lt;br /&gt;
  def nodeAddedCallback(self, caller, eventId, callData):&lt;br /&gt;
    print(&amp;quot;Node added&amp;quot;)&lt;br /&gt;
    print(&amp;quot;New node: {0}&amp;quot;.format(callData.GetName()))&lt;br /&gt;
&lt;br /&gt;
myObject = MyClass()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: VTKObservationMixin is a Python mix-in that allows adding a set of methods to a class by inheritance. VTKObservationMixin includes addObserver, hasObserver, observer, removeObserver, removeObservers methods, defined in Slicer (in Base\Python\slicer\util.py). For example of usage, see [https://github.com/Slicer/Slicer/blob/master/Base/Python/slicer/tests/test_slicer_util_VTKObservationMixin.py test_slicer_util_VTKObservationMixin.py]&lt;br /&gt;
&lt;br /&gt;
== How to run CLI module from Python? ==&lt;br /&gt;
&lt;br /&gt;
See [[Documentation/{{documentation/version}}/Developers/Python_scripting#Running_a_CLI_from_Python|here]].&lt;br /&gt;
&lt;br /&gt;
== How can I run slicer operations from a batch script? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Slicer --no-main-window --python-script /tmp/test.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Contents of /tmp/test.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# use a slicer scripted module logic&lt;br /&gt;
from SampleData import SampleDataLogic&lt;br /&gt;
SampleDataLogic().downloadMRHead()&lt;br /&gt;
head = slicer.util.getNode('MRHead')&lt;br /&gt;
&lt;br /&gt;
# use a vtk class&lt;br /&gt;
threshold = vtk.vtkImageThreshold()&lt;br /&gt;
threshold.SetInputData(head.GetImageData())&lt;br /&gt;
threshold.ThresholdBetween(100, 200)&lt;br /&gt;
threshold.SetInValue(255)&lt;br /&gt;
threshold.SetOutValue(0)&lt;br /&gt;
&lt;br /&gt;
#  use a slicer-specific C++ class&lt;br /&gt;
erode = slicer.vtkImageErode()&lt;br /&gt;
erode.SetInputConnection(threshold.GetOutputPort())&lt;br /&gt;
erode.SetNeighborTo4()  &lt;br /&gt;
erode.Update()          &lt;br /&gt;
&lt;br /&gt;
head.SetAndObserveImageData(erode.GetOutputDataObject(0))&lt;br /&gt;
&lt;br /&gt;
slicer.util.saveNode(head, &amp;quot;/tmp/eroded.nrrd&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
exit()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How can I run Slicer on a headless compute node? ==&lt;br /&gt;
&lt;br /&gt;
Many cluster nodes are installed with minimal linux systems that don't include X servers.  X servers, particularly those with hardware acceleration traditionally needed to be installed with root privileges, making it impossible to run applications that rendered using X or OpenGL.&lt;br /&gt;
&lt;br /&gt;
But there is a workaround which allows everything in slicer to work normally so you could even do headless rendering.&lt;br /&gt;
&lt;br /&gt;
You can use a modern version of X that supports running a dummy framebuffer.  This can be installed in user mode so you don't even need to have root on the system.&lt;br /&gt;
&lt;br /&gt;
See [https://www.xpra.org/trac/wiki/Xdummy] for details.&lt;br /&gt;
&lt;br /&gt;
There's a thread here with more discussion: [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2015/017317.html]&lt;br /&gt;
&lt;br /&gt;
Here is a working example of the approach running on a headless compute node running CTK tests (which also use Qt and VTK)&lt;br /&gt;
&lt;br /&gt;
[https://github.com/pieper/CTK/blob/master/.travis.yml]&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/Python_Scripting&amp;diff=43078</id>
		<title>Documentation/Nightly/Developers/FAQ/Python Scripting</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/Python_Scripting&amp;diff=43078"/>
		<updated>2015-10-24T01:52:48Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* How can I use a visual debugger for step-by-step debugging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;__TOC__&lt;br /&gt;
={{#titleparts: {{PAGENAME}} | | -1 }}=&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
='''Developer FAQ: {{{1}}}'''=&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to systematically execute custom python code at startup ? ==&lt;br /&gt;
&lt;br /&gt;
Each time Slicer starts, it will look up for a file named &amp;lt;code&amp;gt;.slicerrc.py&amp;lt;/code&amp;gt; into your HOME folder.&lt;br /&gt;
&lt;br /&gt;
See [[Documentation/{{documentation/version}}/FAQ/General#What_is_my_HOME_folder_.3F|What is my HOME folder ?]]&lt;br /&gt;
&lt;br /&gt;
== How to save an image/volume using python ? ==&lt;br /&gt;
&lt;br /&gt;
The module &amp;lt;code&amp;gt;slicer.util&amp;lt;/code&amp;gt; provides methods allowing to save either a node or an entire scene:&lt;br /&gt;
* saveNode&lt;br /&gt;
* saveScene&lt;br /&gt;
&lt;br /&gt;
For more details see:&lt;br /&gt;
* https://github.com/Slicer/Slicer/blob/master/Base/Python/slicer/util.py#L229-267&lt;br /&gt;
* https://github.com/Slicer/Slicer/blob/master/Base/Python/slicer/tests/test_slicer_util_save.py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to assign a volume to a Slice view ? ==&lt;br /&gt;
&lt;br /&gt;
Assuming the &amp;lt;code&amp;gt;MRHead&amp;lt;/code&amp;gt; sample data has been loaded, you could do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
red_logic = slicer.app.layoutManager().sliceWidget(&amp;quot;Red&amp;quot;).sliceLogic()&lt;br /&gt;
red_cn = red_logic.GetSliceCompositeNode()&lt;br /&gt;
red_logic.GetSliceCompositeNode().SetBackgroundVolumeID(slicer.util.getNode('MRHead').GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Discussion: http://slicer-devel.65872.n3.nabble.com/Assign-volumes-to-views-tt4028694.html&lt;br /&gt;
&lt;br /&gt;
== How to access vtkRenderer in Slicer 3D view ? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
renderer = slicer.app.layoutManager().threeDWidget(0).threeDView().renderWindow().GetRenderers().GetFirstRenderer()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to access displayable manager associated with a Slicer 2D or 3D view ? ==&lt;br /&gt;
&lt;br /&gt;
As originally explained [http://slicer-devel.65872.n3.nabble.com/How-to-get-the-point-of-a-3D-model-based-on-the-fiducial-position-td4031760.html#a4031762 here], you could use the method &amp;lt;code&amp;gt;getDisplayableManagers()&amp;lt;/code&amp;gt; available in any [{{doxygen-class-url|qMRMLThreeDView}} qMRMLThreeDView] and [{{doxygen-class-url|qMRMLSliceView}} qMRMLSliceView].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
for v in range(lm.threeDViewCount):&lt;br /&gt;
  td = lm.threeDWidget(v)&lt;br /&gt;
  ms = vtk.vtkCollection()&lt;br /&gt;
  td.getDisplayableManagers(ms)&lt;br /&gt;
  for i in range(ms.GetNumberOfItems()):&lt;br /&gt;
   m = ms.GetItemAsObject(i)&lt;br /&gt;
   if m.GetClassName() == &amp;quot;vtkMRMLModelDisplayableManager&amp;quot;:&lt;br /&gt;
     print(m)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to center the 3D view on the scene ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
threeDWidget = layoutManager.threeDWidget(0)&lt;br /&gt;
threeDView = threeDWidget.threeDView()&lt;br /&gt;
threeDView.resetFocalPoint()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Should I use 'old style' or 'new style' python classes in my scripted module ? ==&lt;br /&gt;
&lt;br /&gt;
When python classes have no superclass specified they are 'old style' as described here [http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes].&lt;br /&gt;
&lt;br /&gt;
In general it doesn't matter for the classes in a scripted module, since they won't be subclassed either old or new style should be the same.&lt;br /&gt;
&lt;br /&gt;
For other python code in slicer where you might be subclassing, it's better to use new style classes.  See the class hierarchies in the [https://github.com/Slicer/Slicer/tree/master/Modules/Scripted/EditorLib EditorLib] and the [https://github.com/Slicer/Slicer/tree/master/Modules/Scripted/DICOM/DICOMLib DICOMLib] for examples.&lt;br /&gt;
&lt;br /&gt;
== How to harden a transform ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; n = getNode('Bone')&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; logic = slicer.vtkSlicerTransformLogic()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; logic.hardenTransform(n)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Discussion: http://slicer-devel.65872.n3.nabble.com/Scripting-hardened-transforms-tt4029456.html&lt;br /&gt;
&lt;br /&gt;
== Where can I find example scripts? ==&lt;br /&gt;
&lt;br /&gt;
Have a look at [[Documentation/{{documentation/version}}/ScriptRepository]].&lt;br /&gt;
&lt;br /&gt;
== How can I use a visual debugger for step-by-step debugging ==&lt;br /&gt;
&lt;br /&gt;
===Debugging using PyCharm or PyDev===&lt;br /&gt;
Visual debugging (setting breakpoints, execute code step-by-step, view variables, stack, etc.) of Python scripted module is possible by using [https://www.jetbrains.com/pycharm/ PyCharm] or [http://pydev.org/ PyDev] by using the ''Python debugger'' module [[Documentation/{{documentation/version}}/Extensions/DebuggingTools|Debugging tools]] extension.&lt;br /&gt;
&lt;br /&gt;
'''See detailed instructions at the [[Documentation/{{documentation/version}}/Extensions/DebuggingTools|Debugging tools extension page]].'''&lt;br /&gt;
[[File:PyDevRemoteDebugSlicer.png|800px|thumb|center|Visual debugging of Python modules in Slicer]]&lt;br /&gt;
&lt;br /&gt;
===Debugging using Visual Studio===&lt;br /&gt;
On Windows, [https://github.com/Microsoft/PTVS Python Tools for Visual Studio] (PTVS) enables debugging Python inside Visual Studio. Its remote debugging capability allows attaching the debugger to Slicer's embedded Python environment.&lt;br /&gt;
&lt;br /&gt;
See [[Documentation/{{documentation/version}}/Developers/Tutorials/Debugging_Python_in_Visual_Studio | Debugging Python in Visual Studio]] for details.&lt;br /&gt;
&lt;br /&gt;
===Debugging using remote-pdb===&lt;br /&gt;
&lt;br /&gt;
A command line debugging session with a [https://docs.python.org/3/library/pdb.html pdb] interface can be achieved with [https://github.com/ionelmc/python-remote-pdb python-remote-pdb].&lt;br /&gt;
&lt;br /&gt;
Install python-remote-pdb into Slicer's Python:&lt;br /&gt;
&lt;br /&gt;
  git clone https://github.com/ionelmc/python-remote-pdb.git&lt;br /&gt;
  cd python-remote-pdb&lt;br /&gt;
  /path/to/Slicer-build/Slicer-build/Slicer ./setup.py install&lt;br /&gt;
&lt;br /&gt;
Then, call ''set_trace()'' where you want to start the debugger.&lt;br /&gt;
&lt;br /&gt;
  from remote_pdb import set_trace; set_trace()&lt;br /&gt;
&lt;br /&gt;
In the console where Slicer was started, a message like the following will be printed:&lt;br /&gt;
&lt;br /&gt;
  RemotePdb session open at 127.0.0.1:1234, waiting for connection&lt;br /&gt;
&lt;br /&gt;
In another terminal, connect with telnet:&lt;br /&gt;
&lt;br /&gt;
  telnet 127.0.0.1 4444&lt;br /&gt;
&lt;br /&gt;
or socat (has history, readline support):&lt;br /&gt;
&lt;br /&gt;
  socat readline tcp:127.0.0.1:4444&lt;br /&gt;
&lt;br /&gt;
== Why can't I access my C++ Qt class from python ==&lt;br /&gt;
* Python wrapping of a Qt class requires a Qt style constructor with QObject as argument (it can be defaulted to null though), which is public. If one of these are missing, python wrapping will fail for that class&lt;br /&gt;
* [Other reasons go here]&lt;br /&gt;
&lt;br /&gt;
== How can I access callData argument in a VTK object observer callback function ==&lt;br /&gt;
&lt;br /&gt;
To get notification about an event emitted by a VTK object you can simply use the AddObserver method, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sceneModifiedCallback(caller, eventId):&lt;br /&gt;
  print(&amp;quot;Scene modified&amp;quot;)&lt;br /&gt;
  print(&amp;quot;There are {0} nodes in the scene&amp;quot;. format(slicer.mrmlScene.GetNumberOfNodes()))&lt;br /&gt;
&lt;br /&gt;
sceneModifiedObserverTag = slicer.mrmlScene.AddObserver(vtk.vtkCommand.ModifiedEvent, sceneModifiedCallback)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If an event also contains additional information as CallData then the type of this argument has to be specified as well, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@vtk.calldata_type(vtk.VTK_OBJECT)&lt;br /&gt;
def nodeAddedCallback(caller, eventId, callData):&lt;br /&gt;
  print(&amp;quot;Node added&amp;quot;)&lt;br /&gt;
  print(&amp;quot;New node: {0}&amp;quot;.format(callData.GetName()))&lt;br /&gt;
&lt;br /&gt;
nodeAddedModifiedObserverTag = slicer.mrmlScene.AddObserver(slicer.vtkMRMLScene.NodeAddedEvent, nodeAddedCallback)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: @vtk.calldata_type is a Python decorator, which modifies properties of a function that is declared right after the decorator. The decorator is defined in VTK (in Wrapping\Python\vtk\util\misc.py).&lt;br /&gt;
&lt;br /&gt;
Usage from a class requires an extra step of creating the callback in the class __init__ function, as Python2 by default does some extra wrapping (http://stackoverflow.com/questions/9523370/adding-attributes-to-instance-methods-in-python):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyClass:&lt;br /&gt;
  def __init__(self):&lt;br /&gt;
    from functools import partial&lt;br /&gt;
    def nodeAddedCallback(self, caller, eventId, callData):&lt;br /&gt;
      print(&amp;quot;Node added&amp;quot;)&lt;br /&gt;
      print(&amp;quot;New node: {0}&amp;quot;.format(callData.GetName()))&lt;br /&gt;
    self.nodeAddedCallback = partial(nodeAddedCallback, self)&lt;br /&gt;
    self.nodeAddedCallback.CallDataType = vtk.VTK_OBJECT&lt;br /&gt;
  def registerCallbacks(self):&lt;br /&gt;
    self.nodeAddedModifiedObserverTag = slicer.mrmlScene.AddObserver(slicer.vtkMRMLScene.NodeAddedEvent, self.nodeAddedCallback)&lt;br /&gt;
  def unregisterCallbacks(self):&lt;br /&gt;
    slicer.mrmlScene.RemoveObserver(self.nodeAddedModifiedObserverTag)&lt;br /&gt;
        &lt;br /&gt;
myObject = MyClass()&lt;br /&gt;
myObject.registerCallbacks()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Allowed CallDataType values:  VTK_STRING, VTK_OBJECT, VTK_INT, VTK_LONG, VTK_DOUBLE, VTK_FLOAT, &amp;quot;string0&amp;quot;. See more information here:&lt;br /&gt;
https://github.com/Kitware/VTK/blob/master/Wrapping/PythonCore/vtkPythonCommand.cxx&lt;br /&gt;
&lt;br /&gt;
A simplified syntax is available by using a mix-in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from slicer.util import VTKObservationMixin&lt;br /&gt;
&lt;br /&gt;
class MyClass(VTKObservationMixin):&lt;br /&gt;
  def __init__(self):&lt;br /&gt;
    VTKObservationMixin.__init__(self)&lt;br /&gt;
    self.addObserver(slicer.mrmlScene, slicer.vtkMRMLScene.NodeAddedEvent, self.nodeAddedCallback)&lt;br /&gt;
  &lt;br /&gt;
  @vtk.calldata_type(vtk.VTK_OBJECT)&lt;br /&gt;
  def nodeAddedCallback(self, caller, eventId, callData):&lt;br /&gt;
    print(&amp;quot;Node added&amp;quot;)&lt;br /&gt;
    print(&amp;quot;New node: {0}&amp;quot;.format(callData.GetName()))&lt;br /&gt;
&lt;br /&gt;
myObject = MyClass()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: VTKObservationMixin is a Python mix-in that allows adding a set of methods to a class by inheritance. VTKObservationMixin includes addObserver, hasObserver, observer, removeObserver, removeObservers methods, defined in Slicer (in Base\Python\slicer\util.py). For example of usage, see [https://github.com/Slicer/Slicer/blob/master/Base/Python/slicer/tests/test_slicer_util_VTKObservationMixin.py test_slicer_util_VTKObservationMixin.py]&lt;br /&gt;
&lt;br /&gt;
== How to run CLI module from Python? ==&lt;br /&gt;
&lt;br /&gt;
See [[Documentation/{{documentation/version}}/Developers/Python_scripting#Running_a_CLI_from_Python|here]].&lt;br /&gt;
&lt;br /&gt;
== How can I run slicer operations from a batch script? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Slicer --no-main-window --python-script /tmp/test.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Contents of /tmp/test.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# use a slicer scripted module logic&lt;br /&gt;
from SampleData import SampleDataLogic&lt;br /&gt;
SampleDataLogic().downloadMRHead()&lt;br /&gt;
head = slicer.util.getNode('MRHead')&lt;br /&gt;
&lt;br /&gt;
# use a vtk class&lt;br /&gt;
threshold = vtk.vtkImageThreshold()&lt;br /&gt;
threshold.SetInputData(head.GetImageData())&lt;br /&gt;
threshold.ThresholdBetween(100, 200)&lt;br /&gt;
threshold.SetInValue(255)&lt;br /&gt;
threshold.SetOutValue(0)&lt;br /&gt;
&lt;br /&gt;
#  use a slicer-specific C++ class&lt;br /&gt;
erode = slicer.vtkImageErode()&lt;br /&gt;
erode.SetInputConnection(threshold.GetOutputPort())&lt;br /&gt;
erode.SetNeighborTo4()  &lt;br /&gt;
erode.Update()          &lt;br /&gt;
&lt;br /&gt;
head.SetAndObserveImageData(erode.GetOutputDataObject(0))&lt;br /&gt;
&lt;br /&gt;
slicer.util.saveNode(head, &amp;quot;/tmp/eroded.nrrd&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
exit()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How can I run Slicer on a headless compute node? ==&lt;br /&gt;
&lt;br /&gt;
Many cluster nodes are installed with minimal linux systems that don't include X servers.  X servers, particularly those with hardware acceleration traditionally needed to be installed with root privileges, making it impossible to run applications that rendered using X or OpenGL.&lt;br /&gt;
&lt;br /&gt;
But there is a workaround which allows everything in slicer to work normally so you could even do headless rendering.&lt;br /&gt;
&lt;br /&gt;
You can use a modern version of X that supports running a dummy framebuffer.  This can be installed in user mode so you don't even need to have root on the system.&lt;br /&gt;
&lt;br /&gt;
See [https://www.xpra.org/trac/wiki/Xdummy] for details.&lt;br /&gt;
&lt;br /&gt;
There's a thread here with more discussion: [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2015/017317.html]&lt;br /&gt;
&lt;br /&gt;
Here is a working example of the approach running on a headless compute node running CTK tests (which also use Qt and VTK)&lt;br /&gt;
&lt;br /&gt;
[https://github.com/pieper/CTK/blob/master/.travis.yml]&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Pip&amp;diff=43073</id>
		<title>Documentation/Labs/Pip</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Pip&amp;diff=43073"/>
		<updated>2015-10-21T23:14:51Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Using Pip */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Installing Pip =&lt;br /&gt;
&lt;br /&gt;
In a nutshell, both setuptools and pip will have to be installed.&lt;br /&gt;
&lt;br /&gt;
1. Download setuptools: https://bootstrap.pypa.io/ez_setup.py&lt;br /&gt;
  &lt;br /&gt;
2. Install setuptools: &lt;br /&gt;
&lt;br /&gt;
 $ Slicer ez_setup.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Downloading https://pypi.python.org/packages/source/s/setuptools/setuptools-18.4.zip&lt;br /&gt;
Extracting in /tmp/tmpj3retR&lt;br /&gt;
Now working in /tmp/tmpj3retR/setuptools-18.4&lt;br /&gt;
Installing Setuptools&lt;br /&gt;
running install&lt;br /&gt;
running bdist_egg&lt;br /&gt;
running egg_info&lt;br /&gt;
writing requirements to setuptools.egg-info/requires.txt&lt;br /&gt;
writing setuptools.egg-info/PKG-INFO&lt;br /&gt;
writing top-level names to setuptools.egg-info/top_level.txt&lt;br /&gt;
writing dependency_links to setuptools.egg-info/dependency_links.txt&lt;br /&gt;
writing entry points to setuptools.egg-info/entry_points.txt&lt;br /&gt;
reading manifest file 'setuptools.egg-info/SOURCES.txt'&lt;br /&gt;
reading manifest template 'MANIFEST.in'&lt;br /&gt;
writing manifest file 'setuptools.egg-info/SOURCES.txt'&lt;br /&gt;
installing library code to build/bdist.linux-x86_64/egg&lt;br /&gt;
running install_lib&lt;br /&gt;
running build_py&lt;br /&gt;
creating build&lt;br /&gt;
creating build/lib&lt;br /&gt;
copying easy_install.py -&amp;gt; build/lib&lt;br /&gt;
creating build/lib/setuptools&lt;br /&gt;
copying setuptools/windows_support.py -&amp;gt; build/lib/setuptools&lt;br /&gt;
[...]&lt;br /&gt;
copying setuptools.egg-info/zip-safe -&amp;gt; build/bdist.linux-x86_64/egg/EGG-INFO&lt;br /&gt;
creating dist&lt;br /&gt;
creating 'dist/setuptools-18.4-py2.7.egg' and adding 'build/bdist.linux-x86_64/egg' to it&lt;br /&gt;
removing 'build/bdist.linux-x86_64/egg' (and everything under it)&lt;br /&gt;
Processing setuptools-18.4-py2.7.egg&lt;br /&gt;
Copying setuptools-18.4-py2.7.egg to /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/lib/python2.7/site-packages&lt;br /&gt;
Removing setuptools 5.4.1.dev0 from easy-install.pth file&lt;br /&gt;
Adding setuptools 18.4 to easy-install.pth file&lt;br /&gt;
Installing easy_install script to /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/bin&lt;br /&gt;
Installing easy_install-2.7 script to /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/bin&lt;br /&gt;
&lt;br /&gt;
Installed /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/lib/python2.7/site-packages/setuptools-18.4-py2.7.egg&lt;br /&gt;
Processing dependencies for setuptools==18.4&lt;br /&gt;
Finished processing dependencies for setuptools==18.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Download pip: https://raw.github.com/pypa/pip/master/contrib/get-pip.py&lt;br /&gt;
&lt;br /&gt;
4. Install pip: &lt;br /&gt;
&lt;br /&gt;
  $ Slicer get-pip.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number of registered modules: 1 &lt;br /&gt;
Number of instantiated modules: 1 &lt;br /&gt;
Number of loaded modules: 1 &lt;br /&gt;
Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
Slicer RC file loaded [09/01/2013 20:41:29]&lt;br /&gt;
Downloading/unpacking pip&lt;br /&gt;
  Running setup.py egg_info for package pip&lt;br /&gt;
    Number of registered modules: 1&lt;br /&gt;
    Number of instantiated modules: 1&lt;br /&gt;
    Number of loaded modules: 1&lt;br /&gt;
    Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
    Slicer RC file loaded [09/01/2013 20:41:38]&lt;br /&gt;
    warning: manifest_maker: standard file '' not found&lt;br /&gt;
    warning: no files found matching '*.html' under directory 'docs'&lt;br /&gt;
    warning: no previously-included files matching '*.txt' found under directory 'docs/_build'&lt;br /&gt;
    no previously-included directories found matching 'docs/_build/_sources'&lt;br /&gt;
Installing collected packages: pip&lt;br /&gt;
  Running setup.py install for pip&lt;br /&gt;
    Number of registered modules: 1&lt;br /&gt;
    Number of instantiated modules: 1&lt;br /&gt;
    Number of loaded modules: 1&lt;br /&gt;
    Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
    Slicer RC file loaded [09/01/2013 20:41:41]&lt;br /&gt;
    warning: manifest_maker: standard file '' not found&lt;br /&gt;
    warning: no files found matching '*.html' under directory 'docs'&lt;br /&gt;
    warning: no previously-included files matching '*.txt' found under directory 'docs/_build'&lt;br /&gt;
    no previously-included directories found matching 'docs/_build/_sources'&lt;br /&gt;
    Installing pip script to /home/jchris/Projects/Slicer-AHM-Superbuild-Debug/python-build/bin&lt;br /&gt;
    Installing pip-2.6 script to /home/jchris/Projects/Slicer-AHM-Superbuild-Debug/python-build/bin&lt;br /&gt;
Successfully installed pip&lt;br /&gt;
Cleaning up...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For additional information regarding installation of pip. See http://www.pip-installer.org/en/latest/installing.html&lt;br /&gt;
&lt;br /&gt;
= Using Pip =&lt;br /&gt;
&lt;br /&gt;
1. Within the Slicer python interactor:&lt;br /&gt;
&lt;br /&gt;
  ./Slicer --no-main-window --disable-cli-modules --disable-loadable-modules --disable-scripted-loadable-modules --show-python-interactor&lt;br /&gt;
&lt;br /&gt;
2. Try to install a package&lt;br /&gt;
&lt;br /&gt;
  import pip&lt;br /&gt;
  pip.main(['install', 'pygments'])&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Pip&amp;diff=43071</id>
		<title>Documentation/Labs/Pip</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Pip&amp;diff=43071"/>
		<updated>2015-10-21T21:38:47Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Installing Pip */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Installing Pip =&lt;br /&gt;
&lt;br /&gt;
In a nutshell, both setuptools and pip will have to be installed.&lt;br /&gt;
&lt;br /&gt;
1. Download setuptools: https://bootstrap.pypa.io/ez_setup.py&lt;br /&gt;
  &lt;br /&gt;
2. Install setuptools: &lt;br /&gt;
&lt;br /&gt;
 $ Slicer ez_setup.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Downloading https://pypi.python.org/packages/source/s/setuptools/setuptools-18.4.zip&lt;br /&gt;
Extracting in /tmp/tmpj3retR&lt;br /&gt;
Now working in /tmp/tmpj3retR/setuptools-18.4&lt;br /&gt;
Installing Setuptools&lt;br /&gt;
running install&lt;br /&gt;
running bdist_egg&lt;br /&gt;
running egg_info&lt;br /&gt;
writing requirements to setuptools.egg-info/requires.txt&lt;br /&gt;
writing setuptools.egg-info/PKG-INFO&lt;br /&gt;
writing top-level names to setuptools.egg-info/top_level.txt&lt;br /&gt;
writing dependency_links to setuptools.egg-info/dependency_links.txt&lt;br /&gt;
writing entry points to setuptools.egg-info/entry_points.txt&lt;br /&gt;
reading manifest file 'setuptools.egg-info/SOURCES.txt'&lt;br /&gt;
reading manifest template 'MANIFEST.in'&lt;br /&gt;
writing manifest file 'setuptools.egg-info/SOURCES.txt'&lt;br /&gt;
installing library code to build/bdist.linux-x86_64/egg&lt;br /&gt;
running install_lib&lt;br /&gt;
running build_py&lt;br /&gt;
creating build&lt;br /&gt;
creating build/lib&lt;br /&gt;
copying easy_install.py -&amp;gt; build/lib&lt;br /&gt;
creating build/lib/setuptools&lt;br /&gt;
copying setuptools/windows_support.py -&amp;gt; build/lib/setuptools&lt;br /&gt;
[...]&lt;br /&gt;
copying setuptools.egg-info/zip-safe -&amp;gt; build/bdist.linux-x86_64/egg/EGG-INFO&lt;br /&gt;
creating dist&lt;br /&gt;
creating 'dist/setuptools-18.4-py2.7.egg' and adding 'build/bdist.linux-x86_64/egg' to it&lt;br /&gt;
removing 'build/bdist.linux-x86_64/egg' (and everything under it)&lt;br /&gt;
Processing setuptools-18.4-py2.7.egg&lt;br /&gt;
Copying setuptools-18.4-py2.7.egg to /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/lib/python2.7/site-packages&lt;br /&gt;
Removing setuptools 5.4.1.dev0 from easy-install.pth file&lt;br /&gt;
Adding setuptools 18.4 to easy-install.pth file&lt;br /&gt;
Installing easy_install script to /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/bin&lt;br /&gt;
Installing easy_install-2.7 script to /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/bin&lt;br /&gt;
&lt;br /&gt;
Installed /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/lib/python2.7/site-packages/setuptools-18.4-py2.7.egg&lt;br /&gt;
Processing dependencies for setuptools==18.4&lt;br /&gt;
Finished processing dependencies for setuptools==18.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Download pip: https://raw.github.com/pypa/pip/master/contrib/get-pip.py&lt;br /&gt;
&lt;br /&gt;
4. Install pip: &lt;br /&gt;
&lt;br /&gt;
  $ Slicer get-pip.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number of registered modules: 1 &lt;br /&gt;
Number of instantiated modules: 1 &lt;br /&gt;
Number of loaded modules: 1 &lt;br /&gt;
Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
Slicer RC file loaded [09/01/2013 20:41:29]&lt;br /&gt;
Downloading/unpacking pip&lt;br /&gt;
  Running setup.py egg_info for package pip&lt;br /&gt;
    Number of registered modules: 1&lt;br /&gt;
    Number of instantiated modules: 1&lt;br /&gt;
    Number of loaded modules: 1&lt;br /&gt;
    Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
    Slicer RC file loaded [09/01/2013 20:41:38]&lt;br /&gt;
    warning: manifest_maker: standard file '' not found&lt;br /&gt;
    warning: no files found matching '*.html' under directory 'docs'&lt;br /&gt;
    warning: no previously-included files matching '*.txt' found under directory 'docs/_build'&lt;br /&gt;
    no previously-included directories found matching 'docs/_build/_sources'&lt;br /&gt;
Installing collected packages: pip&lt;br /&gt;
  Running setup.py install for pip&lt;br /&gt;
    Number of registered modules: 1&lt;br /&gt;
    Number of instantiated modules: 1&lt;br /&gt;
    Number of loaded modules: 1&lt;br /&gt;
    Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
    Slicer RC file loaded [09/01/2013 20:41:41]&lt;br /&gt;
    warning: manifest_maker: standard file '' not found&lt;br /&gt;
    warning: no files found matching '*.html' under directory 'docs'&lt;br /&gt;
    warning: no previously-included files matching '*.txt' found under directory 'docs/_build'&lt;br /&gt;
    no previously-included directories found matching 'docs/_build/_sources'&lt;br /&gt;
    Installing pip script to /home/jchris/Projects/Slicer-AHM-Superbuild-Debug/python-build/bin&lt;br /&gt;
    Installing pip-2.6 script to /home/jchris/Projects/Slicer-AHM-Superbuild-Debug/python-build/bin&lt;br /&gt;
Successfully installed pip&lt;br /&gt;
Cleaning up...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For additional information regarding installation of pip. See http://www.pip-installer.org/en/latest/installing.html&lt;br /&gt;
&lt;br /&gt;
= Using Pip =&lt;br /&gt;
&lt;br /&gt;
1. Within the Slicer python interactor:&lt;br /&gt;
&lt;br /&gt;
  ./Slicer --no-main-window --disable-cli-modules --disable-loadable-modules --disable-scripted-loadable-modules --show-python-interactor&lt;br /&gt;
&lt;br /&gt;
2. Define the function &amp;lt;code&amp;gt;install_distributions&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def install_distributions(distributions):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  Copied from http://threebean.org/blog/2011/06/06/installing-from-pip-inside-python-or-a-simple-pip-api/&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  import pip.commands.install&lt;br /&gt;
  command = pip.commands.install.InstallCommand()&lt;br /&gt;
  opts, args = command.parser.parse_args()&lt;br /&gt;
  # TBD, why do we have to run the next part here twice before actual install&lt;br /&gt;
  requirement_set = command.run(opts, distributions)&lt;br /&gt;
  requirement_set = command.run(opts, distributions)&lt;br /&gt;
  requirement_set.install(opts)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Try to install a package&lt;br /&gt;
&lt;br /&gt;
 install_distributions([&amp;quot;Markdown&amp;quot;])&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Pip&amp;diff=43070</id>
		<title>Documentation/Labs/Pip</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Pip&amp;diff=43070"/>
		<updated>2015-10-21T21:38:29Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Installing Pip */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Installing Pip =&lt;br /&gt;
&lt;br /&gt;
In a nutshell, both setuptools and pip will have to be installed.&lt;br /&gt;
&lt;br /&gt;
1. Download setuptools: https://bootstrap.pypa.io/ez_setup.py&lt;br /&gt;
  &lt;br /&gt;
2. Install distribute: &lt;br /&gt;
&lt;br /&gt;
 $ Slicer ez_setup.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Downloading https://pypi.python.org/packages/source/s/setuptools/setuptools-18.4.zip&lt;br /&gt;
Extracting in /tmp/tmpj3retR&lt;br /&gt;
Now working in /tmp/tmpj3retR/setuptools-18.4&lt;br /&gt;
Installing Setuptools&lt;br /&gt;
running install&lt;br /&gt;
running bdist_egg&lt;br /&gt;
running egg_info&lt;br /&gt;
writing requirements to setuptools.egg-info/requires.txt&lt;br /&gt;
writing setuptools.egg-info/PKG-INFO&lt;br /&gt;
writing top-level names to setuptools.egg-info/top_level.txt&lt;br /&gt;
writing dependency_links to setuptools.egg-info/dependency_links.txt&lt;br /&gt;
writing entry points to setuptools.egg-info/entry_points.txt&lt;br /&gt;
reading manifest file 'setuptools.egg-info/SOURCES.txt'&lt;br /&gt;
reading manifest template 'MANIFEST.in'&lt;br /&gt;
writing manifest file 'setuptools.egg-info/SOURCES.txt'&lt;br /&gt;
installing library code to build/bdist.linux-x86_64/egg&lt;br /&gt;
running install_lib&lt;br /&gt;
running build_py&lt;br /&gt;
creating build&lt;br /&gt;
creating build/lib&lt;br /&gt;
copying easy_install.py -&amp;gt; build/lib&lt;br /&gt;
creating build/lib/setuptools&lt;br /&gt;
copying setuptools/windows_support.py -&amp;gt; build/lib/setuptools&lt;br /&gt;
[...]&lt;br /&gt;
copying setuptools.egg-info/zip-safe -&amp;gt; build/bdist.linux-x86_64/egg/EGG-INFO&lt;br /&gt;
creating dist&lt;br /&gt;
creating 'dist/setuptools-18.4-py2.7.egg' and adding 'build/bdist.linux-x86_64/egg' to it&lt;br /&gt;
removing 'build/bdist.linux-x86_64/egg' (and everything under it)&lt;br /&gt;
Processing setuptools-18.4-py2.7.egg&lt;br /&gt;
Copying setuptools-18.4-py2.7.egg to /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/lib/python2.7/site-packages&lt;br /&gt;
Removing setuptools 5.4.1.dev0 from easy-install.pth file&lt;br /&gt;
Adding setuptools 18.4 to easy-install.pth file&lt;br /&gt;
Installing easy_install script to /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/bin&lt;br /&gt;
Installing easy_install-2.7 script to /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/bin&lt;br /&gt;
&lt;br /&gt;
Installed /home/matt/bin/Slicer-4.4.0-linux-amd64/lib/Python/lib/python2.7/site-packages/setuptools-18.4-py2.7.egg&lt;br /&gt;
Processing dependencies for setuptools==18.4&lt;br /&gt;
Finished processing dependencies for setuptools==18.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Download pip: https://raw.github.com/pypa/pip/master/contrib/get-pip.py&lt;br /&gt;
&lt;br /&gt;
4. Install pip: &lt;br /&gt;
&lt;br /&gt;
  $ Slicer get-pip.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number of registered modules: 1 &lt;br /&gt;
Number of instantiated modules: 1 &lt;br /&gt;
Number of loaded modules: 1 &lt;br /&gt;
Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
Slicer RC file loaded [09/01/2013 20:41:29]&lt;br /&gt;
Downloading/unpacking pip&lt;br /&gt;
  Running setup.py egg_info for package pip&lt;br /&gt;
    Number of registered modules: 1&lt;br /&gt;
    Number of instantiated modules: 1&lt;br /&gt;
    Number of loaded modules: 1&lt;br /&gt;
    Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
    Slicer RC file loaded [09/01/2013 20:41:38]&lt;br /&gt;
    warning: manifest_maker: standard file '' not found&lt;br /&gt;
    warning: no files found matching '*.html' under directory 'docs'&lt;br /&gt;
    warning: no previously-included files matching '*.txt' found under directory 'docs/_build'&lt;br /&gt;
    no previously-included directories found matching 'docs/_build/_sources'&lt;br /&gt;
Installing collected packages: pip&lt;br /&gt;
  Running setup.py install for pip&lt;br /&gt;
    Number of registered modules: 1&lt;br /&gt;
    Number of instantiated modules: 1&lt;br /&gt;
    Number of loaded modules: 1&lt;br /&gt;
    Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
    Slicer RC file loaded [09/01/2013 20:41:41]&lt;br /&gt;
    warning: manifest_maker: standard file '' not found&lt;br /&gt;
    warning: no files found matching '*.html' under directory 'docs'&lt;br /&gt;
    warning: no previously-included files matching '*.txt' found under directory 'docs/_build'&lt;br /&gt;
    no previously-included directories found matching 'docs/_build/_sources'&lt;br /&gt;
    Installing pip script to /home/jchris/Projects/Slicer-AHM-Superbuild-Debug/python-build/bin&lt;br /&gt;
    Installing pip-2.6 script to /home/jchris/Projects/Slicer-AHM-Superbuild-Debug/python-build/bin&lt;br /&gt;
Successfully installed pip&lt;br /&gt;
Cleaning up...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For additional information regarding installation of pip. See http://www.pip-installer.org/en/latest/installing.html&lt;br /&gt;
&lt;br /&gt;
= Using Pip =&lt;br /&gt;
&lt;br /&gt;
1. Within the Slicer python interactor:&lt;br /&gt;
&lt;br /&gt;
  ./Slicer --no-main-window --disable-cli-modules --disable-loadable-modules --disable-scripted-loadable-modules --show-python-interactor&lt;br /&gt;
&lt;br /&gt;
2. Define the function &amp;lt;code&amp;gt;install_distributions&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def install_distributions(distributions):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  Copied from http://threebean.org/blog/2011/06/06/installing-from-pip-inside-python-or-a-simple-pip-api/&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  import pip.commands.install&lt;br /&gt;
  command = pip.commands.install.InstallCommand()&lt;br /&gt;
  opts, args = command.parser.parse_args()&lt;br /&gt;
  # TBD, why do we have to run the next part here twice before actual install&lt;br /&gt;
  requirement_set = command.run(opts, distributions)&lt;br /&gt;
  requirement_set = command.run(opts, distributions)&lt;br /&gt;
  requirement_set.install(opts)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Try to install a package&lt;br /&gt;
&lt;br /&gt;
 install_distributions([&amp;quot;Markdown&amp;quot;])&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Pip&amp;diff=43069</id>
		<title>Documentation/Labs/Pip</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Pip&amp;diff=43069"/>
		<updated>2015-10-21T21:36:13Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Installing Pip */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Installing Pip =&lt;br /&gt;
&lt;br /&gt;
In a nutshell, both setuptools and pip will have to be installed.&lt;br /&gt;
&lt;br /&gt;
1. Download setuptools: https://bootstrap.pypa.io/ez_setup.py&lt;br /&gt;
  &lt;br /&gt;
2. Install distribute: &lt;br /&gt;
&lt;br /&gt;
 $ Slicer ez_setup.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number of registered modules: 1 &lt;br /&gt;
Number of instantiated modules: 1 &lt;br /&gt;
Number of loaded modules: 1 &lt;br /&gt;
Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
Slicer RC file loaded [09/01/2013 20:23:41]&lt;br /&gt;
Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.34.tar.gz&lt;br /&gt;
Extracting in /tmp/tmpW05FBr&lt;br /&gt;
Now working in /tmp/tmpW05FBr/distribute-0.6.34&lt;br /&gt;
Installing Distribute&lt;br /&gt;
File  &amp;quot;/tmp/tmpW05FBr/distribute-0.6.34/qSlicerBaseQTCore_fr.qm&amp;quot;  doesn't exist. &lt;br /&gt;
Number of registered modules: 1 &lt;br /&gt;
Number of instantiated modules: 1 &lt;br /&gt;
Number of loaded modules: 1 &lt;br /&gt;
Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
Slicer RC file loaded [09/01/2013 20:24:29]&lt;br /&gt;
Before install bootstrap.&lt;br /&gt;
Scanning installed packages&lt;br /&gt;
No setuptools distribution found&lt;br /&gt;
running install&lt;br /&gt;
running bdist_egg&lt;br /&gt;
running egg_info&lt;br /&gt;
writing distribute.egg-info/PKG-INFO&lt;br /&gt;
writing top-level names to distribute.egg-info/top_level.txt&lt;br /&gt;
[...]&lt;br /&gt;
Installed /home/jchris/Projects/Slicer-AHM-Superbuild-Debug/python-build/lib/python2.6/site-packages/distribute-0.6.34-py2.6.egg&lt;br /&gt;
Processing dependencies for distribute==0.6.34&lt;br /&gt;
Finished processing dependencies for distribute==0.6.34&lt;br /&gt;
After install bootstrap.&lt;br /&gt;
Creating /home/jchris/Projects/Slicer-AHM-Superbuild-Debug/python-build/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info&lt;br /&gt;
Creating /home/jchris/Projects/Slicer-AHM-Superbuild-Debug/python-build/lib/python2.6/site-packages/setuptools.pth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Download pip: https://raw.github.com/pypa/pip/master/contrib/get-pip.py&lt;br /&gt;
&lt;br /&gt;
4. Install pip: &lt;br /&gt;
&lt;br /&gt;
  $ Slicer get-pip.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number of registered modules: 1 &lt;br /&gt;
Number of instantiated modules: 1 &lt;br /&gt;
Number of loaded modules: 1 &lt;br /&gt;
Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
Slicer RC file loaded [09/01/2013 20:41:29]&lt;br /&gt;
Downloading/unpacking pip&lt;br /&gt;
  Running setup.py egg_info for package pip&lt;br /&gt;
    Number of registered modules: 1&lt;br /&gt;
    Number of instantiated modules: 1&lt;br /&gt;
    Number of loaded modules: 1&lt;br /&gt;
    Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
    Slicer RC file loaded [09/01/2013 20:41:38]&lt;br /&gt;
    warning: manifest_maker: standard file '' not found&lt;br /&gt;
    warning: no files found matching '*.html' under directory 'docs'&lt;br /&gt;
    warning: no previously-included files matching '*.txt' found under directory 'docs/_build'&lt;br /&gt;
    no previously-included directories found matching 'docs/_build/_sources'&lt;br /&gt;
Installing collected packages: pip&lt;br /&gt;
  Running setup.py install for pip&lt;br /&gt;
    Number of registered modules: 1&lt;br /&gt;
    Number of instantiated modules: 1&lt;br /&gt;
    Number of loaded modules: 1&lt;br /&gt;
    Loading Slicer RC file [/home/jchris/.slicerrc.py]&lt;br /&gt;
    Slicer RC file loaded [09/01/2013 20:41:41]&lt;br /&gt;
    warning: manifest_maker: standard file '' not found&lt;br /&gt;
    warning: no files found matching '*.html' under directory 'docs'&lt;br /&gt;
    warning: no previously-included files matching '*.txt' found under directory 'docs/_build'&lt;br /&gt;
    no previously-included directories found matching 'docs/_build/_sources'&lt;br /&gt;
    Installing pip script to /home/jchris/Projects/Slicer-AHM-Superbuild-Debug/python-build/bin&lt;br /&gt;
    Installing pip-2.6 script to /home/jchris/Projects/Slicer-AHM-Superbuild-Debug/python-build/bin&lt;br /&gt;
Successfully installed pip&lt;br /&gt;
Cleaning up...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For additional information regarding installation of pip. See http://www.pip-installer.org/en/latest/installing.html&lt;br /&gt;
&lt;br /&gt;
= Using Pip =&lt;br /&gt;
&lt;br /&gt;
1. Within the Slicer python interactor:&lt;br /&gt;
&lt;br /&gt;
  ./Slicer --no-main-window --disable-cli-modules --disable-loadable-modules --disable-scripted-loadable-modules --show-python-interactor&lt;br /&gt;
&lt;br /&gt;
2. Define the function &amp;lt;code&amp;gt;install_distributions&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def install_distributions(distributions):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  Copied from http://threebean.org/blog/2011/06/06/installing-from-pip-inside-python-or-a-simple-pip-api/&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  import pip.commands.install&lt;br /&gt;
  command = pip.commands.install.InstallCommand()&lt;br /&gt;
  opts, args = command.parser.parse_args()&lt;br /&gt;
  # TBD, why do we have to run the next part here twice before actual install&lt;br /&gt;
  requirement_set = command.run(opts, distributions)&lt;br /&gt;
  requirement_set = command.run(opts, distributions)&lt;br /&gt;
  requirement_set.install(opts)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Try to install a package&lt;br /&gt;
&lt;br /&gt;
 install_distributions([&amp;quot;Markdown&amp;quot;])&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Prerequisites/Qt&amp;diff=39715</id>
		<title>Documentation/Nightly/Developers/Build Instructions/Prerequisites/Qt</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Prerequisites/Qt&amp;diff=39715"/>
		<updated>2014-11-21T04:57:34Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Qt 4.8.6 / VS2012 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
= Binary vs build-from-source ? =&lt;br /&gt;
&lt;br /&gt;
If you build Slicer on ...&lt;br /&gt;
&lt;br /&gt;
== Linux  ==&lt;br /&gt;
&lt;br /&gt;
* Using [[#Download_links|binary]] works great for both '''Debug''' and '''Release''' build of Slicer. See [[#Download_links]] and [[#Installation_instruction]]&lt;br /&gt;
&lt;br /&gt;
== Mac  ==&lt;br /&gt;
&lt;br /&gt;
* Using [[#Download_links|binary]] works great for both '''Debug''' and '''Release''' build of Slicer. See [[#Download_links]] and [[#Installation_instruction]]&lt;br /&gt;
&lt;br /&gt;
* To use QtCreator and the Slicer designer plugins, a possible option is to build QtCreator against the installed Qt libraries. See [http://slicer-devel.65872.n3.nabble.com/Using-Qt-Creator-with-Slicer4-On-Mac-OS-X-Multiple-Qt-libs-loaded-tp4026660p4026690.html discussion on the mailing list].&lt;br /&gt;
&lt;br /&gt;
== Windows  ==&lt;br /&gt;
&lt;br /&gt;
=== Debug (32 and 64-bit) or Release (64-bit) ===&lt;br /&gt;
&lt;br /&gt;
* Normally you should plan to build Qt from source to have complete control over the process. See [https://github.com/jcfr/qt-easy-build one-liner build command] or more detailed [[#Build_instructions]]&lt;br /&gt;
&lt;br /&gt;
* You may find that the '''unsigned''' binary downloads from this site are usable: http://sourceforge.net/projects/qtx64/files/qt-x64/4.8.5/msvc2008/&lt;br /&gt;
&lt;br /&gt;
* '''Details''': Using the Qt Designer on Windows requires that the Slicer plugins are [http://doc.trolltech.com/4.6/deployment-plugins.html#debugging-plugins|compiled in the same mode as Qt]. If Qt was compiled in Release mode (default), Slicer would have to be compiled in Release mode as well. However if Qt is compiled in Debug mode only, Slicer has to be compiled in Debug too. When Qt is in &amp;quot;Release and Debug&amp;quot; mode only the Release version of Designer.exe is generated, Slicer would have to be compiled in Release. So for developers, the &amp;lt;b&amp;gt;Debug mode is recommended&amp;lt;/b&amp;gt;, this is why we detail the compilation of Qt below.&lt;br /&gt;
&lt;br /&gt;
=== Release (32-bit) ===&lt;br /&gt;
&lt;br /&gt;
* Using [[#Download_links|binary]] works great for 32-bit Release build of Slicer. See [[#Download_links]] and [[#Installation_instruction]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Download Qt: Source and Binaries =&lt;br /&gt;
&lt;br /&gt;
== Download links ==&lt;br /&gt;
&lt;br /&gt;
The following table list the link allowing to download either the '''recommended''' source code or binary of Qt.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;margin-left: 20px;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
!colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot;|Linux&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|Mac&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|Windows&lt;br /&gt;
|- bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;1&amp;quot;|SnowLeopard&lt;br /&gt;
!colspan=&amp;quot;1&amp;quot;|Lion, Mountain Lion&lt;br /&gt;
!colspan=&amp;quot;1&amp;quot;|VS2008&lt;br /&gt;
!colspan=&amp;quot;1&amp;quot;|VS2010&lt;br /&gt;
|- bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
!|64bits&lt;br /&gt;
!|64bits&lt;br /&gt;
!|64bits&lt;br /&gt;
!|64bits&lt;br /&gt;
!|64bits&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#FFFFCC&amp;quot; | Qt source link&lt;br /&gt;
|align=&amp;quot;center&amp;quot; colspan=&amp;quot;1&amp;quot;| [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz 4.8.6]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; colspan=&amp;quot;1&amp;quot;| [http://download.qt-project.org/archive/qt/4.7/qt-everywhere-opensource-src-4.7.4.tar.gz  4.7.4]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; colspan=&amp;quot;1&amp;quot;| [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz 4.8.6]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; colspan=&amp;quot;1&amp;quot;| [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.zip 4.8.6]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; colspan=&amp;quot;1&amp;quot;| [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.zip 4.8.6]&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#FFFFCC&amp;quot; | Qt binary link&lt;br /&gt;
|align=&amp;quot;center&amp;quot; colspan=&amp;quot;1&amp;quot;| (src or apt-get package) &amp;lt;!-- [http://packages.kitware.com/download/item/3733/QtSdk-offline-linux-x86_64-v1.2.1.run SDK-1.2] --&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot; colspan=&amp;quot;1&amp;quot;| [http://packages.kitware.com/download/item/3736/qt-mac-opensource-4.7.4.dmg 4.7.4] &amp;lt;br&amp;gt; [http://packages.kitware.com/download/item/3739/qt-mac-opensource-4.7.4-debug-libs.dmg 4.7.4 (optional: debug libs)] &lt;br /&gt;
|align=&amp;quot;center&amp;quot; colspan=&amp;quot;1&amp;quot;| [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-opensource-mac-4.8.6-1.dmg 4.8.6] &amp;lt;br&amp;gt; [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-opensource-mac-4.8.6-1-debug-libs.dmg 4.8.6 (optional: debug libs)] &lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;center&amp;quot; colspan=&amp;quot;1&amp;quot;| [http://sourceforge.net/projects/qtx64/files/qt-x64/4.8.5/msvc2008/ 4.8.5 (unsigned installer)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; colspan=&amp;quot;1&amp;quot;| [http://sourceforge.net/projects/qtx64/files/qt-x64/4.8.5/msvc2010/ 4.8.5 (unsigned installer)]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== Installation instruction ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
See [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt/Instal_QtSDK1.2_Offline_Linux_64|Qt installation guide (4.7.4, Linux, 64-bit, Offline)]]&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Qt version specific issues ==&lt;br /&gt;
&lt;br /&gt;
* Issues for Qt &amp;lt; 4.7.4 are not reported&lt;br /&gt;
&lt;br /&gt;
=== All ===&lt;br /&gt;
* NA&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* '''Qt 4.6.x''' on windows (and possibly in linux/mac): No image base64 support in QLabel/QTooltips (work around exists though)&lt;br /&gt;
* '''Qt 4.8''' does not work with PythonQt in slicer4 - suggested version is 4.7.4&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
* NA&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Problem building Qt on MacOSX 10.9. See https://bugreports.qt-project.org/browse/QTBUG-32237&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* '''Qt 4.6''': hard to compile - TBD: Be more specific&lt;br /&gt;
* '''Qt 4.7''': click outside of popup (http://na-mic.org/Mantis/view.php?id=1241) - Is it fixed in Qt 4.8 ?&lt;br /&gt;
* '''Qt 4.7.3''': http://na-mic.org/Mantis/view.php?id=1388 - Fixed in Qt 4.7.4&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
* NA&lt;br /&gt;
&lt;br /&gt;
== How to change the minimum required version ? ==&lt;br /&gt;
&lt;br /&gt;
* This applied only for Slicer &amp;lt; [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22466 r22466].&lt;br /&gt;
&lt;br /&gt;
* It's indeed possible to use a different version, just be aware that moving forward in time, things may not work as expected. Even worse Slicer may simply fail to compile.&lt;br /&gt;
&lt;br /&gt;
* By configuring Slicer using &amp;lt;code&amp;gt;-DSlicer_REQUIRED_QT_VERSION:STRING=4.7.0&amp;lt;/code&amp;gt;, you will be able to change the minimum required version.&lt;br /&gt;
&lt;br /&gt;
* See [https://github.com/Slicer/Slicer/commit/898bb14e 898bb14e], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=19698 r19698], [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2012/008130.html Mailing list]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Build instructions =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{mbox&lt;br /&gt;
| text = Please, make sure that your IDE/compiler is '''properly installed''' and that all associated '''ServicePack''' are also installed. See [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites|Prerequisites]].&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
See [[Documentation/Nightly/Developers/Build_Instructions#Linux]]&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
TODO: Add a section specific to debian based platform.&lt;br /&gt;
*Downloading the binaries of Qt works fine with Linux, you do not have to compile Qt manually. &lt;br /&gt;
** Note: You need to install the libQtWebkit-devel package too.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Consider installing the following optional packages (&amp;lt;code&amp;gt;libxt-dev libxrender-dev libxrandr-dev libxinerama-dev libxcursor-dev libfontconfig-dev libglib2.0-dev&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{{pre2|scroll|&lt;br /&gt;
mkdir qt-everywhere-opensource-build-4.7.4&lt;br /&gt;
tar xvfz qt-everywhere-opensource-src-4.7.4.tar.gz&lt;br /&gt;
cd qt-everywhere-opensource-src-4.7.4&lt;br /&gt;
./configure -prefix ../qt-everywhere-opensource-build-4.7.4 -debug -opensource -confirm-license -no-qt3support -webkit -nomake examples -nomake demos&lt;br /&gt;
make -j8&lt;br /&gt;
make install&lt;br /&gt;
}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!-- Note: On a 64 bit system, you may have to add &amp;lt;code&amp;gt;-arch x86_64&amp;lt;/code&amp;gt; to the Qt configure command line (?) --&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Note: Adapt &amp;lt;code&amp;gt;-j8&amp;lt;/code&amp;gt; with the number of core on your machine, a dual core should probably not do more than &amp;lt;code&amp;gt;-j3&amp;lt;/code&amp;gt;, an 8 core machine can resonably go as much as &amp;lt;code&amp;gt;-j12&amp;lt;/code&amp;gt;.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mac  ==&lt;br /&gt;
&lt;br /&gt;
Similar to Linux configuration. Note that &amp;lt;code&amp;gt;-arch x86_64&amp;lt;/code&amp;gt; has been added.&lt;br /&gt;
&lt;br /&gt;
For earlier versions of Xcode and Mac OS X&lt;br /&gt;
{{pre2|scroll|&lt;br /&gt;
mkdir qt-everywhere-opensource-build-4.7.4&lt;br /&gt;
tar xvfz qt-everywhere-opensource-src-4.7.4.tar.gz&lt;br /&gt;
cd qt-everywhere-opensource-src-4.7.4&lt;br /&gt;
./configure -prefix ../qt-everywhere-opensource-build-4.7.4 -debug-and-release -opensource -confirm-license -no-qt3support -webkit -arch x86_64 -nomake examples -nomake demos -sdk /Developer/SDKs/MacOSX10.5.sdk&lt;br /&gt;
make -j8&lt;br /&gt;
make install&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
On the latest Xcode versions (4.3) and Lion (10.7) the Developer directories have moved.  The command is now:&lt;br /&gt;
&lt;br /&gt;
{{pre2|scroll|&lt;br /&gt;
./configure -prefix ../qt-everywhere-opensource-build-4.7.4 -debug-and-release -opensource -confirm-license -no-qt3support -arch x86_64 -nomake examples -nomake demos -webkit -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Consider reading: http://doc.qt.nokia.com/4.7/developing-on-mac.html)&lt;br /&gt;
&lt;br /&gt;
* Note:&lt;br /&gt;
** If building against SDK 10.6 or 10.7, you will probably get link errors similar to what's described in [https://trac.macports.org/ticket/30346] and [http://qt-project.org/forums/viewthread/15933]. Solution is provided here [https://bugreports.qt-project.org/browse/QTBUG-24361 here].&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
* Use a windows extracter to unzip the [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt#Download_links|Qt archive]], don't use cygwin unzip it.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4.7.4 / VS2008 ===&lt;br /&gt;
&lt;br /&gt;
* Rename the folder into for example &amp;lt;code&amp;gt;qt-4.7.4-64-vs2008-rel&amp;lt;/code&amp;gt;. &lt;br /&gt;
** Note: Each build of Qt should be done it its own folder !&lt;br /&gt;
** Note: A 32 bit debug build would be done in a folder named &amp;lt;code&amp;gt;qt-4.7.4-32-vs2008-deb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Launch the msvc2008 command prompt &amp;lt;!-- (MSVC08-&amp;gt;Tools-&amp;gt;Visual Studio 2008 CommandPrompt) (or: launch cmd.exe and run &amp;lt;code&amp;gt;vcvars32.bat&amp;lt;/code&amp;gt;) --&amp;gt;&lt;br /&gt;
** 32-bit build: Start menu -&amp;gt; MSVC08-&amp;gt;Tools -&amp;gt; &amp;quot;Visual Studio 2008 Command Prompt&amp;quot;&lt;br /&gt;
** 64-bit build: Start menu -&amp;gt; MSVC08-&amp;gt;Tools -&amp;gt; &amp;quot;Visual Studio 2008 x64 Win64 Command Prompt&amp;quot;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Note: Don't start prompt from inside visual studio or it will be an x86 32 bit shell.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configure&lt;br /&gt;
** For debug: &amp;lt;code&amp;gt;configure.exe -platform win32-msvc2008 -opensource -confirm-license -debug -webkit -nomake examples -nomake demos&amp;lt;/code&amp;gt;&lt;br /&gt;
** For release: &amp;lt;code&amp;gt;configure.exe -platform win32-msvc2008 -opensource -confirm-license -release -webkit -nomake examples -nomake demos&amp;lt;/code&amp;gt;&lt;br /&gt;
** Note: &amp;lt;code&amp;gt;win32-msvc2008&amp;lt;/code&amp;gt; is used for both 32 and 64-bit.&lt;br /&gt;
** Note: The option &amp;lt;code&amp;gt;-prefix&amp;lt;/code&amp;gt; doesn't work on Windows.&lt;br /&gt;
** Note: According to [http://qt.nokia.com/doc/4.7/supported-platforms.html] Qt does not support msvc2008 on windows xp.  However, running &amp;lt;code&amp;gt;configure.exe&amp;lt;/code&amp;gt; with no &amp;lt;code&amp;gt;-platform&amp;lt;/code&amp;gt; argument seems to work. If you run configure with the &amp;lt;code&amp;gt;-platform&amp;lt;/code&amp;gt; argument first by mistake, and if &amp;lt;code&amp;gt;configure -clean&amp;lt;/code&amp;gt; doesn't work, then you may need to start from a fresh extraction from the .zip archive before running &amp;lt;code&amp;gt;configure.exe&amp;lt;/code&amp;gt; again with no &amp;lt;code&amp;gt;-platform&amp;lt;/code&amp;gt;, unless you can run &amp;lt;code&amp;gt;nmake&amp;lt;/code&amp;gt; with the config clean target.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build using &amp;lt;code&amp;gt;nmake&amp;lt;/code&amp;gt;&lt;br /&gt;
** Note: building with webkit support requires that &amp;lt;i&amp;gt;src/3rdparty/webkit/WebCore/tmp/moc/{debug,release}_shared/mocinclude.tmp&amp;lt;/i&amp;gt; be removed. else you will get linker errors like &amp;lt;code&amp;gt;QNetworkReplyHandler.obj : error LNK2001: unresolved external symbol &amp;quot;public: virtual struct QMetaObject const * __thiscall WebCore::FormDataIODevice::metaObject(void)const (?metaObject@FormDataIODevice@WebCore@@UBEPBUQMetaObject@@XZ)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Note: If you encounter the following error &amp;lt;code&amp;gt;api\qscriptextensionplugin.h(43): Error: Undefined interface,&amp;lt;/code&amp;gt;, delete the files &amp;lt;i&amp;gt;\src\script\tmp\moc\debug_shared\mocinclude.tmp&amp;lt;/i&amp;gt; and &amp;lt;i&amp;gt;\src\script\tmp\moc\release_shared\mocinclude.tmp&amp;lt;/i&amp;gt; and restart nmake. For more info, please see [http://bugreports.qt.nokia.com/browse/QTBUG-6470 QTBug 6470]].&lt;br /&gt;
&lt;br /&gt;
=== Qt 4.8.5 / VS2010 ===&lt;br /&gt;
&lt;br /&gt;
* Rename the folder into for example &amp;lt;code&amp;gt;qt-4.8.5-64-vs2010-rel&amp;lt;/code&amp;gt;. &lt;br /&gt;
** Note: Each build of Qt should be done it its own folder !&lt;br /&gt;
** Note: A 32 bit debug build would be done in a folder named &amp;lt;code&amp;gt;qt-4.8.5-32-vs2010-deb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Launch the msvc2010 command prompt &amp;lt;!-- (MSVC10-&amp;gt;Tools-&amp;gt;Visual Studio 2010 CommandPrompt) (or: launch cmd.exe and run &amp;lt;code&amp;gt;vcvars32.bat&amp;lt;/code&amp;gt;) --&amp;gt;&lt;br /&gt;
** 32-bit build: Start menu -&amp;gt; MSVC10-&amp;gt;Tools -&amp;gt; &amp;quot;Visual Studio 2010 Command Prompt&amp;quot;&lt;br /&gt;
** 64-bit build: Start menu -&amp;gt; MSVC10-&amp;gt;Tools -&amp;gt; &amp;quot;Visual Studio 2010 x64 Win64 Command Prompt&amp;quot;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Note: Don't start prompt from inside visual studio or it will be an x86 32 bit shell.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Download pearl http://strawberryperl.com/ and create a new folder into for example &amp;lt;code&amp;gt;strawberry&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Download jom and create a new folder into for example &amp;lt;code&amp;gt;jom&amp;lt;/code&amp;gt;.&lt;br /&gt;
**Add this new folder into the path (system properties)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configure&lt;br /&gt;
** For debug: &amp;lt;code&amp;gt;configure.exe -platform win32-msvc2010 -debug -opensource -confirm-license -webkit -nomake examples -nomake demos&amp;lt;/code&amp;gt;&lt;br /&gt;
** For release: &amp;lt;code&amp;gt;configure.exe -platform win32-msvc2010 -release -opensource -confirm-license -webkit -nomake examples -nomake demos&amp;lt;/code&amp;gt;&lt;br /&gt;
** Note: &amp;lt;code&amp;gt;win32-msvc2010&amp;lt;/code&amp;gt; is used for both 32 and 64-bit.&lt;br /&gt;
** Note: The option &amp;lt;code&amp;gt;-prefix&amp;lt;/code&amp;gt; doesn't work on Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build using &amp;lt;code&amp;gt;jom -jn&amp;lt;/code&amp;gt;&lt;br /&gt;
**Note: n is the number of cores of your CPU, so adapt it.&lt;br /&gt;
** Note: building with webkit support requires that &amp;lt;i&amp;gt;src/3rdparty/webkit/WebCore/tmp/moc/{debug,release}_shared/mocinclude.tmp&amp;lt;/i&amp;gt; be removed. else you will get linker errors like &amp;lt;code&amp;gt;QNetworkReplyHandler.obj : error LNK2001: unresolved external symbol &amp;quot;public: virtual struct QMetaObject const * __thiscall WebCore::FormDataIODevice::metaObject(void)const (?metaObject@FormDataIODevice@WebCore@@UBEPBUQMetaObject@@XZ)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Note: If you encounter the following error &amp;lt;code&amp;gt;api\qscriptextensionplugin.h(43): Error: Undefined interface,&amp;lt;/code&amp;gt;, delete the files &amp;lt;i&amp;gt;\src\script\tmp\moc\debug_shared\mocinclude.tmp&amp;lt;/i&amp;gt; and &amp;lt;i&amp;gt;\src\script\tmp\moc\release_shared\mocinclude.tmp&amp;lt;/i&amp;gt; and restart jom. For more info, please see [http://bugreports.qt.nokia.com/browse/QTBUG-6470 QTBug 6470]].&lt;br /&gt;
&lt;br /&gt;
=== Qt 4.8.6 / VS2012 ===&lt;br /&gt;
&lt;br /&gt;
* Make sure your Visual Studio 2012 is patched with the latest patch (e.g. [http://www.microsoft.com/en-us/download/confirmation.aspx?id=39305 patch 4]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Download the [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.zip source archive], extract and rename the folder into for example &amp;lt;code&amp;gt;qt-4.8.6-64-vs2012-rel&amp;lt;/code&amp;gt;. &lt;br /&gt;
** Note: Each build of Qt should be done it its own folder !&lt;br /&gt;
** Note: A 32 bit debug build would be done in a folder named &amp;lt;code&amp;gt;qt-4.8.6-32-vs2010-deb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Replace the webkit &amp;lt;i&amp;gt;src\3rdparty\webkit\Source\JavaScriptCore\wtf\hashset.h&amp;lt;/i&amp;gt; file with this [https://bitbucket.org/Vertexwahn/bluego/src/56dbe84212222ec6954d8d327a5e443106bcc447/deploy/BlueGo0.0.4/qt4.8.3vs2012patch/HashSet.h?at=default file]&lt;br /&gt;
&lt;br /&gt;
* Launch the msvc2012 command prompt &amp;lt;!-- (MSVC12-&amp;gt;Tools-&amp;gt;Visual Studio 2012 CommandPrompt) (or: launch cmd.exe and run &amp;lt;code&amp;gt;vcvars32.bat&amp;lt;/code&amp;gt;) --&amp;gt;&lt;br /&gt;
** 32-bit build: Start menu -&amp;gt; MSVC12-&amp;gt;Visual Studio Tools -&amp;gt; &amp;quot;VS2012 x86 Command Prompt&amp;quot;&lt;br /&gt;
** 64-bit build: Start menu -&amp;gt; MSVC12-&amp;gt;Visual Studio Tools -&amp;gt; &amp;quot;VS2012 x64 Win64 Command Prompt&amp;quot;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Note: Don't start prompt from inside visual studio or it will be an x86 32 bit shell.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If you want openssl support (optional):&lt;br /&gt;
** Download perl http://strawberryperl.com/ and create a new folder into for example &amp;lt;code&amp;gt;strawberry&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Configure&lt;br /&gt;
** For debug: &amp;lt;code&amp;gt;configure.exe -platform win32-msvc2012 -debug -opensource -confirm-license -webkit -nomake examples -nomake demos&amp;lt;/code&amp;gt;&lt;br /&gt;
** For release: &amp;lt;code&amp;gt;configure.exe -platform win32-msvc2012 -release -opensource -confirm-license -webkit -nomake examples -nomake demos&amp;lt;/code&amp;gt;&lt;br /&gt;
** Note: &amp;lt;code&amp;gt;win32-msvc2012&amp;lt;/code&amp;gt; is used for both 32 and 64-bit.&lt;br /&gt;
** Note: The option &amp;lt;code&amp;gt;-prefix&amp;lt;/code&amp;gt; doesn't work on Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build using &amp;lt;code&amp;gt;nmake&amp;lt;/code&amp;gt;&lt;br /&gt;
** Alternatively you can use jom (much faster)&lt;br /&gt;
*** Download jom and create a new folder into for example &amp;lt;code&amp;gt;jom&amp;lt;/code&amp;gt;.&lt;br /&gt;
*** Add this new folder into the path (system properties)&lt;br /&gt;
*** Build using &amp;lt;code&amp;gt;jom -jn&amp;lt;/code&amp;gt;&lt;br /&gt;
**** Note: n is the number of cores of your CPU, so adapt it.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20140826&amp;diff=38903</id>
		<title>Developer Meetings/20140826</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20140826&amp;diff=38903"/>
		<updated>2014-08-26T18:45:24Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== To discuss ==&lt;br /&gt;
* Release status&lt;br /&gt;
** BRAINSFit performance&lt;br /&gt;
** Mac hang on startup. See [http://www.na-mic.org/Bug/view.php?id=3809 #3809]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FPE Exception ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ~/Support/cmake-3.0.1-Darwin64-universal/CMake.app/Contents/bin/ctest -R N4ITKBiasFieldCorrectionTest -VV&lt;br /&gt;
UpdateCTestConfiguration  from :/Users/kitware/Projects/Slicer-updated-vtk-Debug/Slicer-build/DartConfiguration.tcl&lt;br /&gt;
Parse Config file:/Users/kitware/Projects/Slicer-updated-vtk-Debug/Slicer-build/DartConfiguration.tcl&lt;br /&gt;
 Add coverage exclude regular expressions.&lt;br /&gt;
 Add coverage exclude: /CMakeFiles/CMakeTmp/&lt;br /&gt;
 Add coverage exclude: .*/moc_.*&lt;br /&gt;
 Add coverage exclude: .*/ui_.*&lt;br /&gt;
 Add coverage exclude: .*/qrc_.*&lt;br /&gt;
 Add coverage exclude: .*/Testing/.*&lt;br /&gt;
 Add coverage exclude: .*Python.cxx&lt;br /&gt;
 Add coverage exclude: .*PythonInit.cxx&lt;br /&gt;
 Add coverage exclude: .*/DesignerPlugins/.*&lt;br /&gt;
 Add coverage exclude: .*/generated_cpp/.*&lt;br /&gt;
UpdateCTestConfiguration  from :/Users/kitware/Projects/Slicer-updated-vtk-Debug/Slicer-build/DartConfiguration.tcl&lt;br /&gt;
Parse Config file:/Users/kitware/Projects/Slicer-updated-vtk-Debug/Slicer-build/DartConfiguration.tcl&lt;br /&gt;
Test project /Users/kitware/Projects/Slicer-updated-vtk-Debug/Slicer-build&lt;br /&gt;
Constructing a list of tests&lt;br /&gt;
Done constructing a list of tests&lt;br /&gt;
Checking test dependency graph...&lt;br /&gt;
Checking test dependency graph end&lt;br /&gt;
test 452&lt;br /&gt;
    Start 452: N4ITKBiasFieldCorrectionTest&lt;br /&gt;
&lt;br /&gt;
452: Test command: /Users/kitware/Projects/Slicer-updated-vtk-Debug/Slicer-build/Slicer &amp;quot;--launcher-no-splash&amp;quot; &amp;quot;--launch&amp;quot; &amp;quot;/Users/kitware/Projects/Slicer-updated-vtk-Debug/Slicer-build/bin/N4ITKBiasFieldCorrectionTest&amp;quot; &amp;quot;--compare&amp;quot; &amp;quot;/Users/kitware/Projects/Slicer/Modules/CLI/N4ITKBiasFieldCorrection/Testing/../Data/Baseline/he3corrected.nii.gz&amp;quot; &amp;quot;/Users/kitware/Projects/Slicer-updated-vtk-Debug/Slicer-build/Testing/Temporary/he3corrected.nii.gz&amp;quot; &amp;quot;ModuleEntryPoint&amp;quot; &amp;quot;--maskimage&amp;quot; &amp;quot;/Users/kitware/Projects/Slicer/Testing/Data/Input/he3mask.nii.gz&amp;quot; &amp;quot;--outputbiasfield&amp;quot; &amp;quot;/Users/kitware/Projects/Slicer-updated-vtk-Debug/Slicer-build/Testing/Temporary/he3biasfield.nii.gz&amp;quot; &amp;quot;/Users/kitware/Projects/Slicer/Testing/Data/Input/he3volume.nii.gz&amp;quot; &amp;quot;/Users/kitware/Projects/Slicer-updated-vtk-Debug/Slicer-build/Testing/Temporary/he3corrected.nii.gz&amp;quot;&lt;br /&gt;
452: Test timeout computed to be: 1800&lt;br /&gt;
452: &amp;lt;filter-start&amp;gt;&lt;br /&gt;
452: &amp;lt;filter-name&amp;gt;N4BiasFieldCorrectionImageFilter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
452: &amp;lt;filter-comment&amp;gt; &amp;quot;N4 Bias field correction&amp;quot; &amp;lt;/filter-comment&amp;gt;&lt;br /&gt;
452: &amp;lt;/filter-start&amp;gt;&lt;br /&gt;
452: FPE Signal Caught&lt;br /&gt;
452: X87CR: 37f&lt;br /&gt;
452: X87SR: 0&lt;br /&gt;
452: MXCSR: 1f80&lt;br /&gt;
452: signal:  SIGFPE with code FPE_FLTUND&lt;br /&gt;
452: invalid flag: 0&lt;br /&gt;
452: divByZero flag: 0&lt;br /&gt;
452: error: [/Users/kitware/Projects/Slicer-updated-vtk-Debug/Slicer-build/bin/N4ITKBiasFieldCorrectionTest] exit abnormally - Report the problem.&lt;br /&gt;
1/1 Test #452: N4ITKBiasFieldCorrectionTest .....***Failed    2.27 sec&lt;br /&gt;
&lt;br /&gt;
0% tests passed, 1 tests failed out of 1&lt;br /&gt;
&lt;br /&gt;
Label Time Summary:&lt;br /&gt;
N4ITKBiasFieldCorrection    =   2.27 sec&lt;br /&gt;
&lt;br /&gt;
Total Test time (real) =   2.33 sec&lt;br /&gt;
&lt;br /&gt;
The following tests FAILED:&lt;br /&gt;
	452 - N4ITKBiasFieldCorrectionTest (Failed)&lt;br /&gt;
Errors while running CTest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* To get a stack trace via abort in ITK code: http://www.itk.org/Doxygen/html/classitk_1_1FloatingPointExceptions.html#adcb4de14da2419e8aaee1637bc375779&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20140429&amp;diff=37735</id>
		<title>Developer Meetings/20140429</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20140429&amp;diff=37735"/>
		<updated>2014-04-29T17:10:12Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== To discuss ==&lt;br /&gt;
&lt;br /&gt;
* [http://na-mic.org/Mantis/roadmap_page.php 4.4 Roadmap]&lt;br /&gt;
* wget certificate error&lt;br /&gt;
** SimpleITK utilizes ez_setup.py to get setuptools&lt;br /&gt;
* Move [https://github.com/TubeTK/TubeTK-ParameterSerializer ParameterSerializer] repository to the [https://github.com/Slicer Slicer GitHub Organization].&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20140415&amp;diff=37600</id>
		<title>Developer Meetings/20140415</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20140415&amp;diff=37600"/>
		<updated>2014-04-15T18:29:00Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== To discuss ==&lt;br /&gt;
* Adding annotations to slice views&lt;br /&gt;
** Discuss the performance considerations/issues&lt;br /&gt;
** Initial test branch: https://github.com/mehrtash/Slicer/compare/Slice-Annotations&lt;br /&gt;
* ParameterSerializer support&lt;br /&gt;
** https://github.com/thewtex/Slicer/commit/b54805fd8faf1b46fb3bcd65b35ab7e99fae9e62&lt;br /&gt;
** Use as backend for https://github.com/Slicer/Slicer/blame/master/Libs/MRML/CLI/vtkMRMLCommandLineModuleNode.h ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
* Corner annotation: Make sense to add back the feature if performance are not impacted&lt;br /&gt;
&lt;br /&gt;
* ParameterSerializer:&lt;br /&gt;
** Will be integrating the request&lt;br /&gt;
** Next natural step would be to create a storage node for the parameter node that would save the parameters as json file&lt;br /&gt;
&lt;br /&gt;
* VTK6 support - Disabled by default - Probably in by the end of the week&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20140415&amp;diff=37597</id>
		<title>Developer Meetings/20140415</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20140415&amp;diff=37597"/>
		<updated>2014-04-15T18:09:12Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* To discuss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== To discuss ==&lt;br /&gt;
* Adding annotations to slice views&lt;br /&gt;
** Discuss the performance considerations/issues&lt;br /&gt;
** Initial test branch: https://github.com/mehrtash/Slicer/compare/Slice-Annotations&lt;br /&gt;
* ParameterSerializer support&lt;br /&gt;
** https://github.com/thewtex/Slicer/commit/b54805fd8faf1b46fb3bcd65b35ab7e99fae9e62&lt;br /&gt;
** Use as backend for https://github.com/Slicer/Slicer/blame/master/Libs/MRML/CLI/vtkMRMLCommandLineModuleNode.h&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20140415&amp;diff=37596</id>
		<title>Developer Meetings/20140415</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20140415&amp;diff=37596"/>
		<updated>2014-04-15T17:38:47Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* To discuss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== To discuss ==&lt;br /&gt;
* Adding annotations to slice views&lt;br /&gt;
** Discuss the performance considerations/issues&lt;br /&gt;
** Initial test branch: https://github.com/mehrtash/Slicer/compare/Slice-Annotations&lt;br /&gt;
* ParameterSerializer support&lt;br /&gt;
** https://github.com/thewtex/Slicer/commit/b54805fd8faf1b46fb3bcd65b35ab7e99fae9e62&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20130709&amp;diff=33863</id>
		<title>Developer Meetings/20130709</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20130709&amp;diff=33863"/>
		<updated>2013-07-09T20:35:16Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== To discuss ==&lt;br /&gt;
* Release status&lt;br /&gt;
** ITK Version update needed http://na-mic.org/Mantis/view.php?id=2945#c8943&lt;br /&gt;
*** What to do about missing CLI buffer reuse patch? See https://github.com/Kitware/ITK/commit/2ffb32de2f890e2052eee57ee6f36d10471d8c0c&lt;br /&gt;
* 4D Data support&lt;br /&gt;
** [https://www.assembla.com/spaces/slicerrt/wiki/Slicer_4D_data_representation_and_use_cases notes from Kevin]&lt;br /&gt;
** [http://wiki.slicer.org/slicerWiki/index.php/Documentation/Nightly#Work_in_Progress MultiVolume Importer/Explorer]&lt;br /&gt;
* Numpy windows build patch from Lichen: https://github.com/llcmgh/python-cmake-buildsystem/compare/fix_numpy&lt;br /&gt;
* SimpleFilters from Brad:&lt;br /&gt;
** WIP https://github.com/blowekamp/Slicer/tree/AddSimpleFiltersModule&lt;br /&gt;
** Manage import of json from SimpleITK? Subtree merge? Copy from SimpleITK source dir?&lt;br /&gt;
* Pending SimpleITK patches from Brad&lt;br /&gt;
** https://github.com/Slicer/Slicer/pull/51&lt;br /&gt;
** https://github.com/Slicer/Slicer/pull/50&lt;br /&gt;
* Markups&lt;br /&gt;
** squashing commits and getting ready to git svn dcommit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;del&amp;gt;Check with Matt what is the agenda for ITK 4.4.1 ?&amp;lt;/del&amp;gt;&lt;br /&gt;
* After talking with Matt, we will compile list of fixes that we would like to see in 4.4.1 :)&lt;br /&gt;
** List of fixes:&lt;br /&gt;
*** [https://github.com/Kitware/ITK/commit/df6614403b19139c3831762d443c3390a29ad5e3 df66144] BUG: ImageSeriesWriter + GDCMImageIO loses info&lt;br /&gt;
*** [https://github.com/Kitware/ITK/commit/1fed73108f2c88d4079cd1351f5c52daea7fe7ca 1fed73108f] BUG: VS11 Debug mode assertions fixes &lt;br /&gt;
*** Please add any other patches to [http://www.itk.org/pipermail/insight-developers/2013-July/022922.html this thread].&lt;br /&gt;
&lt;br /&gt;
* Integrate Commit [https://github.com/Kitware/ITK/commit/2ffb32de2f890e2052eee57ee6f36d10471d8c0c 2ffb32de] into ITK ?&lt;br /&gt;
** Known issues: Not tested + Breaking multi threading in SimpleITK&lt;br /&gt;
** Now a show stopper for the release.&lt;br /&gt;
** If Brad has time, he will integrate&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs&amp;diff=32043</id>
		<title>Documentation/Labs</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs&amp;diff=32043"/>
		<updated>2013-06-13T03:57:06Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Internals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the place where we will keep track of our experiments.&lt;br /&gt;
&lt;br /&gt;
= On-going =&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/I18N|Internationalization]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/DeprecatedModules|DeprecatedModules extension]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Units|Units]]&lt;br /&gt;
* [https://github.com/TubeTK/SlicerExecutionModel/wiki/SlicerExecutionModel-Parameter-Serialization SlicerExecutionModel Parameter Serialization]&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Qt484|Qt484]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== SlicerExecutionModel ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/SlicerExecutionModel_Serialization|SlicerExecutionModel Serialization]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/CallingPythonMethodsFromCpp|Calling Python methods from Cpp]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/IPython|IPython]]&lt;br /&gt;
&lt;br /&gt;
== Compilers &amp;amp; IDE ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Ninja|Ninja]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VS2010|VS2010]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VS2012|VS2012]]&lt;br /&gt;
&lt;br /&gt;
== Virtual Machines ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/GPU Virtualization|GPU Virtualization]]&lt;br /&gt;
&lt;br /&gt;
== Debug ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/BRAINS_and_ITKv4_issue|BRAINS and ITKv4 issue]]&lt;br /&gt;
&lt;br /&gt;
= Completed =&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/CMake-ified Python|CMake-ified Python]] - See [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21911 r21911], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21912 r21912], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21913 r21913]&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/ITKv4|ITKv4]]&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/DevelopmentWithGit|Development with Git]] - See [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21863 r21863], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21867 r21867], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21869 r21869], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21879 r21879], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21891 r21891]&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20130212&amp;diff=30545</id>
		<title>Developer Meetings/20130212</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20130212&amp;diff=30545"/>
		<updated>2013-02-18T23:06:49Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== To discuss ==&lt;br /&gt;
* ITKv4 enabled by default / SimpleITK updated to v0.6.1. See [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21688 r21688]&lt;br /&gt;
** Review list of existing issue (mantis tag: ITKv4)&lt;br /&gt;
* Approach to display log on windows: http://slicer-devel.65872.n3.nabble.com/Windows-command-line-tp4027441p4027524.html&lt;br /&gt;
** Log to file ?&lt;br /&gt;
** Provide an other (application + Launcher) which would be console aware ?&lt;br /&gt;
* Demo AutoRun for CLI modules (Julien, [http://www.na-mic.org/Bug/view.php?id=2940 #2940])&lt;br /&gt;
* Continuous integration&lt;br /&gt;
** Test takes way too long - What about creating a ctest LABEL named &amp;quot;fast&amp;quot; or one named &amp;quot;slow&amp;quot;. It would then be easy to run integration tests: &amp;lt;code&amp;gt;ctest -L fast&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ctest -LE slow&amp;lt;/code&amp;gt;&lt;br /&gt;
** Python self test are very long. Does it make sens to run them continously. What about one time a week ? During the weekend ?&lt;br /&gt;
* Refactor of Python self test&lt;br /&gt;
** Duplicated code :( ... =&amp;gt; maintenance hell. See third point reported [http://www.na-mic.org/Wiki/index.php/2013_Project_Week:SelfTests here].&lt;br /&gt;
* Re-enable setup windows 32-bit nightly&lt;br /&gt;
* CMake'ification / OpenSSL integration: No progress due to integration of ITKv4.&lt;br /&gt;
* Extensions&lt;br /&gt;
** Considering disabling extension ukftractography. See https://github.com/pnlbwh/ukftractography/issues/3&lt;br /&gt;
*** Adding extension named &amp;quot;Boost&amp;quot; would probably help: https://github.com/pnlbwh/ukftractography/issues/2&lt;br /&gt;
** Will very probably add an extension named &amp;quot;JsonCpp&amp;quot;. See [https://github.com/chrismullins/ExtensionsIndex/commit/987fa3008e2b7f7f5ff49f80a4e6c736d66499f9 JsonCpp.s4ext]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
* Reviewed ITKv4 issue in Mantis&lt;br /&gt;
** Issue [http://www.na-mic.org/Bug/view.php?id=2289 #2289] - CreateADICOMSeries using ITKv4 does not properly write out Z-spacing&lt;br /&gt;
*** =&amp;gt; Jim Miller is working on the issue&lt;br /&gt;
*** =&amp;gt; A regression test should be added to illustrate the problem.&lt;br /&gt;
&lt;br /&gt;
* Console output on windows&lt;br /&gt;
** To provide feedback for windows user, possible non-exclusive approaches could be to &lt;br /&gt;
*** =&amp;gt; have a popup windows when command like: --help are executed.&lt;br /&gt;
*** =&amp;gt; log output to a file&lt;br /&gt;
** Finally, improving the launcher so that it detects crash and propose an email template with meaningful information would be nice.&lt;br /&gt;
&lt;br /&gt;
* Agreed that having a mechanism to run only &amp;quot;fast&amp;quot; test or exclude &amp;quot;slow&amp;quot; test would help both &amp;quot;Continuous integration&amp;quot; process and would allow developer to run test locally without having to wait 30mins.&lt;br /&gt;
&lt;br /&gt;
* Discussed issue [http://www.na-mic.org/Bug/view.php?id=2915 #2915]&lt;br /&gt;
** Having some VTK helper class to &amp;quot;safely&amp;quot; communicate events from thread to main loop would help.&lt;br /&gt;
&lt;br /&gt;
* Agreed than re-factoring the python self-test infrastructure to minimize code duplication makes sens.&lt;br /&gt;
&lt;br /&gt;
* Presented the concept of &amp;quot;Developer / build-time&amp;quot; extension. Such extension allows to have extension depending on project without having to implement a Superbuild system in the extension itself.&lt;br /&gt;
** This make sens in the context of project/library required at testing time only or if the project generate static library or is headerless. &lt;br /&gt;
** This could also motivate a feature allowing to pass CMake option that would be listed in a extension description file.&lt;br /&gt;
&lt;br /&gt;
* Julien presented his work regarding the CLI AutoRun feature. See http://www.na-mic.org/Bug/view.php?id=2940&lt;br /&gt;
** The will be integrated soon into Slicer. In the mean time, you can check it out [http://public.kitware.com/gitweb?p=Bender/Slicer.git;a=commit;h=503190a99c085bdeefc295d685921c754f3106a2 here]&lt;br /&gt;
** If enabled, it will basically allow any given CLI to run if:&lt;br /&gt;
*** =&amp;gt; Inputs are modified&lt;br /&gt;
*** =&amp;gt; Parameters are changed&lt;br /&gt;
** This will be a great addition, it will enable to create pipeline of CLIs very easily. &lt;br /&gt;
** Will also be available from python.&lt;br /&gt;
&lt;br /&gt;
* Presented to Jim the work (prototype) did at Kitware regarding remote execution of modules:&lt;br /&gt;
&lt;br /&gt;
In a nutshell, the idea is to have a public facing API allowing to execute CLIs. By having the concept of instance_id it is possible to keep the execution of given set of CLIs on the same instance to avoid costly data transfer and leverage the fact data are already in memory.&lt;br /&gt;
&lt;br /&gt;
A midas server would expose an API like:&lt;br /&gt;
 slicer.reserve(timeout = -1)           # reserve a slicer instance for execution. Release the instance after &amp;lt;timeout&amp;gt;&lt;br /&gt;
 slicer.cli.list(instance_id)           # list all cli modules associated with a given instance.&lt;br /&gt;
 slicer.cli.describe(instance_id, name) # describe the cli available on a given instance&lt;br /&gt;
 slicer.cli.run(instance_id, name, parameters) # run cli&lt;br /&gt;
 slicer.release(instance_id)            # release a given instance&lt;br /&gt;
&lt;br /&gt;
By using a midas server, data could then be easily transfer in and out from a common data storage.&lt;br /&gt;
&lt;br /&gt;
Each Slicer instance would also run its own web server exposing also a simple API to &amp;quot;talk&amp;quot; with either a midas instance or any other client being on the same network. It could for example be an other Slicer instance. &lt;br /&gt;
&lt;br /&gt;
The API associated with the Slicer server would be:&lt;br /&gt;
 slicer.cli.list()&lt;br /&gt;
 slicer.cli.describe(name)&lt;br /&gt;
 slicer.cli.run(name, parameters)&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;server&amp;quot; running in Slicer would be [http://twistedmatrix.com/trac/ Twisted], the event-driven networking engine written in Python and licensed under the open source MIT license.&lt;br /&gt;
&lt;br /&gt;
The prototype code of the corresponding midas module is currently available [https://github.com/midasplatform/pyslicer/tree/slicerweb here].&lt;br /&gt;
&lt;br /&gt;
On midas side, work is required to implement the &amp;quot;slicer.reserve / release()&amp;quot; method. Currently, as a first implementation it could return the &amp;quot;id&amp;quot; of a Slicer instance running along side the midas server. Moving forward, the idea would be to be able to either have existing Slicer instance registered as available or spawning virtual machine on the amazon cloud ... &lt;br /&gt;
&lt;br /&gt;
On Slicer side, the integration of Twisted need to be reviewed.&lt;br /&gt;
&lt;br /&gt;
All of that said, if you believe this could benefit your projects. Make sure to drop a line to Jim (&amp;lt;email&amp;gt;millerjv@ge.com&amp;lt;/email&amp;gt;) and myself (&amp;lt;email&amp;gt;jchris.fillionr@kitware.com&amp;lt;/email&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* JsonCpp Extension has been merged and is all green :-): http://slicer.cdash.org/index.php?project=Slicer4&amp;amp;filtercount=1&amp;amp;showfilters=1&amp;amp;field1=buildname/string&amp;amp;compare1=63&amp;amp;value1=Json&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.2/Developers/Tutorials/PortingCLIToITKv4&amp;diff=30450</id>
		<title>Documentation/4.2/Developers/Tutorials/PortingCLIToITKv4</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.2/Developers/Tutorials/PortingCLIToITKv4&amp;diff=30450"/>
		<updated>2013-02-12T21:31:45Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Many CLIs are essentially ITK programs.  Porting to ITKv4 usually just involves recompilation.&lt;br /&gt;
&lt;br /&gt;
ITKv4 is the result of an effort to retool ITK after 10 years of continuous development.  Preserving APIs was concern.  But there were circumstances where the APIs changed or were eliminated. Porting CLIs that utilized these components will require a bit more work.  The [http://itk.org/migrationv4/index.php?action=news&amp;amp;newsid=2&amp;amp;newslang=en ITKv4 Migration Guide] is a valuable reference to track known issues and the suggested remediations.&lt;br /&gt;
&lt;br /&gt;
== ITKv4 Resources ==&lt;br /&gt;
&lt;br /&gt;
[http://www.itk.org/Wiki/ITK/Getting_Started Getting started with ITKv4] - has general information on ITKv4&lt;br /&gt;
&lt;br /&gt;
[http://itk.org/migrationv4/index.php?action=news&amp;amp;newsid=2&amp;amp;newslang=en ITKv4 Migration Guide] - has a migration guide that explains API changes.&lt;br /&gt;
&lt;br /&gt;
== Known issues in porting CLIs ==&lt;br /&gt;
&lt;br /&gt;
=== My filter doesn't run. ===&lt;br /&gt;
The API to ThreadedGenerateData() changed in ITKv4.&lt;br /&gt;
&lt;br /&gt;
ITKv3 version of ThreadedGenerateData()&lt;br /&gt;
&lt;br /&gt;
      virtual  void ThreadedGenerateData(const OutputImageRegionType&amp;amp; outputRegionForThread,  int threadId );&lt;br /&gt;
&lt;br /&gt;
ITKv4 version of ThreadedGenerateData()&lt;br /&gt;
&lt;br /&gt;
     virtual  void ThreadedGenerateData(const OutputImageRegionType &amp;amp; outputRegionForThread, ThreadIdType threadId);&lt;br /&gt;
&lt;br /&gt;
Note the use of ThreadIdType.  &lt;br /&gt;
&lt;br /&gt;
If you have written a mulit-threaded filter, you need to update the signature of the method. Your ITKv3 version of the method may be defining a new function instead of overriding the version called by the pipeline.  ITKv4 attempts to emit a run-time exception but there are circumstances where the exception cannot be thrown. Specifically, if your filter is a subclass of a filter that does implement ThreadedGenerateData(), then ITKv4's attempt to inform of the issue is circumvented. &lt;br /&gt;
&lt;br /&gt;
If your filter is not executing in ITKv4, check the declaration of ThreadedGenerateData().&lt;br /&gt;
&lt;br /&gt;
=== DICOM/GDCM ===&lt;br /&gt;
ITKv4 updated the version of GDM used to version 2. GDCM version 2 has many API changes from version 1. If your CLI used GDCM directly, you will need to port your CLI to ITKv4.  If you used ITK abstractions to access DICOM, then the changes to GDCM will not affect your CLI.&lt;br /&gt;
&lt;br /&gt;
=== Differences in test baselines for algorithms that use RecursiveGaussian filters ===&lt;br /&gt;
&lt;br /&gt;
A correction was made to how the sigma/spacing/scales are computed for the RecursiveGaussian filters.  For more details, see [http://itk.org/gitweb?p=ITK.git;a=commit;h=b54b8f664c377310c2ff8b3c4e6f704c819490f6 the commit].&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=ITKv4_Migration_plan&amp;diff=29477</id>
		<title>ITKv4 Migration plan</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=ITKv4_Migration_plan&amp;diff=29477"/>
		<updated>2012-12-05T15:05:56Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Slicer4#Plan| Back to Slicer]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
&lt;br /&gt;
This page is designed to identify and track the work that needs to be done during the month of 2012-12-01 to 2012-12-31 in order to transition Slicer to a solid and uniform ITKv4 platform. Originally this document, created following the NAMIC Engineering TCon of July 28th [http://wiki.na-mic.org/Wiki/index.php/Engineering:TCON_2011#2011-07-28], discuss the element that should be considered before transitioning Slicer to ITKv4.&lt;br /&gt;
&lt;br /&gt;
Historical and other old pages with possibly outdated information. If the information on these other pages is relevant, they need to be pushed here.&lt;br /&gt;
&lt;br /&gt;
* http://www.slicer.org/slicerWiki/index.php/ITKv4_Migration_plan&amp;amp;nbsp;&amp;lt;/li&amp;gt;&lt;br /&gt;
* http://www.slicer.org/slicerWiki/index.php/Developer_Meetings/20121106#ITKv4&amp;amp;nbsp;&amp;lt;/li&amp;gt;&lt;br /&gt;
* http://wiki.na-mic.org/Wiki/index.php/Engineering:TCON_2011#2011-07-28&amp;amp;nbsp;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issue To Address ==&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;color:firebrick; background-color:ltgrey;&amp;quot; cellpadding=&amp;quot;5&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Issues for migration to ITKv4&lt;br /&gt;
|-&lt;br /&gt;
! _Due_Date_ &lt;br /&gt;
! Progress Status&lt;br /&gt;
! Team Members &lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| 2012-12-31 &lt;br /&gt;
| Started&lt;br /&gt;
| Hans J., Steve P., JC, Bill L., Matt M., Kent W.&lt;br /&gt;
| http://www.na-mic.org/Bug/search.php?project_id=3&amp;amp;amp;sticky_issues=on&amp;amp;amp;sortby=last_updated&amp;amp;amp;dir=DESC&amp;amp;amp;hide_status_id=80&amp;amp;amp;tag_string=ITKv4&lt;br /&gt;
|-&lt;br /&gt;
|  2012-12-05&lt;br /&gt;
|&lt;br /&gt;
| Steve P., Bill L., Matt M., Kent W.&lt;br /&gt;
| Test Slicer/ITKv4 on all platforms, especially 64bit VS2008.  ( see comments in table below for checkout information:  2012-12-01 )&lt;br /&gt;
|-&lt;br /&gt;
| 2012-12-05&lt;br /&gt;
|&lt;br /&gt;
| Matt M., Bill L.&lt;br /&gt;
| Look into reducing the number of ITKv4 Modules enabled when building&lt;br /&gt;
|-&lt;br /&gt;
| N/A to ITKv4&lt;br /&gt;
|&lt;br /&gt;
| Matt M., Steve P., Bill L., Matt M.&lt;br /&gt;
| Slicer modules to reduce load time on Windows&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;color:green; background-color:white;&amp;quot; cellpadding=&amp;quot;10&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Timeline for ITKv4&lt;br /&gt;
|-&lt;br /&gt;
! _Due_Date_ &lt;br /&gt;
! Progress Status &lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-01&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| Done&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot; |Hans provides a first pass reference set of patches that build on Mac and demonstrates that nearly all functionality is maintained identically between ITKv3 and ITKv4&lt;br /&gt;
|- &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| I've successfully created a mac dmg package. &amp;amp;quot;CPack: - package: /Users/johnsonhj/src/Slicer-git-itkv4/Slicer-build/Slicer-4.2.0-macosx-amd64.dmg generated.&amp;amp;quot;&amp;lt;br/&amp;gt;&lt;br /&gt;
The package is not yet completely successful though :(.&amp;amp;nbsp; It seems to run just fine on the machine I used to build the package, but when running on my wifes laptop, it can not find a Qt library in /usr/local/lib/&lt;br /&gt;
&lt;br /&gt;
This is probably something best left for discussion next Wednesday.&lt;br /&gt;
&lt;br /&gt;
I am building on 10.8 with a private build of clang 3.1 tagged as stable from svn.&amp;lt;br/&amp;gt;&lt;br /&gt;
I also installed homebrew, and from that installed QT 4.8.3. ( I manually set the required Qt version to 4.8.3)&lt;br /&gt;
&lt;br /&gt;
*FROM THE SAME SOURCE TREE* I also am building Slicer built with ITKv3, and that also seems to be building a reasonable package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:BRAINSia/Slicer43.git&lt;br /&gt;
cd  Slicer43&lt;br /&gt;
git checkout origin/AddDWIConvert &amp;amp;ndash;b AddDWIConvert&lt;br /&gt;
cd ../ &amp;amp;amp;&amp;amp;amp; mkdir sl-itkv3  &amp;amp;amp;&amp;amp;amp; sl-itkv3  &amp;amp;amp;&amp;amp;amp; CC=/opt/clang31/bin/clang CXX=/opt/clang31/bin/clang++ ccmake &amp;amp;ndash;DITK_VERSION_MAJOR:STRING=3 ../Slicer43&lt;br /&gt;
cd ../ &amp;amp;amp;&amp;amp;amp; mkdir sl-itkv4  &amp;amp;amp;&amp;amp;amp; sl-itkv4  &amp;amp;amp;&amp;amp;amp; CC=/opt/clang31/bin/clang CXX=/opt/clang31/bin/clang++ ccmake &amp;amp;ndash;DITK_VERSION_MAJOR:STRING=4 ../Slicer43&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-05&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| Matt McCormick coordinates a Google Hang out&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| In preparation for the upcoming Slicer 4.3 and the NA-MIC Winter Project Week, we are planning a hackathon to help with migration to ITKv4 as the default version of ITK in Slicer.&amp;amp;nbsp; For some time, 	community members such as Hans Johnson, Bill Lorensen, and Jean-Christophe Fillion-Robin have made sure ITKv4 works well with Slicer, and we hope to gather and focus on remaining issues that should be addressed.&lt;br /&gt;
&lt;br /&gt;
The hackathon will take place on:&amp;amp;nbsp; &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;background-color:Yellow;&amp;quot;&amp;gt;&lt;br /&gt;
* Wednesday, December 5th from 10AM Eastern Time until we run out of energy :-). &amp;lt;br\&amp;gt;&lt;br /&gt;
* Primary Connection Information: Google Hangout to be announce at 10AM Eastern time on the ITK and Slicer mailing lists.  The link to join the hangout:   https://plus.google.com/hangouts/_/a52d596290231e5806eec50e14ab2dcddad72fcd?authuser=2&amp;amp;eid=106512397331641956186&amp;amp;hl=en&lt;br /&gt;
* Fallback/Auxiliary connection information:  GoTo Meeting for sharing screens with mouse control:   &amp;lt;br\&amp;gt;&lt;br /&gt;
Please join my meeting, Dec 5, 2012 at 9:00 AM CST. &amp;lt;br\&amp;gt;&lt;br /&gt;
https://www1.gotomeeting.com/join/739397184 &amp;lt;br\&amp;gt;&lt;br /&gt;
Meeting ID: 739-397-184&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 13px;&amp;quot;&amp;gt;The hackathon will take place on a Google+ Hangout.&amp;amp;nbsp; I will follow up with the link to the hangout on this email thread when we starts.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Issues to address at Google Hangout:&lt;br /&gt;
&lt;br /&gt;
Issues in the Slicer bug tracker with the ITKv4 tag:  ( See table above )&lt;br /&gt;
&lt;br /&gt;
If there are other issues to address, please report them in the Slicer bug tracker and reply to this thread.&lt;br /&gt;
&lt;br /&gt;
Work will occur on the following repository on Github.&amp;amp;nbsp;&amp;amp;nbsp; https://github.com/BRAINSia/Slicer43&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Historical (and probably outdated) information =&lt;br /&gt;
&lt;br /&gt;
== Consensus as of 2011 ==&lt;br /&gt;
&lt;br /&gt;
* Slicer RSNA 2011 will be built against ITKv3&lt;br /&gt;
&lt;br /&gt;
* External module requiring ITKv4 will be linked statically against ITKv4&lt;br /&gt;
** Associated command line module will be built as executable only. Indeed having both ITKv3 and ITKv4 in the same process will most likely result in some weird symbol clash.&lt;br /&gt;
&lt;br /&gt;
=== Questions ===&lt;br /&gt;
&lt;br /&gt;
* Should each extension depending on ITKv4 download and build its own copy of ITKv4 or should Slicer build and expose both ITKv3 and ITKv4 ?&lt;br /&gt;
&lt;br /&gt;
== Custom MetaIO in SlicerITK ==&lt;br /&gt;
&lt;br /&gt;
* To minimize memory usage and increase efficiency of Command line module execution, itkImageFileReader.txx in SlicerITK has been patched. See https://github.com/Slicer/ITK/commit/8c73dc57e4ae67328ff8e44934b72fd4cc5d4dd3 and https://github.com/Slicer/ITK/commit/12349021b152ac6546c2caf09bbbee4266baddad&lt;br /&gt;
&lt;br /&gt;
* Bill mentioned it should be possible to avoid patching SlicerITK by creating a custom Factory / plugins. &lt;br /&gt;
&lt;br /&gt;
* From Bradley Lowekamp - ITK mailing list - Sun, Jul 17, 2011 at 11:33 AM  subject '''Re: [Insight-developers] ITK 3 tag to use with slicer? Fwd: Slicer release schedule'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stephen,&lt;br /&gt;
&lt;br /&gt;
If I understand this change correctly, this patch allows the usage of a buffer allocated by the ImageIO to be passed &lt;br /&gt;
all the way to the Image class if  all the types match up. The is accomplished by adding the following &lt;br /&gt;
methods: ImageIO::CanUseOwnBuffer, ImageIO::ReadUsingOwnBuffer() and ImageIO::GetOwnBuffer.&lt;br /&gt;
&lt;br /&gt;
I assume that this change is for the MemoryImageFileReader that is used with Slicer. ( can see how this could be &lt;br /&gt;
quite advantageous ( and also the potential for scary alias when combined with InPlace filters ). But as not one &lt;br /&gt;
single ITK ImageIO has support for these methods. I'd like to question if they should be brought into the ITK main repo, &lt;br /&gt;
as they don't appear to currently provide any benefit to ITK and only complicate as already complicated interface to the &lt;br /&gt;
ImageIO. If these changes are desired in ITK, then I would strongly encourage better documentation for the new methods in &lt;br /&gt;
ImageIO, to enable new developers with add this feature to ImageIO classes.&lt;br /&gt;
&lt;br /&gt;
Brad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* From Bill - Thu, Jul 28, 2011 at 5:19 PM '''Re: [slicer-devel] Engineering:TCON 2011 - NAMIC'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I checked the patches. Two classes are patched: ImageIOBase and ImageFileReader. Now I do not think my factory idea is worthwhile. &lt;br /&gt;
We should to bring the changes into ITK, and convert ITK's Meta and Nifti ImageIO's to use it.&lt;br /&gt;
&lt;br /&gt;
Bill&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the na-mic tcon it was discussed that nrrd and nifti readers also perform the memcpy since the native libraries perform the Information and Read steps in a single API call.  Therefor if the feature existed at the ITK level, then several readers could take advantage of it.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=ITKv4_Migration_plan&amp;diff=29476</id>
		<title>ITKv4 Migration plan</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=ITKv4_Migration_plan&amp;diff=29476"/>
		<updated>2012-12-05T15:05:18Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Slicer4#Plan| Back to Slicer]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
&lt;br /&gt;
This page is designed to identify and track the work that needs to be done during the month of 2012-12-01 to 2012-12-31 in order to transition Slicer to a solid and uniform ITKv4 platform. Originally this document, created following the NAMIC Engineering TCon of July 28th [http://wiki.na-mic.org/Wiki/index.php/Engineering:TCON_2011#2011-07-28], discuss the element that should be considered before transitioning Slicer to ITKv4.&lt;br /&gt;
&lt;br /&gt;
Historical and other old pages with possibly outdated information. If the information on these other pages is relevant, they need to be pushed here.&lt;br /&gt;
&lt;br /&gt;
* http://www.slicer.org/slicerWiki/index.php/ITKv4_Migration_plan&amp;amp;nbsp;&amp;lt;/li&amp;gt;&lt;br /&gt;
* http://www.slicer.org/slicerWiki/index.php/Developer_Meetings/20121106#ITKv4&amp;amp;nbsp;&amp;lt;/li&amp;gt;&lt;br /&gt;
* http://wiki.na-mic.org/Wiki/index.php/Engineering:TCON_2011#2011-07-28&amp;amp;nbsp;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issue To Address ==&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;color:firebrick; background-color:ltgrey;&amp;quot; cellpadding=&amp;quot;5&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Issues for migration to ITKv4&lt;br /&gt;
|-&lt;br /&gt;
! _Due_Date_ &lt;br /&gt;
! Progress Status&lt;br /&gt;
! Team Members &lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| 2012-12-31 &lt;br /&gt;
| Started&lt;br /&gt;
| Hans J., Steve P., JC, Bill L., Matt M., Kent W.&lt;br /&gt;
| http://www.na-mic.org/Bug/search.php?project_id=3&amp;amp;amp;sticky_issues=on&amp;amp;amp;sortby=last_updated&amp;amp;amp;dir=DESC&amp;amp;amp;hide_status_id=80&amp;amp;amp;tag_string=ITKv4&lt;br /&gt;
|-&lt;br /&gt;
|  2012-12-05&lt;br /&gt;
|&lt;br /&gt;
| Steve P., Bill L., Matt M., Kent W.&lt;br /&gt;
| Test Slicer/ITKv4 on all platforms, especially 64bit VS2008.  ( see comments in table below for checkout information:  2012-12-01 )&lt;br /&gt;
|-&lt;br /&gt;
| 2012-12-05&lt;br /&gt;
|&lt;br /&gt;
| Matt M., Bill L.&lt;br /&gt;
| Look into reducing the number of ITKv4 Modules enabled when building&lt;br /&gt;
|-&lt;br /&gt;
| N/A to ITKv4&lt;br /&gt;
|&lt;br /&gt;
| Matt M., Steve P., Bill L., Matt M.&lt;br /&gt;
| Slicer modules to reduce load time on Windows&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;color:green; background-color:white;&amp;quot; cellpadding=&amp;quot;10&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Timeline for ITKv4&lt;br /&gt;
|-&lt;br /&gt;
! _Due_Date_ &lt;br /&gt;
! Progress Status &lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-01&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| Done&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot; |Hans provides a first pass reference set of patches that build on Mac and demonstrates that nearly all functionality is maintained identically between ITKv3 and ITKv4&lt;br /&gt;
|- &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| I've successfully created a mac dmg package. &amp;amp;quot;CPack: - package: /Users/johnsonhj/src/Slicer-git-itkv4/Slicer-build/Slicer-4.2.0-macosx-amd64.dmg generated.&amp;amp;quot;&amp;lt;br/&amp;gt;&lt;br /&gt;
The package is not yet completely successful though :(.&amp;amp;nbsp; It seems to run just fine on the machine I used to build the package, but when running on my wifes laptop, it can not find a Qt library in /usr/local/lib/&lt;br /&gt;
&lt;br /&gt;
This is probably something best left for discussion next Wednesday.&lt;br /&gt;
&lt;br /&gt;
I am building on 10.8 with a private build of clang 3.1 tagged as stable from svn.&amp;lt;br/&amp;gt;&lt;br /&gt;
I also installed homebrew, and from that installed QT 4.8.3. ( I manually set the required Qt version to 4.8.3)&lt;br /&gt;
&lt;br /&gt;
*FROM THE SAME SOURCE TREE* I also am building Slicer built with ITKv3, and that also seems to be building a reasonable package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:BRAINSia/Slicer43.git&lt;br /&gt;
cd  Slicer43&lt;br /&gt;
git checkout origin/AddDWIConvert &amp;amp;ndash;b AddDWIConvert&lt;br /&gt;
cd ../ &amp;amp;amp;&amp;amp;amp; mkdir sl-itkv3  &amp;amp;amp;&amp;amp;amp; sl-itkv3  &amp;amp;amp;&amp;amp;amp; CC=/opt/clang31/bin/clang CXX=/opt/clang31/bin/clang++ ccmake &amp;amp;ndash;DITK_VERSION_MAJOR:STRING=3 ../Slicer43&lt;br /&gt;
cd ../ &amp;amp;amp;&amp;amp;amp; mkdir sl-itkv4  &amp;amp;amp;&amp;amp;amp; sl-itkv4  &amp;amp;amp;&amp;amp;amp; CC=/opt/clang31/bin/clang CXX=/opt/clang31/bin/clang++ ccmake &amp;amp;ndash;DITK_VERSION_MAJOR:STRING=4 ../Slicer43&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-05&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| Matt McCormick coordinates a Google Hang out&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| In preparation for the upcoming Slicer 4.3 and the NA-MIC Winter Project Week, we are planning a hackathon to help with migration to ITKv4 as the default version of ITK in Slicer.&amp;amp;nbsp; For some time, 	community members such as Hans Johnson, Bill Lorensen, and Jean-Christophe Fillion-Robin have made sure ITKv4 works well with Slicer, and we hope to gather and focus on remaining issues that should be addressed.&lt;br /&gt;
&lt;br /&gt;
The hackathon will take place on:&amp;amp;nbsp; &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;background-color:Yellow;&amp;quot;&amp;gt;&lt;br /&gt;
* Wednesday, December 5th from 10AM Eastern Time until we run out of energy :-). &amp;lt;br\&amp;gt;&lt;br /&gt;
* Primary Connection Information: Google Hangout to be announce at 10AM Eastern time on the ITK and Slicer mailing lists and on the ITK Bar Camp Google+ page:   https://plus.google.com/hangouts/_/a52d596290231e5806eec50e14ab2dcddad72fcd?authuser=2&amp;amp;eid=106512397331641956186&amp;amp;hl=en&lt;br /&gt;
* Fallback/Auxiliary connection information:  GoTo Meeting for sharing screens with mouse control:   &amp;lt;br\&amp;gt;&lt;br /&gt;
Please join my meeting, Dec 5, 2012 at 9:00 AM CST. &amp;lt;br\&amp;gt;&lt;br /&gt;
https://www1.gotomeeting.com/join/739397184 &amp;lt;br\&amp;gt;&lt;br /&gt;
Meeting ID: 739-397-184&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 13px;&amp;quot;&amp;gt;The hackathon will take place on a Google+ Hangout.&amp;amp;nbsp; I will follow up with the link to the hangout on this email thread when we starts.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Issues to address at Google Hangout:&lt;br /&gt;
&lt;br /&gt;
Issues in the Slicer bug tracker with the ITKv4 tag:  ( See table above )&lt;br /&gt;
&lt;br /&gt;
If there are other issues to address, please report them in the Slicer bug tracker and reply to this thread.&lt;br /&gt;
&lt;br /&gt;
Work will occur on the following repository on Github.&amp;amp;nbsp;&amp;amp;nbsp; https://github.com/BRAINSia/Slicer43&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Historical (and probably outdated) information =&lt;br /&gt;
&lt;br /&gt;
== Consensus as of 2011 ==&lt;br /&gt;
&lt;br /&gt;
* Slicer RSNA 2011 will be built against ITKv3&lt;br /&gt;
&lt;br /&gt;
* External module requiring ITKv4 will be linked statically against ITKv4&lt;br /&gt;
** Associated command line module will be built as executable only. Indeed having both ITKv3 and ITKv4 in the same process will most likely result in some weird symbol clash.&lt;br /&gt;
&lt;br /&gt;
=== Questions ===&lt;br /&gt;
&lt;br /&gt;
* Should each extension depending on ITKv4 download and build its own copy of ITKv4 or should Slicer build and expose both ITKv3 and ITKv4 ?&lt;br /&gt;
&lt;br /&gt;
== Custom MetaIO in SlicerITK ==&lt;br /&gt;
&lt;br /&gt;
* To minimize memory usage and increase efficiency of Command line module execution, itkImageFileReader.txx in SlicerITK has been patched. See https://github.com/Slicer/ITK/commit/8c73dc57e4ae67328ff8e44934b72fd4cc5d4dd3 and https://github.com/Slicer/ITK/commit/12349021b152ac6546c2caf09bbbee4266baddad&lt;br /&gt;
&lt;br /&gt;
* Bill mentioned it should be possible to avoid patching SlicerITK by creating a custom Factory / plugins. &lt;br /&gt;
&lt;br /&gt;
* From Bradley Lowekamp - ITK mailing list - Sun, Jul 17, 2011 at 11:33 AM  subject '''Re: [Insight-developers] ITK 3 tag to use with slicer? Fwd: Slicer release schedule'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stephen,&lt;br /&gt;
&lt;br /&gt;
If I understand this change correctly, this patch allows the usage of a buffer allocated by the ImageIO to be passed &lt;br /&gt;
all the way to the Image class if  all the types match up. The is accomplished by adding the following &lt;br /&gt;
methods: ImageIO::CanUseOwnBuffer, ImageIO::ReadUsingOwnBuffer() and ImageIO::GetOwnBuffer.&lt;br /&gt;
&lt;br /&gt;
I assume that this change is for the MemoryImageFileReader that is used with Slicer. ( can see how this could be &lt;br /&gt;
quite advantageous ( and also the potential for scary alias when combined with InPlace filters ). But as not one &lt;br /&gt;
single ITK ImageIO has support for these methods. I'd like to question if they should be brought into the ITK main repo, &lt;br /&gt;
as they don't appear to currently provide any benefit to ITK and only complicate as already complicated interface to the &lt;br /&gt;
ImageIO. If these changes are desired in ITK, then I would strongly encourage better documentation for the new methods in &lt;br /&gt;
ImageIO, to enable new developers with add this feature to ImageIO classes.&lt;br /&gt;
&lt;br /&gt;
Brad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* From Bill - Thu, Jul 28, 2011 at 5:19 PM '''Re: [slicer-devel] Engineering:TCON 2011 - NAMIC'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I checked the patches. Two classes are patched: ImageIOBase and ImageFileReader. Now I do not think my factory idea is worthwhile. &lt;br /&gt;
We should to bring the changes into ITK, and convert ITK's Meta and Nifti ImageIO's to use it.&lt;br /&gt;
&lt;br /&gt;
Bill&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the na-mic tcon it was discussed that nrrd and nifti readers also perform the memcpy since the native libraries perform the Information and Read steps in a single API call.  Therefor if the feature existed at the ITK level, then several readers could take advantage of it.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=ITKv4_Migration_plan&amp;diff=29458</id>
		<title>ITKv4 Migration plan</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=ITKv4_Migration_plan&amp;diff=29458"/>
		<updated>2012-12-02T19:13:17Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Slicer4#Plan| Back to Slicer]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
&lt;br /&gt;
This page is designed to identify and track the work that needs to be done during the month of 2012-12-01 to 2012-12-31 in order to transition Slicer to a solid and uniform ITKv4 platform. Originally this document, created following the NAMIC Engineering TCon of July 28th [http://wiki.na-mic.org/Wiki/index.php/Engineering:TCON_2011#2011-07-28], discuss the element that should be considered before transitioning Slicer to ITKv4.&lt;br /&gt;
&lt;br /&gt;
Historical and other old pages with possibly outdated information. If the information on these other pages is relevant, they need to be pushed here.&lt;br /&gt;
&lt;br /&gt;
* http://www.slicer.org/slicerWiki/index.php/ITKv4_Migration_plan&amp;amp;nbsp;&amp;lt;/li&amp;gt;&lt;br /&gt;
* http://www.slicer.org/slicerWiki/index.php/Developer_Meetings/20121106#ITKv4&amp;amp;nbsp;&amp;lt;/li&amp;gt;&lt;br /&gt;
* http://wiki.na-mic.org/Wiki/index.php/Engineering:TCON_2011#2011-07-28&amp;amp;nbsp;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issue To Address ==&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;color:red; background-color:ltgrey;&amp;quot; cellpadding=&amp;quot;5&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Issues for migration to ITKv4&lt;br /&gt;
|-&lt;br /&gt;
! _Due_Date_ &lt;br /&gt;
! Progress Status&lt;br /&gt;
! Team Members &lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| 2012-12-31 &lt;br /&gt;
| Started&lt;br /&gt;
| Hans J., Steve P., JC, Bill L., Matt M., Kent W.&lt;br /&gt;
| http://www.na-mic.org/Bug/search.php?project_id=3&amp;amp;amp;sticky_issues=on&amp;amp;amp;sortby=last_updated&amp;amp;amp;dir=DESC&amp;amp;amp;hide_status_id=80&amp;amp;amp;tag_string=ITKv4&lt;br /&gt;
|-&lt;br /&gt;
|  2012-12-05&lt;br /&gt;
|&lt;br /&gt;
| Steve P., Bill L., Matt M., Kent W.&lt;br /&gt;
| Test Slicer/ITKv4 on all platforms, especially 64bit VS2008.  ( see comments in table below for checkout information:  2012-12-01 )&lt;br /&gt;
|-&lt;br /&gt;
| 2012-12-05&lt;br /&gt;
|&lt;br /&gt;
| Matt M., Bill L.&lt;br /&gt;
| Look into reducing the number of ITKv4 Modules enabled when building&lt;br /&gt;
|-&lt;br /&gt;
| N/A to ITKv4&lt;br /&gt;
|&lt;br /&gt;
| Matt M., Steve P., Bill L., Matt M.&lt;br /&gt;
| Slicer modules to reduce load time on Windows&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;color:green; background-color:white;&amp;quot; cellpadding=&amp;quot;10&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Timeline for ITKv4&lt;br /&gt;
|-&lt;br /&gt;
! _Due_Date_ &lt;br /&gt;
! Progress Status &lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-01&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| Done&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot; |Hans provides a first pass reference set of patches that build on Mac and demonstrates that nearly all functionality is maintained identically between ITKv3 and ITKv4&lt;br /&gt;
|- &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| I've successfully created a mac dmg package. &amp;amp;quot;CPack: - package: /Users/johnsonhj/src/Slicer-git-itkv4/Slicer-build/Slicer-4.2.0-macosx-amd64.dmg generated.&amp;amp;quot;&amp;lt;br/&amp;gt;&lt;br /&gt;
The package is not yet completely successful though :(.&amp;amp;nbsp; It seems to run just fine on the machine I used to build the package, but when running on my wifes laptop, it can not find a Qt library in /usr/local/lib/&lt;br /&gt;
&lt;br /&gt;
This is probably something best left for discussion next Wednesday.&lt;br /&gt;
&lt;br /&gt;
I am building on 10.8 with a private build of clang 3.1 tagged as stable from svn.&amp;lt;br/&amp;gt;&lt;br /&gt;
I also installed homebrew, and from that installed QT 4.8.3. ( I manually set the required Qt version to 4.8.3)&lt;br /&gt;
&lt;br /&gt;
*FROM THE SAME SOURCE TREE* I also am building Slicer built with ITKv3, and that also seems to be building a reasonable package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:BRAINSia/Slicer43.git&lt;br /&gt;
cd  Slicer43&lt;br /&gt;
git checkout origin/AddDWIConvert &amp;amp;ndash;b AddDWIConvert&lt;br /&gt;
cd ../ &amp;amp;amp;&amp;amp;amp; mkdir sl-itkv3  &amp;amp;amp;&amp;amp;amp; sl-itkv3  &amp;amp;amp;&amp;amp;amp; CC=/opt/clang31/bin/clang CXX=/opt/clang31/bin/clang++ ccmake &amp;amp;ndash;DITK_VERSION_MAJOR:STRING=3 ../Slicer43&lt;br /&gt;
cd ../ &amp;amp;amp;&amp;amp;amp; mkdir sl-itkv4  &amp;amp;amp;&amp;amp;amp; sl-itkv4  &amp;amp;amp;&amp;amp;amp; CC=/opt/clang31/bin/clang CXX=/opt/clang31/bin/clang++ ccmake &amp;amp;ndash;DITK_VERSION_MAJOR:STRING=4 ../Slicer43&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-05&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| Matt McCormick coordinates a Google Hang out&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| In preparation for the upcoming Slicer 4.3 and the NA-MIC Winter Project Week, we are planning a hackathon to help with migration to ITKv4 as the default version of ITK in Slicer.&amp;amp;nbsp; For some time, 	community members such as Hans Johnson, Bill Lorensen, and Jean-Christophe Fillion-Robin have made sure ITKv4 works well with Slicer, and we hope to gather and focus on remaining issues that should be addressed.&lt;br /&gt;
&lt;br /&gt;
The hackathon will take place on:&amp;amp;nbsp; &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;background-color:Yellow;&amp;quot;&amp;gt;&lt;br /&gt;
* Wednesday, December 5th from 10AM Eastern Time until we run out of energy :-). &amp;lt;br\&amp;gt;&lt;br /&gt;
* Primary Connection Information: Google Hangout to be announce at 10AM Eastern time on the ITK and Slicer mailing lists and on the ITK Bar Camp Google+ page:  https://plus.google.com/106512397331641956186/posts&lt;br /&gt;
* Fallback/Auxiliary connection information:  GoTo Meeting for sharing screens with mouse control:   &amp;lt;br\&amp;gt;&lt;br /&gt;
Please join my meeting, Dec 5, 2012 at 9:00 AM CST. &amp;lt;br\&amp;gt;&lt;br /&gt;
https://www1.gotomeeting.com/join/739397184 &amp;lt;br\&amp;gt;&lt;br /&gt;
Meeting ID: 739-397-184&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 13px;&amp;quot;&amp;gt;The hackathon will take place on a Google+ Hangout.&amp;amp;nbsp; I will follow up with the link to the hangout on this email thread when we starts.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Issues to address at Google Hangout:&lt;br /&gt;
&lt;br /&gt;
Issues in the Slicer bug tracker with the ITKv4 tag:  ( See table above )&lt;br /&gt;
&lt;br /&gt;
If there are other issues to address, please report them in the Slicer bug tracker and reply to this thread.&lt;br /&gt;
&lt;br /&gt;
Work will occur on the following repository on Github.&amp;amp;nbsp;&amp;amp;nbsp; https://github.com/BRAINSia/Slicer43&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Historical (and probably outdated) information =&lt;br /&gt;
&lt;br /&gt;
== Consensus as of 2011 ==&lt;br /&gt;
&lt;br /&gt;
* Slicer RSNA 2011 will be built against ITKv3&lt;br /&gt;
&lt;br /&gt;
* External module requiring ITKv4 will be linked statically against ITKv4&lt;br /&gt;
** Associated command line module will be built as executable only. Indeed having both ITKv3 and ITKv4 in the same process will most likely result in some weird symbol clash.&lt;br /&gt;
&lt;br /&gt;
=== Questions ===&lt;br /&gt;
&lt;br /&gt;
* Should each extension depending on ITKv4 download and build its own copy of ITKv4 or should Slicer build and expose both ITKv3 and ITKv4 ?&lt;br /&gt;
&lt;br /&gt;
== Custom MetaIO in SlicerITK ==&lt;br /&gt;
&lt;br /&gt;
* To minimize memory usage and increase efficiency of Command line module execution, itkImageFileReader.txx in SlicerITK has been patched. See https://github.com/Slicer/ITK/commit/8c73dc57e4ae67328ff8e44934b72fd4cc5d4dd3 and https://github.com/Slicer/ITK/commit/12349021b152ac6546c2caf09bbbee4266baddad&lt;br /&gt;
&lt;br /&gt;
* Bill mentioned it should be possible to avoid patching SlicerITK by creating a custom Factory / plugins. &lt;br /&gt;
&lt;br /&gt;
* From Bradley Lowekamp - ITK mailing list - Sun, Jul 17, 2011 at 11:33 AM  subject '''Re: [Insight-developers] ITK 3 tag to use with slicer? Fwd: Slicer release schedule'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stephen,&lt;br /&gt;
&lt;br /&gt;
If I understand this change correctly, this patch allows the usage of a buffer allocated by the ImageIO to be passed &lt;br /&gt;
all the way to the Image class if  all the types match up. The is accomplished by adding the following &lt;br /&gt;
methods: ImageIO::CanUseOwnBuffer, ImageIO::ReadUsingOwnBuffer() and ImageIO::GetOwnBuffer.&lt;br /&gt;
&lt;br /&gt;
I assume that this change is for the MemoryImageFileReader that is used with Slicer. ( can see how this could be &lt;br /&gt;
quite advantageous ( and also the potential for scary alias when combined with InPlace filters ). But as not one &lt;br /&gt;
single ITK ImageIO has support for these methods. I'd like to question if they should be brought into the ITK main repo, &lt;br /&gt;
as they don't appear to currently provide any benefit to ITK and only complicate as already complicated interface to the &lt;br /&gt;
ImageIO. If these changes are desired in ITK, then I would strongly encourage better documentation for the new methods in &lt;br /&gt;
ImageIO, to enable new developers with add this feature to ImageIO classes.&lt;br /&gt;
&lt;br /&gt;
Brad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* From Bill - Thu, Jul 28, 2011 at 5:19 PM '''Re: [slicer-devel] Engineering:TCON 2011 - NAMIC'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I checked the patches. Two classes are patched: ImageIOBase and ImageFileReader. Now I do not think my factory idea is worthwhile. &lt;br /&gt;
We should to bring the changes into ITK, and convert ITK's Meta and Nifti ImageIO's to use it.&lt;br /&gt;
&lt;br /&gt;
Bill&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the na-mic tcon it was discussed that nrrd and nifti readers also perform the memcpy since the native libraries perform the Information and Read steps in a single API call.  Therefor if the feature existed at the ITK level, then several readers could take advantage of it.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:Spatial_objects_screenshot.png&amp;diff=28335</id>
		<title>File:Spatial objects screenshot.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:Spatial_objects_screenshot.png&amp;diff=28335"/>
		<updated>2012-09-19T21:31:47Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: Screenshot for the SpatialObjects Slicer Extension.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot for the SpatialObjects Slicer Extension.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:Spatialobjects_icon.png&amp;diff=28334</id>
		<title>File:Spatialobjects icon.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:Spatialobjects_icon.png&amp;diff=28334"/>
		<updated>2012-09-19T20:42:21Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: Icon for the SpatialObject Extension.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Icon for the SpatialObject Extension.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20120904&amp;diff=28254</id>
		<title>Developer Meetings/20120904</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20120904&amp;diff=28254"/>
		<updated>2012-09-04T17:12:57Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* To discuss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Attendees: &lt;br /&gt;
&lt;br /&gt;
== To discuss ==&lt;br /&gt;
* Feature Freeze and outstanding bugs&lt;br /&gt;
** http://na-mic.org/Bug/roadmap_page.php&lt;br /&gt;
* Testing of tutorial functionality&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/RSNA_2012 NA-MIC @ RSNA]&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/RSNA2012_Planning Tutorial and Demo Planning]&lt;br /&gt;
** What can we automate?&lt;br /&gt;
** What will be done manually and by whom?&lt;br /&gt;
* ITK4 dashboards setup: help is needed with the following machines:&lt;br /&gt;
** http://slicer.cdash.org/buildSummary.php?buildid=38107&lt;br /&gt;
** http://slicer.cdash.org/buildSummary.php?buildid=38108&lt;br /&gt;
* CTK patch for review and integration&lt;br /&gt;
** Could a CTK developer please review this pull request: https://github.com/commontk/CTK/pull/230 ?&lt;br /&gt;
*** Done! Thanks, Jc!&lt;br /&gt;
** Helps address:  http://na-mic.org/Mantis/view.php?id=2460&lt;br /&gt;
*** Now closed.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20120904&amp;diff=28249</id>
		<title>Developer Meetings/20120904</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20120904&amp;diff=28249"/>
		<updated>2012-09-04T15:50:07Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* To discuss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Attendees: &lt;br /&gt;
&lt;br /&gt;
== To discuss ==&lt;br /&gt;
* Feature Freeze and outstanding bugs&lt;br /&gt;
** http://na-mic.org/Bug/roadmap_page.php&lt;br /&gt;
* Testing of tutorial functionality&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/RSNA_2012 NA-MIC @ RSNA]&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/RSNA2012_Planning Tutorial and Demo Planning]&lt;br /&gt;
** What can we automate?&lt;br /&gt;
** What will be done manually and by whom?&lt;br /&gt;
* ITK4 dashboards setup: help is needed with the following machines:&lt;br /&gt;
** http://slicer.cdash.org/buildSummary.php?buildid=38107&lt;br /&gt;
** http://slicer.cdash.org/buildSummary.php?buildid=38108&lt;br /&gt;
* CTK patch for review and integration&lt;br /&gt;
** Could a CTK developer please review this pull request: https://github.com/commontk/CTK/pull/230 ?&lt;br /&gt;
*** Done! Thanks, Jc!&lt;br /&gt;
** Helps address:  http://na-mic.org/Mantis/view.php?id=2460&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20120904&amp;diff=28248</id>
		<title>Developer Meetings/20120904</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20120904&amp;diff=28248"/>
		<updated>2012-09-04T14:45:36Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* To discuss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Attendees: &lt;br /&gt;
&lt;br /&gt;
== To discuss ==&lt;br /&gt;
* Feature Freeze and outstanding bugs&lt;br /&gt;
** http://na-mic.org/Bug/roadmap_page.php&lt;br /&gt;
* Testing of tutorial functionality&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/RSNA_2012 NA-MIC @ RSNA]&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/RSNA2012_Planning Tutorial and Demo Planning]&lt;br /&gt;
** What can we automate?&lt;br /&gt;
** What will be done manually and by whom?&lt;br /&gt;
* ITK4 dashboards setup: help is needed with the following machines:&lt;br /&gt;
** http://slicer.cdash.org/buildSummary.php?buildid=38107&lt;br /&gt;
** http://slicer.cdash.org/buildSummary.php?buildid=38108&lt;br /&gt;
* CTK patch for review and integration&lt;br /&gt;
** Could a CTK developer please review this pull request: https://github.com/commontk/CTK/pull/230 ?&lt;br /&gt;
** Helps address:  http://na-mic.org/Mantis/view.php?id=2460&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Tutorials/Debug_Instructions&amp;diff=28204</id>
		<title>Documentation/Nightly/Developers/Tutorials/Debug Instructions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Tutorials/Debug_Instructions&amp;diff=28204"/>
		<updated>2012-08-29T23:19:58Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Background==&lt;br /&gt;
The executable Slicer application ''Slicer-Superbuild/Slicer-build/Slicer'' (or Slicer.exe) is the [[Documentation/{{documentation/version}}/Developers/Launcher|launcher]] of the real application binary ''Slicer-Superbuild/Slicer-build/bin/SlicerApp-real''.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
===Analyze a segmentation fault===&lt;br /&gt;
 $ ulimit -c unlimited&lt;br /&gt;
 $ ./Slicer&lt;br /&gt;
 ... make it crash&lt;br /&gt;
 $ ./Slicer --gdb ./bin/SlicerApp-real&lt;br /&gt;
 (gdb) core core&lt;br /&gt;
 (gdb) backtrace&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
===GDB debug with launch arguments===&lt;br /&gt;
The Slicer app launcher provides options to start other programs with the Slicer environment settings. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;--launch &amp;lt;executable&amp;gt; [&amp;lt;parameters&amp;gt;]&amp;lt;/code&amp;gt;: executes an arbitrary program. For example, &amp;lt;code&amp;gt;Slicer --launch /usr/bin/gnome-terminal&amp;lt;/code&amp;gt; starts gnome-terminal (then run GDB directly on SlicerQT-real)&lt;br /&gt;
*&amp;lt;code&amp;gt;--gdb&amp;lt;/code&amp;gt;: runs GDB then executes SlicerQT-real from within the debugger environment.&lt;br /&gt;
&lt;br /&gt;
===GDB debug by attaching to running process [RECOMMENDED] ===&lt;br /&gt;
&lt;br /&gt;
1) Running Slicer with the following command line argument will allow you to easily obtain the associated PID:&lt;br /&gt;
&lt;br /&gt;
 $ ./Slicer --attach-process&lt;br /&gt;
&lt;br /&gt;
This will bring up a window with the &amp;lt;code&amp;gt;PID&amp;lt;/code&amp;gt; before loading any modules, which is also helpful for debugging the loading process.&lt;br /&gt;
&lt;br /&gt;
2) Then, you can attach the process to &amp;lt;code&amp;gt;gdb&amp;lt;/code&amp;gt; using the following command:&lt;br /&gt;
&lt;br /&gt;
 $ gdb --pid $PIDABOVE&lt;br /&gt;
&lt;br /&gt;
3) Finally type the following gdb command&lt;br /&gt;
&lt;br /&gt;
 (gdb) continue&lt;br /&gt;
&lt;br /&gt;
If not using the &amp;lt;code&amp;gt;--attach-process&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;PID&amp;lt;/code&amp;gt; could be obtain using the following command:&lt;br /&gt;
&lt;br /&gt;
 $ ps -Afww | grep SlicerApp-real&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu 10.10 and above  - How to enable ptracing ====&lt;br /&gt;
In Ubuntu 10.10, Ubuntu introduced a patch to disallow ptracing of non-child processes by non-root users -ie. only a process which is a parent of another process can ptrace it for normal users.&lt;br /&gt;
You can temporarily disable this restriction by:&lt;br /&gt;
 $ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope&lt;br /&gt;
To permanently allow it to edit /etc/sysctl.d/10-ptrace.conf and change the line:&lt;br /&gt;
*&amp;lt;code&amp;gt;kernel.yama.ptrace_scope = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
to read:&lt;br /&gt;
*&amp;lt;code&amp;gt;kernel.yama.ptrace_scope = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See http://askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process&lt;br /&gt;
&lt;br /&gt;
===GDB debug by using exec-wrapper===&lt;br /&gt;
An alternative approach is to use a wrapper script to emulate the functionality of the app launcher. This will allow you to use gdb or a gdb-controlling program such as an IDE, in order to interactively debug directly from GDB without attaching.&lt;br /&gt;
&lt;br /&gt;
The general idea of the wrapper is to set all of the appropriate environment variables as they would be set by the app launcher. From SlicerLauncherSettings:&lt;br /&gt;
*[LibraryPath] contents should be in LD_LIBRARY_PATH&lt;br /&gt;
*[Paths] contents should be in PATH&lt;br /&gt;
*[EnvironmentVariables] should each be set&lt;br /&gt;
&lt;br /&gt;
See [[Slicer4:Example_Wrapper_Script|this example script]]&lt;br /&gt;
&lt;br /&gt;
Now, start gdb and do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(gdb) set exec-wrapper ./WrapSlicer4 &lt;br /&gt;
(gdb) exec-file ./bin/SlicerQT-real&lt;br /&gt;
(gdb) run&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since VTK and ITK include many multithreaded filters, by default you will see lots of messages like the following from gdb during rendering and processing:&lt;br /&gt;
 [New Thread 0x7fff8378f700 (LWP 20510)]&lt;br /&gt;
 [Thread 0x7fff8b0aa700 (LWP 20506) exited]&lt;br /&gt;
&lt;br /&gt;
These can be turned off with this command:&lt;br /&gt;
 set print thread-events off&lt;br /&gt;
&lt;br /&gt;
===GDB debug in CodeLite IDE===&lt;br /&gt;
[[Slicer4:Linux_Debugging_CodeLite|Linux debugging with CodeLite IDE]]&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
For VisualStudio it's also possible to run the IDE with the correct environment to debug slicer.&lt;br /&gt;
&lt;br /&gt;
The launcher gets configured with a special --VisualStudio option for this purpose.  &lt;br /&gt;
&lt;br /&gt;
When Visual Studio is open, you can debug it by setting the project SlicerApp-real as current and run Debug (F5).&lt;br /&gt;
&lt;br /&gt;
Note that because CMake re-creates the solution file from within the build process, visual studio will sometimes need to stop and reload the project, requiring manual button pressing on your part.  To avoid this, you can use a script to kick off the build and then re-start the IDE.&lt;br /&gt;
&lt;br /&gt;
If you use cygwin, you can create simple shell scripts, for example in /usr/local/bin, which these several steps at once when run from the Slicer4-superbuild directory:&lt;br /&gt;
&lt;br /&gt;
* ''s4build'' (slicer4 build)&lt;br /&gt;
 (cd Slicer-build; cmake.exe -VV --debug-output . &amp;amp;&amp;amp; ./Slicer.exe --VisualStudio Slicer.sln /out buildlog.txt /build)&lt;br /&gt;
 (cd Slicer-build; ./Slicer.exe --VisualStudio Slicer.sln)&lt;br /&gt;
* ''s4sbuild'' (slicer4 super build)&lt;br /&gt;
 (cmake.exe -VV --debug-output . &amp;amp;&amp;amp; ./Slicer-build/Slicer.exe --VisualStudio Slicer.sln /out buildlog.txt /build)&lt;br /&gt;
 (cd Slicer-build; ./Slicer.exe --VisualStudio Slicer.sln)&lt;br /&gt;
&lt;br /&gt;
The ''s4build'' command re-runs cmake and then runs the build of Slicer only.  When this completes, it launches visual studio with slicer loaded for debugging.&lt;br /&gt;
&lt;br /&gt;
''s4sbuild'' is similar, but it runs the superbuild process so that all the dependency libraries are updated.  This takes longer, but is sometimes needed when there has been a change to CTK or other tools.&lt;br /&gt;
&lt;br /&gt;
Note the buildlog.txt files for checking if anything went wrong.&lt;br /&gt;
&lt;br /&gt;
==Debugging a Test==&lt;br /&gt;
Once VisualStudio is open with the Slicer environment loaded, it is possible to run and debug tests.&lt;br /&gt;
To run all tests, build the ''RUN_TESTS'' project.&lt;br /&gt;
#To debug a test, find its project:&lt;br /&gt;
##Libs/MRML/Core tests are in the ''MRMLCoreCxxTests'' project&lt;br /&gt;
##CLI tests are in ''CLI_NAMETest'' project (e.g. ThresholdScalarVolumeTest) &lt;br /&gt;
##Loadable module tests are in ''qSlicerLOADABLE_NAMECxxTests'' project (e.g. qSlicerVolumeRenderingCxxTests) &lt;br /&gt;
##Module logic tests are in ''MODULE_NAMELogicCxxTests'' project (e.g. VolumeRenderingLogicCxxTests) &lt;br /&gt;
##Module widgets tests are in ''MODULE_NAMEWidgetsCxxTests'' project (e.g. VolumesWidgetsCxxTests)&lt;br /&gt;
#Go to the project debugging properties (right click -&amp;gt; Properties, then Configuration Properties/Debugging)&lt;br /&gt;
#In ''Command Arguments'', type the name of the test (e.g. &amp;lt;code&amp;gt;vtkMRMLSceneImportTest&amp;lt;/code&amp;gt; for project MRMLCoreCxxTests)&lt;br /&gt;
# If the test takes argument(s), enter the argument(s) after the test name in ''Command Arguments'' (e.g. &amp;lt;code&amp;gt;vtkMRMLSceneImportTest C:\Path\To\Slicer4\Libs\MRML\Core\Testing\vol_and_cube.mrml&amp;lt;/code&amp;gt;)&lt;br /&gt;
## You can see what arguments are passed by the dashboards by looking at the test details in [http://slicer.cdash.org/index.php?project=Slicer4 CDash].&lt;br /&gt;
## Most VTK and Qt tests support the &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt; argument, it allows the test to be run in &amp;quot;interactive&amp;quot; mode. It doesn't exit at the end of the test.&lt;br /&gt;
# Make the project ''Set As StartUp Project''&lt;br /&gt;
# ''Start Debugging (F5)''&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.1/Modules/Editor&amp;diff=27595</id>
		<title>Documentation/4.1/Modules/Editor</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.1/Modules/Editor&amp;diff=27595"/>
		<updated>2012-07-09T13:24:11Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Per-Structure Volumes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NA-MIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149. Information on NA-MIC can be obtained from the [http://www.na-mic.org/ NA-MIC website].&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Steve Pieper, Isomics, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Wendy Plesniak, BWH&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor2: Ron Kikinis, BWH&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor3: Jim Miller, GE&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Steve Pieper, &amp;lt;email&amp;gt;pieper@bwh.harvard.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|isomics}}|{{collaborator|longname|isomics}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
|{{collaborator|logo|nac}}|{{collaborator|longname|nac}}&lt;br /&gt;
|{{collaborator|logo|ge}}|{{collaborator|longname|ge}}&lt;br /&gt;
}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This is a module for manual segmentation of volumes.  Some of the tools mimic a painting interface like photoshop or gimp, but work on 3D arrays of voxels rather than on 2D pixels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
The overall goal is to allow users to efficiently and precisely define structures within their volumes as label map volumes.  These label maps can be used for building models, or further processing (using, for example, the [[Documentation/{{documentation/version}}/Modules/LabelStatistics|Label Statistics]] module).&lt;br /&gt;
&lt;br /&gt;
The label maps can either be defined from within the Editor module itself, or you can use the output of other modules and the basis for editing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
The [[Documentation/{{documentation/version}}/Training| Slicer {{documentation/version}} Training]] page provides several use cases that rely on Editor functionality.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
[[image:Editor-2011-11-24.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==== Single Label Map ====&lt;br /&gt;
&lt;br /&gt;
[[image:SlicerQT-real 138.png|200px|right|Color Table Dialog]]&lt;br /&gt;
A typical straightforward Editor workflow for consists of the following steps:&lt;br /&gt;
&lt;br /&gt;
* Load a volume.&lt;br /&gt;
* Enter the Editor module using either the toolbar or the Modules menu button.&lt;br /&gt;
* You will be prompted to select a color table to use for editing (see Color Table Dialog image).&lt;br /&gt;
** Pick a color node that contains the structures you wish to create.  If there are no appropriate tables available, you can create custom nodes in the [[Documentation/{{documentation/version}}/Modules/Colors|Colors Module]].&lt;br /&gt;
** Clicking apply in the Color Table Dialog will create a new label map volume based on the background volume in the Red slice view at the time you entered the Editor.  It will be the same dimensions, orientation, and spacing as the background volume.  But it will be initialize to all zeros and it will have the 'Label Map' property set.  (You can look at these in the &amp;quot;Info&amp;quot; tab of the [[Documentation/{{documentation/version}}/Modules/Volumes|Volumes Module]].&lt;br /&gt;
** If your background was named 't1' the label will be called 't1-label'.&lt;br /&gt;
** Note that if you already have a label map volume as the result of a previous editing step it will be automatically selected when you enter the Editor (i.e. after using some other [[Documentation/{{documentation/version}}#Segmentation|Segmentation Modules]] you will be set up to perform manual edits of the selected label map).  You can use the Set option to pick this label map instead of the default.&lt;br /&gt;
** Note that the background and label map settings in the Red slice viewer are used to determine the volumes to edit.  In the Editor Module the background grayscale volume is known as the &amp;quot;Master Volume&amp;quot; because it is used as input to tools such as Threshold Paint.  The map is known as the &amp;quot;Merge Volume&amp;quot; because it contains multiple structures (see below for information about splitting and re-merging the Merge Volume to edit individual structures).&lt;br /&gt;
* When label map volume is selected, the edit tools frame will automatically expand and you can use the Editor Effects to define your structures.&lt;br /&gt;
&lt;br /&gt;
==== Per-Structure Volumes ====&lt;br /&gt;
(Please familiarize yourself with the Single Label Map approach before attempting to use the Multiple Label Map tools.)&lt;br /&gt;
&lt;br /&gt;
This approach can be used to independently work with a single structure using tools like the Threshold effect that operates on the entire volume.  To access this functionality, open the Per-Structure Volumes interface by clicking on the downward pointing triangle on the right side of the box.&lt;br /&gt;
&lt;br /&gt;
* Start with a Merge Volume that will contain all the structures of interest.&lt;br /&gt;
** If you have already started defining the individual structures with different label values in the editor, or if you used something like [[Documentation/{{documentation/version}}/Modules/Otsu Segmentation|Otsu Segmentation]] to generate a label map, then you can use the Split Merge Volume button to create a new volume for each unique label value in the Merge Volume.&lt;br /&gt;
** If you are starting from scratch, you can use the Add Structure button to define new label volumes.  &lt;br /&gt;
*** Add Structure will prompt you for a label value based on the Color Table selected when the Merge Volume was created.&lt;br /&gt;
*** The new Structure Volume will be selected for editing.&lt;br /&gt;
* You can click in the Per-Structure Volumes list box to select the current label map for editing (so that you can easily toggle between the Structure Volumes).&lt;br /&gt;
* After defining the individual structures, you can use the Merge All button to put the volumes back into the Merge Volume.&lt;br /&gt;
** ''Hint: If the structures overlap, you can use the Order column to define the priority of the structures during the merge process.'' &lt;br /&gt;
* Use Merge And Build to create a set of modules from the merged volume.&lt;br /&gt;
** This uses the Joint Smoothing option of the [[Documentation/{{documentation/version}}/Modules/ModelMaker|Model Maker Module]] to create watertight models.&lt;br /&gt;
** ''Hint: you can use the Model Maker module to manipulate other building parameters.'' &lt;br /&gt;
* The Delete Structures button will remove the Per-Structure Volumes from your scene.  If you want to delete a single volume, use the [[Documentation/{{documentation/version}}/Modules/Data|Data Module]].&lt;br /&gt;
&lt;br /&gt;
==Label Map Editing==&lt;br /&gt;
&lt;br /&gt;
'''Terminology:'''&lt;br /&gt;
* ''label map volume'' is a 3D scalar volume node where each voxel is a number indicating the type of tissue at that location.  A label volume is associated with a Color Node that maps the numbers into colors and text strings.&lt;br /&gt;
* ''slice viewer'' refers to the Red, Yellow, and Green windows that display volume slices on the slicer interface&lt;br /&gt;
* ''effect'' refers to one of the editor tools in the editor toolbox&lt;br /&gt;
* ''labeler'' is a type of effect that modifies the existing label map; labelers have a common set of control options described below.&lt;br /&gt;
&lt;br /&gt;
The Editor Module is used for manipulating label map volumes.  Each of the slice viewers can be operated on independently, although typically the same background and label layer will be used in all slice views.  Whichever label map volume is selected in the label layer will be the target for each of the editor effects.  Any scalar volume can be used as the background layer.  For example you may wish to create a label map volume based on a high resolution structural scan, and then edit while looking at a lower resolution diffusion scan.&lt;br /&gt;
&lt;br /&gt;
==Keystrokes==&lt;br /&gt;
* '''f''' - move to next slice&lt;br /&gt;
* '''b''' - move to previous slice&lt;br /&gt;
* '''e''' - toggles from the current color to 0 and back (use this while painting or drawing to quickly erase if you go over the line)&lt;br /&gt;
* '''a''' or '''Enter''' - apply the current outline in Draw Effect&lt;br /&gt;
* '''x''' - delete last point added in Draw Effect&lt;br /&gt;
&lt;br /&gt;
==Effects==&lt;br /&gt;
&lt;br /&gt;
*Effects operate either by clicking the Apply button in the GUI or by clicking and/or dragging in the slice view.  For operations where you use the GUI, the target label map is the one in the Red slice viewer.  Otherwise the target is based on which slice viewer you click in.&lt;br /&gt;
*select the label value for the tools to work on. Clicking on the colored box will provide a pop-up with a selection of labels.&lt;br /&gt;
&lt;br /&gt;
===[[image:Threshold.png]] Threshold Effect===&lt;br /&gt;
&lt;br /&gt;
* Select a label value.&lt;br /&gt;
* Voxels in the source volume within the range will have the label value that is selected. &lt;br /&gt;
* When apply is clicked, the labels are written into the label map.&lt;br /&gt;
&lt;br /&gt;
==Labeler Effects==&lt;br /&gt;
&lt;br /&gt;
The following options work for all labelers (draw, paint, level tracing...)&lt;br /&gt;
&lt;br /&gt;
===Threshold Painting and Drawing===&lt;br /&gt;
&lt;br /&gt;
* Use Threshold to determine a threshold range and click on Use for Paint&lt;br /&gt;
* Change into Paint or Draw and click on the Threshold button&lt;br /&gt;
* begin painting/drawing&lt;br /&gt;
&lt;br /&gt;
Only voxels where the background value is within the threshold range will be set to the new label value.&lt;br /&gt;
&lt;br /&gt;
===Paint Over===&lt;br /&gt;
&lt;br /&gt;
When enabled, the labels are set to the new value no matter what their previous value was.&lt;br /&gt;
&lt;br /&gt;
When disabled, only 0 (black/transparent) voxels are set to the new value.  Non-zero values are not changed.&lt;br /&gt;
&lt;br /&gt;
==[[image:Paint.png]] Paint==&lt;br /&gt;
* pick the radius (in millimeters) of the brush to apply&lt;br /&gt;
* left click to apply single circle&lt;br /&gt;
* left click and drag to draw a curve&lt;br /&gt;
* a trace of circles is left which are applied when the mouse button is released&lt;br /&gt;
&lt;br /&gt;
The 'smudge' option can be used when working on the boundary between two or more regions.  In this mode, the label color is set to the value of the labelmap where the first left click occurs.  This mode allows you to quickly switch between colors.&lt;br /&gt;
&lt;br /&gt;
==[[image:Draw.png]] Draw==&lt;br /&gt;
* left click to lay individual points of an outline&lt;br /&gt;
* left drag to lay down a continuous line of points&lt;br /&gt;
* 'x' key to delete the last point added&lt;br /&gt;
* right click or 'a' key to apply outline to label map&lt;br /&gt;
&lt;br /&gt;
==[[image:Rectangle.png]] Rectangle==&lt;br /&gt;
* left click to start rubber band rectangle&lt;br /&gt;
* release button to apply&lt;br /&gt;
&lt;br /&gt;
==[[image:LevelTracing.png]] Level Tracing==&lt;br /&gt;
* moving the mouse defines an outline where the pixels all have the same background value as the current background pixel&lt;br /&gt;
* clicking the left mouse button applies that outline to the label map&lt;br /&gt;
&lt;br /&gt;
==[[image:IdentifyIslands.png]] Identify Islands==&lt;br /&gt;
* Use this tool to create a unique label value for each connected region in the current label map.  Connected regions are defined as groups of pixels which touch each other but are surrounded by zero valued voxels.  If FullyConnected is selected, then only voxels that share a face are counted as connected; if unselected, then voxels that touch at an edge or a corner are considered connected.&lt;br /&gt;
&lt;br /&gt;
Note: be aware that all non-zero label values labels values are considered equal by this filter and that the result will renumber the resulting islands in order of size.&lt;br /&gt;
&lt;br /&gt;
Note: the output label values use the currently selected color table, but the names assigned to islands are arbitrary.  Label values are assigned in order of the size of the island starting with 1.  The value of 0 is assigned to the background.&lt;br /&gt;
&lt;br /&gt;
==[[image:ChangeIsland.png]] Change Island== &lt;br /&gt;
* Changes color of an island, where Island is a group of connected pixels with the same label. Does not change other voxels with the same label.&lt;br /&gt;
* This tool is useful after thresholding, to separate anatomy further.&lt;br /&gt;
** Click Change Island&lt;br /&gt;
** Click New Label and select a color, or enter a color number&lt;br /&gt;
** Click any part of the island&lt;br /&gt;
** Pixels that are part of that island will receive the New Label value&lt;br /&gt;
&lt;br /&gt;
==[[image:RemoveIslands.png]] Remove Islands==&lt;br /&gt;
* Remove Islands: Automatically removes unlabelled voxels within a region.&lt;br /&gt;
* Useful for removing small areas of noise inside a surrounding thresholded area&lt;br /&gt;
&lt;br /&gt;
==[[image:SaveIsland.png]] Save Island==&lt;br /&gt;
*  Save Island retains the selected island, and removes disconnected pixels with the same label. This is another way to clean up the results of a thresholding operation.&lt;br /&gt;
*  Useful for separating a single connected structure from other structures.&lt;br /&gt;
&lt;br /&gt;
==[[image:ErodeLabel.png]] Erode and [[image:DilateLabel.png]] Dilate==&lt;br /&gt;
* Add or remove a single layer of pixels from the current label value&lt;br /&gt;
&lt;br /&gt;
==[[image:ChangeLabel.png]] Change Label==&lt;br /&gt;
Changes every voxel in the target label map with the input value to the output value&lt;br /&gt;
&lt;br /&gt;
==Undo/Redo==&lt;br /&gt;
* The Editor can save state before each effect is applied.  This is useful for experimentation and error correction.  Prior to version 3.6.2 this can be somewhat slow and very memory hungry when working with large volumes so it is disabled by default.  As of version 3.6.2 the save operation is light weight and is enabled by default.&lt;br /&gt;
* When enabled the buttons can be used to move forward and back through the volume checkpoints.&lt;br /&gt;
&lt;br /&gt;
==[[Image:ModelMaker.jpg]] Modelmaker==&lt;br /&gt;
* A simple interface to of the full CLI module (See [[Documentation/{{documentation/version}}/Modules/ModelMaker|Model Maker Documentation]])&lt;br /&gt;
* The currently selected label number will be used to build.&lt;br /&gt;
* Select smooth model for more pleasing results&lt;br /&gt;
* Just click apply and models of all label maps will be created.&lt;br /&gt;
* Model building runs in the background and the model appears in the 3D view when finished.&lt;br /&gt;
&lt;br /&gt;
==[[image:GrowCutSegment.png]] GrowCutSegment==&lt;br /&gt;
&lt;br /&gt;
GrowCut is a powerful algorithm that uses example segmentation to create a full segmentation of the volume.  You can use multiple label colors to define regions that represent parts of anatomical structures and then let the GrowCut algorithm seek out a best labeling for adjacent pixel so they match your example.&lt;br /&gt;
&lt;br /&gt;
To use this, you first define your example segmentation using the normal paint or draw tools as described above.  Define at least two structure classes and then click Apply.  If you are not satisfied with the result, use the Undo button to go back and modify your example. &lt;br /&gt;
&lt;br /&gt;
See [[Modules:GrowCutSegmentation-Documentation-3.6 | earlier version of Grow Cut documentation]] for more details.&lt;br /&gt;
&lt;br /&gt;
==Hints==&lt;br /&gt;
[[Image:Selection 139.png|thumb|400px|right|Use of the Label Outline feature (below) vs the default view (above).  Note that the label outlines appear faint in the lower image -- zoom in by clicking on the image to see them as they actually appear in Slicer.]]&lt;br /&gt;
* You can use the [[Documentation/{{documentation/version}}/Modules/ImageLabelCombine|Image Label Combine]] module to make a composite label map from two independent input label maps.  Sometimes it will make sense to have a separate label map for each anatomical structure and then combine them after editing.  In other cases it makes sense to put all structures into the same label map so that you can use the Paint Over option to make clean interfaces between the structures.&lt;br /&gt;
* The [[Documentation/{{documentation/version}}/Modules/ModelMaker|Model Maker]] can automatically make models for all non-zero values in the label map.  The option for Joint Smoothing creates a 'water tight' set of models.  If you build the models independently the smoothing will cause gaps between the models.&lt;br /&gt;
* A large radius paint brush with threshold painting is often a very fast way to segment anatomy that is consistently brighter or darker than the surrounding region, but partially connected to similar nearby structures (this happens a lot).&lt;br /&gt;
* Use the slice viewer menus to control the label map opacity and display mode (to show outlines only or full volume).&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
* Threshold will not work with non-scalar volume background volumes.&lt;br /&gt;
* Mouse wheel can be used to move slice through volume, but on some platforms (mac) it may move more than one slice at a time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
* See the [[:Category:Documentation/{{documentation/version}}#Segmentation|Segmentation section of the module documentation]] for more ways to create label maps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
[[Slicer_3.6:Training |Training materials and tutorials from earlier versions of slicer]] may help give ideas about how to use these tools.&lt;br /&gt;
&lt;br /&gt;
The GrowCut algorithm is presented here: &lt;br /&gt;
V. Vezhnevets and V. Konouchine, &amp;quot;GrowCut - Interactive multi-label N-D image segmentation&amp;quot;, in Proc. Graphicon, 2005. pp. 150--156.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-developerinfo}}&lt;br /&gt;
&lt;br /&gt;
See the [[Documentation/4.0/EditorExtension|step-by-step guide to writing an Editor Extension]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/MRML&amp;diff=27545</id>
		<title>Documentation/4.1/Developers/MRML</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/MRML&amp;diff=27545"/>
		<updated>2012-06-26T22:23:14Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* MRML Events and Observers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Slicer MRML Overview =&lt;br /&gt;
&lt;br /&gt;
*MRML Library provides API for managing medical image data types (Volumes, Models, Transforms, Fiducials, Cameras, etc) and their visualization. &lt;br /&gt;
*Each data type is represented by a special MRML node. &lt;br /&gt;
*MRML Scene is a collection of MRML nodes. &lt;br /&gt;
*Slicer MRML data model is implemented independent of the visualization and algorithmic components of the system. &lt;br /&gt;
*Other Slicer components (Logic and GUI) observe changes in MRML scene and individual nodes and process change MRML events.&lt;br /&gt;
&lt;br /&gt;
For more details on MRML architecture see [http://www.na-mic.org/Wiki/images/e/e3/Slicer_3-alpha-2006-04-03.ppt Architecture Slides].&lt;br /&gt;
&lt;br /&gt;
= MRML Scene =&lt;br /&gt;
&lt;br /&gt;
*MRML Scene manages MRML nodes : add, delete, find, find by type, etc.&lt;br /&gt;
*MRML Scene provides persistence of MRML nodes (reading/writing to/from XML file). &lt;br /&gt;
*MRML  Scene provides Undo/Redo mechanism that restores a previous state of the scene and individual nodes.&lt;br /&gt;
&lt;br /&gt;
= MRML Nodes =&lt;br /&gt;
 &lt;br /&gt;
*The MRML nodes are designed to store the state of the Slicer application, both raw data and visualization parameters.&lt;br /&gt;
&lt;br /&gt;
There following is a set of core MRLN nodes that store the state of core Slicer modules:&lt;br /&gt;
&lt;br /&gt;
* vtkMRMLCameraNode&lt;br /&gt;
* vtkMRMLClipModelsNode&lt;br /&gt;
* vtkMRMLSliceCompositeNode&lt;br /&gt;
* vtkMRMLSliceNode&lt;br /&gt;
* vtkMRMLColorNode&lt;br /&gt;
* vtkMRMLTransformNode&lt;br /&gt;
* vtkMRMLLinearTransformNode&lt;br /&gt;
* vtkMRMLTransformableNode&lt;br /&gt;
* vtkMRMLFiducialListNode&lt;br /&gt;
* vtkMRMLModelNode&lt;br /&gt;
* vtkMRMLModelDisplayNode&lt;br /&gt;
* vtkMRMLStorageNode&lt;br /&gt;
* vtkMRMLModelStorageNode&lt;br /&gt;
* vtkMRMLVolumeNode&lt;br /&gt;
* vtkMRMLScalarVolumeNode&lt;br /&gt;
* vtkMRMLVectorVolumeNode&lt;br /&gt;
* vtkMRMLTensorVolumeNode&lt;br /&gt;
* vtkMRMLDiffusionTensorVolumeNode&lt;br /&gt;
* vtkMRMLDiffusionWeightedVolumeNode&lt;br /&gt;
* vtkMRMLVolumeDisplayNode&lt;br /&gt;
* vtkMRMLVectorVolumeDisplayNode&lt;br /&gt;
* vtkMRMLDiffusionTensorVolumeDisplayNode&lt;br /&gt;
* vtkMRMLDiffusionWeightedVolumeDisplayNode&lt;br /&gt;
* vtkMRMLVolumeHeaderlessStorageNode&lt;br /&gt;
* vtkMRMLVolumeArchetypeStorageNode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
*MRML nodes are organized into C++ class hierarchies, all derived from vtkMRMLNode class. &lt;br /&gt;
*For example vtkMRMLTransformableNode is the parent class of Volume, Model, Fiducial, and Transformation nodes; vtkVolumeNode is a parent of vtkMRMLScalarVolumeNode and vtkMRMLVectorVolumeNode&lt;br /&gt;
*All MRML nodes have to implement certain standard API: ReadAttributes, WriteAttributes, Copy, etc.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Node_Hier.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MRML node attributes =&lt;br /&gt;
&lt;br /&gt;
MRML nodes can store custom attributes as (attribute name; attribute value) pairs.&lt;br /&gt;
&lt;br /&gt;
To avoid name clashes custom modules that adds attributes to nodes should prefix the attribute name with the module's name and the '.' character. Example: the DoseVolumeHistogram module can use attribute names such as DoseVolumeHistogram.StructureSetName, DoseVolumeHistogram.Unit, DoseVolumeHistogram.LineStyle.&lt;br /&gt;
&lt;br /&gt;
= References to MRML Nodes =&lt;br /&gt;
&lt;br /&gt;
*Some MRML nodes have references to other nodes. &lt;br /&gt;
*Transformable Node has a reference to a Transformation node. Transformation node has a reference to its parent Transformation node. &lt;br /&gt;
*References are stored by node ID.&lt;br /&gt;
*Use vtkSetReferenceStringMacro to set reference ID (it registers reference with the scene).&lt;br /&gt;
*Access methods should check if the referenced node is still in the MRML scene using its ID.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Trans_Ref.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MRML Events and Observers =&lt;br /&gt;
&lt;br /&gt;
*Changes in MRML scene and individual nodes propagate to other observing nodes, GUI and Logic objects via vtk events and command-observer mechanism.&lt;br /&gt;
*Use vtk AddObserver() and InvokeEvent() methods. vtkSetMacro generates ModifiedEvent.&lt;br /&gt;
*The command-observer mechanism for MRML is implemented using  helper vtkObserverManager, class, MRML Observer macros, and ProcessMRMLEvents method.&lt;br /&gt;
*Observers should store a registered pointer to a MRML node to prevent callbacks on a deleted object. &lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Observ.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*MRML observer macros are defined in Libs/MRML/vtkMRMLNode.h&lt;br /&gt;
*vtkSetMRMLObjectMacro - registers MRML node with another vtk object (another MRML node, Logic or GUI). No observers added.&lt;br /&gt;
*vtkSetAndObserveMRMLObjectMacro - registers MRML node and adds an observer for vtkCommand::ModifyEvent. &lt;br /&gt;
*vtkSetAndObserveMRMLObjectEventsMacro - registers MRML node and adds an observer for a specified set of events. &lt;br /&gt;
*SetAndObserveMRMLScene[Events]() method is used in GUI and Logic to observe Modify, NewScene, NodeAdded, etc. events.&lt;br /&gt;
*ProcessMRMLEvents method should be implemented in MRML nodes, Logic, and GUI classes in order to process events from the observed nodes.&lt;br /&gt;
&lt;br /&gt;
= Creating Custom MRML Node Classes=&lt;br /&gt;
&lt;br /&gt;
*Custom MRML nodes provide persistent storage for the module parameters. &lt;br /&gt;
*Custom MRML nodes should be registered with the MRML scene using RegisterNodeClass() so they can be saved and restored from a scene file. &lt;br /&gt;
*Classes should implement the following methods: &lt;br /&gt;
*CreateNodeInstance() – similar to VTK New() method only not static. &lt;br /&gt;
*GetNodeTagName() – return a unique XML tag for this node. &lt;br /&gt;
*ReadXMLAttributes() – reads node attributes from XML file as name-value pairs. &lt;br /&gt;
*WriteXML() – writes node attributes to output stream (as in interpolate=&amp;quot;1&amp;quot; ).&lt;br /&gt;
*Copy() – copies node attributes. &lt;br /&gt;
&lt;br /&gt;
*If the node has references to other nodes the following additional methods should be implemented: &lt;br /&gt;
 –UpdateReferenceID() - updates the stored reference to another node. &lt;br /&gt;
 –UpdateScene()- updates other nodes in the scene depending on this node or updates this node if it depends on other nodes when the scene is read in. &lt;br /&gt;
   This method is called automatically by XML parser after all nodes are created. &lt;br /&gt;
*An example of a custom MRML node implementation: vtkMRMLGradientAnisotropicDiffusionFilterNode in Modules/GradientAnisotropicDiffusionFilter directory. &lt;br /&gt;
*To add node to the MRML scene: &lt;br /&gt;
 –In the code: use standard vtk New() and add node to the scene using vtkMRMLScene::AddNode(vtkMRMLNode *)&lt;br /&gt;
 –By user request: use vtkSlicerNodeSelectorWidget that creates a new node from the module’s UI.&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
== How to add into the scene==&lt;br /&gt;
* Generic pattern &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkMRML???Node* nodeToAdd = vtkMRML???Node::New();&lt;br /&gt;
 ...&lt;br /&gt;
 mrmlScene-&amp;gt;AddNode(nodeToAdd);&lt;br /&gt;
 nodeToAdd-&amp;gt;Delete();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Add a polydata to the scene&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkNew&amp;lt;vtkMRMLModelNode&amp;gt; modelNode;&lt;br /&gt;
 modelNode-&amp;gt;SetPolyData(polyData);&lt;br /&gt;
 mrmlScene-&amp;gt;AddNode(modelNode.GetPointer());&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Load a polyData from file&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkSlicerModelsLogic* modelsLogic = ...;&lt;br /&gt;
 //modelsLogic-&amp;gt;SetMRMLScene(mrmlScene);&lt;br /&gt;
 modelsLogic-&amp;gt;AddModel(polyDataFileName);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==Views==&lt;br /&gt;
* Change the volumes in the 2D views ([https://github.com/fedorov/ChangeTrackerPy/blob/master/Wizard/Helper.py#L82 source])&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 appLogic = slicer.app.applicationLogic()&lt;br /&gt;
 selectionNode = appLogic.GetSelectionNode()&lt;br /&gt;
 selectionNode.SetReferenceActiveVolumeID(bg)&lt;br /&gt;
 selectionNode.SetReferenceSecondaryVolumeID(fg)&lt;br /&gt;
 appLogic.PropagateVolumeSelection()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Undo/Redo Mechanism =&lt;br /&gt;
&lt;br /&gt;
*Undo/Redo is based on saving and restoring the state of MRML nodes in the Scene. &lt;br /&gt;
*MRML scene can save snapshot of all nodes into a special Undo and Redo stacks. &lt;br /&gt;
*The Undo and Redo stacks store copies of nodes that have changed from the previous snapshot. The node that have not changed are stored by a reference (pointer). &lt;br /&gt;
*When an Undo is called on the scene, the current state of Undo stack is copied into the current scene and also into Redo stack. &lt;br /&gt;
*  All Undoable operations must store their data as MRML nodes&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Undo.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Developer controls at what point the snapshot is saved by calling SaveStateForUndo method on the MRML scene. &lt;br /&gt;
–SaveStateForUndo() - saves the state of all nodes in the scene &lt;br /&gt;
&amp;lt;br /&amp;gt;–SetActiveScene(vtkMRMLScene *) - saves the state of the specified node. &lt;br /&gt;
&amp;lt;br /&amp;gt;–SetActiveScene(vtkCollection*) - saves the state of the specified collection of nodes. &lt;br /&gt;
*SaveStateForUndo() should be called in GUI/Logic classes before changing the state of MRML nodes. This is usually done in the ProcessGUIEvents method that processes events from the user interactions with GUI widgets. &lt;br /&gt;
*SaveStateForUndo() should not be called while processing transient events such as continuous events sent by KW UI while dragging a slider (for example vtkKWScale::ScaleValueStartChangingEvent). &lt;br /&gt;
&lt;br /&gt;
The following methods on the MRML scene are used to manage Undo/Redo stacks:&lt;br /&gt;
&lt;br /&gt;
* vtkMRMLScene::Undo() – restore the previously saved state of the MRML scene.&lt;br /&gt;
* vtkMRMLScene::Redo() – restore the previously undone state of the MRML scene.&lt;br /&gt;
* vtkMRMLScene::SetUndoOff() – ignore following SaveStateForUndo calls (usefull when making multiple changes to the scene/nodes that does not need to be undone). &lt;br /&gt;
* vtkMRMLScene::SetUndoOn() – enable following SaveStateForUndo calls.&lt;br /&gt;
* vtkMRMLScene::ClearUndoStack() – clears the undo history.&lt;br /&gt;
* vtkMRMLScene::ClearRedoStack() – clears the redo history.&lt;br /&gt;
&lt;br /&gt;
= Other Useful References =&lt;br /&gt;
&lt;br /&gt;
== MRML API Documentation ==&lt;br /&gt;
&lt;br /&gt;
The detailed documentation of MRML API can be found in [http://slicer.org/doc/html/classes.html Slicer {{documentation/version}} Doxygen pages]&lt;br /&gt;
&lt;br /&gt;
== Slice view pipeline ==&lt;br /&gt;
&lt;br /&gt;
VTK/MRML pipeline for the 2D slice views: [[File:SliceView.pptx]].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
See Data Model notes in [http://wiki.na-mic.org/Wiki/index.php/AHM_2006:ProjectsSlicerDataModel AHM 2006 Programming week project].&lt;br /&gt;
&lt;br /&gt;
== Path-based MRML proposal ==&lt;br /&gt;
&lt;br /&gt;
Mike's proposal for a [[Slicer3:MRML3_Path|path-based MRML3 representation]], based on extending the Coordinate Space Manager ideas to the entire MRML3 tree&lt;br /&gt;
&lt;br /&gt;
== Slicer Daemon ==&lt;br /&gt;
&lt;br /&gt;
The goal of the [[Slicer3:Slicer_Daemon|Slicer Daemon]] project is to allow remote editing of the MRML data model by external programs over a socket.&lt;br /&gt;
&lt;br /&gt;
== EventBroker Discussion ==&lt;br /&gt;
&lt;br /&gt;
The [[Slicer3:EventBroker|Event Broker]] is a proposal to improve the way events are managed inside slicer.&lt;br /&gt;
&lt;br /&gt;
= Slicer 2.6 MRML =&lt;br /&gt;
&lt;br /&gt;
== Data Represented in MRML in Slicer 2.6 ==&lt;br /&gt;
&lt;br /&gt;
* Volumes&lt;br /&gt;
** IJK-&amp;gt;RAS (VTK-&amp;gt;RAS)&lt;br /&gt;
** Scalar Types&lt;br /&gt;
** Multicomponent (RGB, Displacement Vector)&lt;br /&gt;
** Tensor Volumes&lt;br /&gt;
** Label Maps&lt;br /&gt;
** Reference to Lookup Table&lt;br /&gt;
&lt;br /&gt;
* Models&lt;br /&gt;
** vtkPolyData&lt;br /&gt;
*** Named Field Data (scalars, vectors, labels) at points and cells (FreeSurferReaders)&lt;br /&gt;
*** Polylines with tensor point data (DTMRI Module)&lt;br /&gt;
** Color, Clipping State, Visibility, Scalar Visibility, LookupTable&lt;br /&gt;
&lt;br /&gt;
* Transforms&lt;br /&gt;
** Matrix4x4&lt;br /&gt;
&lt;br /&gt;
* Lookup Tables&lt;br /&gt;
** vtkLookupTable info&lt;br /&gt;
&lt;br /&gt;
* Fiducials&lt;br /&gt;
** Position, Quaternion&lt;br /&gt;
** Name, Selection State, Type (endoscopic, normal)&lt;br /&gt;
** Glyph Size, Text Size&lt;br /&gt;
&lt;br /&gt;
* Fiducial Lists&lt;br /&gt;
** Name, Slze, Color, Selection State&lt;br /&gt;
&lt;br /&gt;
* Colors&lt;br /&gt;
** Name, Label#, Diffuse/Ambient/Specular&lt;br /&gt;
&lt;br /&gt;
* Model Groups&lt;br /&gt;
&lt;br /&gt;
* Application State (not to be carried to Slicer3 MRML)&lt;br /&gt;
* Locator (not to be carried to Slicer3 MRML)&lt;br /&gt;
* Module Specific Parameters (not to be carried to Slicer3 MRML)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operations On MRML Scene ==&lt;br /&gt;
&lt;br /&gt;
* Load from File&lt;br /&gt;
* Save to File&lt;br /&gt;
* Traverse Nodes in Tree&lt;br /&gt;
* Insert Node&lt;br /&gt;
* Delete Node&lt;br /&gt;
* Register Tree Observer&lt;br /&gt;
* Update MRML&lt;br /&gt;
* Get Transformations (e.g. IJK to World through transform tree)&lt;br /&gt;
&lt;br /&gt;
* Data Type Specific Operations&lt;br /&gt;
** Get/Set Node MetaData&lt;br /&gt;
** Get/Set Data (e.g. as vtkImageData)&lt;br /&gt;
&lt;br /&gt;
== General References on XML ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikibooks.org/wiki/XML:_Managing_Data_Exchange A wikibook on XML] &lt;br /&gt;
&lt;br /&gt;
The [http://en.wikibooks.org/wiki/XML:_Managing_Data_Exchange/The_many-to-many_relationship#ID.2FIDRE section on ID/IDREF implementations], which are similar to what we use in MRML.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/MRML&amp;diff=27536</id>
		<title>Documentation/4.1/Developers/MRML</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/MRML&amp;diff=27536"/>
		<updated>2012-06-26T17:45:56Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Undo/Redo Mechanism */ remove duplicate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Slicer MRML Overview =&lt;br /&gt;
&lt;br /&gt;
*MRML Library provides API for managing medical image data types (Volumes, Models, Transforms, Fiducials, Cameras, etc) and their visualization. &lt;br /&gt;
*Each data type is represented by a special MRML node. &lt;br /&gt;
*MRML Scene is a collection of MRML nodes. &lt;br /&gt;
*Slicer MRML data model is implemented independent of the visualization and algorithmic components of the system. &lt;br /&gt;
*Other Slicer components (Logic and GUI) observe changes in MRML scene and individual nodes and process change MRML events.&lt;br /&gt;
&lt;br /&gt;
For more details on MRML architecture see [http://www.na-mic.org/Wiki/images/e/e3/Slicer_3-alpha-2006-04-03.ppt Architecture Slides].&lt;br /&gt;
&lt;br /&gt;
= MRML Scene =&lt;br /&gt;
&lt;br /&gt;
*MRML Scene manages MRML nodes : add, delete, find, find by type, etc.&lt;br /&gt;
*MRML Scene provides persistence of MRML nodes (reading/writing to/from XML file). &lt;br /&gt;
*MRML  Scene provides Undo/Redo mechanism that restores a previous state of the scene and individual nodes.&lt;br /&gt;
&lt;br /&gt;
= MRML Nodes =&lt;br /&gt;
 &lt;br /&gt;
*The MRML nodes are designed to store the state of the Slicer application, both raw data and visualization parameters.&lt;br /&gt;
&lt;br /&gt;
There following is a set of core MRLN nodes that store the state of core Slicer modules:&lt;br /&gt;
&lt;br /&gt;
* vtkMRMLCameraNode&lt;br /&gt;
* vtkMRMLClipModelsNode&lt;br /&gt;
* vtkMRMLSliceCompositeNode&lt;br /&gt;
* vtkMRMLSliceNode&lt;br /&gt;
* vtkMRMLColorNode&lt;br /&gt;
* vtkMRMLTransformNode&lt;br /&gt;
* vtkMRMLLinearTransformNode&lt;br /&gt;
* vtkMRMLTransformableNode&lt;br /&gt;
* vtkMRMLFiducialListNode&lt;br /&gt;
* vtkMRMLModelNode&lt;br /&gt;
* vtkMRMLModelDisplayNode&lt;br /&gt;
* vtkMRMLStorageNode&lt;br /&gt;
* vtkMRMLModelStorageNode&lt;br /&gt;
* vtkMRMLVolumeNode&lt;br /&gt;
* vtkMRMLScalarVolumeNode&lt;br /&gt;
* vtkMRMLVectorVolumeNode&lt;br /&gt;
* vtkMRMLTensorVolumeNode&lt;br /&gt;
* vtkMRMLDiffusionTensorVolumeNode&lt;br /&gt;
* vtkMRMLDiffusionWeightedVolumeNode&lt;br /&gt;
* vtkMRMLVolumeDisplayNode&lt;br /&gt;
* vtkMRMLVectorVolumeDisplayNode&lt;br /&gt;
* vtkMRMLDiffusionTensorVolumeDisplayNode&lt;br /&gt;
* vtkMRMLDiffusionWeightedVolumeDisplayNode&lt;br /&gt;
* vtkMRMLVolumeHeaderlessStorageNode&lt;br /&gt;
* vtkMRMLVolumeArchetypeStorageNode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
*MRML nodes are organized into C++ class hierarchies, all derived from vtkMRMLNode class. &lt;br /&gt;
*For example vtkMRMLTransformableNode is the parent class of Volume, Model, Fiducial, and Transformation nodes; vtkVolumeNode is a parent of vtkMRMLScalarVolumeNode and vtkMRMLVectorVolumeNode&lt;br /&gt;
*All MRML nodes have to implement certain standard API: ReadAttributes, WriteAttributes, Copy, etc.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Node_Hier.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MRML node attributes =&lt;br /&gt;
&lt;br /&gt;
MRML nodes can store custom attributes as (attribute name; attribute value) pairs.&lt;br /&gt;
&lt;br /&gt;
To avoid name clashes custom modules that adds attributes to nodes should prefix the attribute name with the module's name and the '.' character. Example: the DoseVolumeHistogram module can use attribute names such as DoseVolumeHistogram.StructureSetName, DoseVolumeHistogram.Unit, DoseVolumeHistogram.LineStyle.&lt;br /&gt;
&lt;br /&gt;
= References to MRML Nodes =&lt;br /&gt;
&lt;br /&gt;
*Some MRML nodes have references to other nodes. &lt;br /&gt;
*Transformable Node has a reference to a Transformation node. Transformation node has a reference to its parent Transformation node. &lt;br /&gt;
*References are stored by node ID.&lt;br /&gt;
*Use vtkSetReferenceStringMacro to set reference ID (it registers reference with the scene).&lt;br /&gt;
*Access methods should check if the referenced node is still in the MRML scene using its ID.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Trans_Ref.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MRML Events and Observers =&lt;br /&gt;
&lt;br /&gt;
*Changes in MRML scene and individual nodes propagate to other observing nodes, GUI and Logic objects via vtk events and command-observer mechanism.&lt;br /&gt;
*Use vtk AddObserver() and InvokeEvent() methods. vtk SetMacro generates ModifiedEvent.&lt;br /&gt;
*The command-observer mechanism for MRML is implemented using  helper vtkObserverManager, class, MRML Observer macros, and ProcessMRMLEvents method.&lt;br /&gt;
*Observers should store a registered pointer to a MRML node to prevent callbacks on a deleted object. &lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Observ.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*MRML observer macros are defined in Libs/MRML/vtkMRMLNode.h&lt;br /&gt;
*vtkSetMRMLObjectMacro - registers MRML node with another vtk object (another MRML node, Logic or GUI). No observers added.&lt;br /&gt;
*vtkSetAndObserveMRMLObjectMacro - registers MRML node and adds an observer for vtkCommand::ModifyEvent. &lt;br /&gt;
*vtkSetAndObserveMRMLObjectEventsMacro - registers MRML node and adds an observer for a specified set of events. &lt;br /&gt;
*SetAndObserveMRMLScene[Events]() method is used in GUI and Logic to observe Modify, NewScene, NodeAdded, etc. events.&lt;br /&gt;
*ProcessMRMLEvents method should be implemented in MRML nodes, Logic, and GUI classes in order to process events from the observed nodes.&lt;br /&gt;
&lt;br /&gt;
= Creating Custom MRML Node Classes=&lt;br /&gt;
&lt;br /&gt;
*Custom MRML nodes provide persistent storage for the module parameters. &lt;br /&gt;
*Custom MRML nodes should be registered with the MRML scene using RegisterNodeClass() so they can be saved and restored from a scene file. &lt;br /&gt;
*Classes should implement the following methods: &lt;br /&gt;
*CreateNodeInstance() – similar to VTK New() method only not static. &lt;br /&gt;
*GetNodeTagName() – return a unique XML tag for this node. &lt;br /&gt;
*ReadXMLAttributes() – reads node attributes from XML file as name-value pairs. &lt;br /&gt;
*WriteXML() – writes node attributes to output stream (as in interpolate=&amp;quot;1&amp;quot; ).&lt;br /&gt;
*Copy() – copies node attributes. &lt;br /&gt;
&lt;br /&gt;
*If the node has references to other nodes the following additional methods should be implemented: &lt;br /&gt;
 –UpdateReferenceID() - updates the stored reference to another node. &lt;br /&gt;
 –UpdateScene()- updates other nodes in the scene depending on this node or updates this node if it depends on other nodes when the scene is read in. &lt;br /&gt;
   This method is called automatically by XML parser after all nodes are created. &lt;br /&gt;
*An example of a custom MRML node implementation: vtkMRMLGradientAnisotropicDiffusionFilterNode in Modules/GradientAnisotropicDiffusionFilter directory. &lt;br /&gt;
*To add node to the MRML scene: &lt;br /&gt;
 –In the code: use standard vtk New() and add node to the scene using vtkMRMLScene::AddNode(vtkMRMLNode *)&lt;br /&gt;
 –By user request: use vtkSlicerNodeSelectorWidget that creates a new node from the module’s UI.&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
== How to add into the scene==&lt;br /&gt;
* Generic pattern &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkMRML???Node* nodeToAdd = vtkMRML???Node::New();&lt;br /&gt;
 ...&lt;br /&gt;
 mrmlScene-&amp;gt;AddNode(nodeToAdd);&lt;br /&gt;
 nodeToAdd-&amp;gt;Delete();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Add a polydata to the scene&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkNew&amp;lt;vtkMRMLModelNode&amp;gt; modelNode;&lt;br /&gt;
 modelNode-&amp;gt;SetPolyData(polyData);&lt;br /&gt;
 mrmlScene-&amp;gt;AddNode(modelNode.GetPointer());&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Load a polyData from file&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkSlicerModelsLogic* modelsLogic = ...;&lt;br /&gt;
 //modelsLogic-&amp;gt;SetMRMLScene(mrmlScene);&lt;br /&gt;
 modelsLogic-&amp;gt;AddModel(polyDataFileName);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==Views==&lt;br /&gt;
* Change the volumes in the 2D views ([https://github.com/fedorov/ChangeTrackerPy/blob/master/Wizard/Helper.py#L82 source])&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 appLogic = slicer.app.applicationLogic()&lt;br /&gt;
 selectionNode = appLogic.GetSelectionNode()&lt;br /&gt;
 selectionNode.SetReferenceActiveVolumeID(bg)&lt;br /&gt;
 selectionNode.SetReferenceSecondaryVolumeID(fg)&lt;br /&gt;
 appLogic.PropagateVolumeSelection()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Undo/Redo Mechanism =&lt;br /&gt;
&lt;br /&gt;
*Undo/Redo is based on saving and restoring the state of MRML nodes in the Scene. &lt;br /&gt;
*MRML scene can save snapshot of all nodes into a special Undo and Redo stacks. &lt;br /&gt;
*The Undo and Redo stacks store copies of nodes that have changed from the previous snapshot. The node that have not changed are stored by a reference (pointer). &lt;br /&gt;
*When an Undo is called on the scene, the current state of Undo stack is copied into the current scene and also into Redo stack. &lt;br /&gt;
*  All Undoable operations must store their data as MRML nodes&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Undo.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Developer controls at what point the snapshot is saved by calling SaveStateForUndo method on the MRML scene. &lt;br /&gt;
–SaveStateForUndo() - saves the state of all nodes in the scene &lt;br /&gt;
&amp;lt;br /&amp;gt;–SetActiveScene(vtkMRMLScene *) - saves the state of the specified node. &lt;br /&gt;
&amp;lt;br /&amp;gt;–SetActiveScene(vtkCollection*) - saves the state of the specified collection of nodes. &lt;br /&gt;
*SaveStateForUndo() should be called in GUI/Logic classes before changing the state of MRML nodes. This is usually done in the ProcessGUIEvents method that processes events from the user interactions with GUI widgets. &lt;br /&gt;
*SaveStateForUndo() should not be called while processing transient events such as continuous events sent by KW UI while dragging a slider (for example vtkKWScale::ScaleValueStartChangingEvent). &lt;br /&gt;
&lt;br /&gt;
The following methods on the MRML scene are used to manage Undo/Redo stacks:&lt;br /&gt;
&lt;br /&gt;
* vtkMRMLScene::Undo() – restore the previously saved state of the MRML scene.&lt;br /&gt;
* vtkMRMLScene::Redo() – restore the previously undone state of the MRML scene.&lt;br /&gt;
* vtkMRMLScene::SetUndoOff() – ignore following SaveStateForUndo calls (usefull when making multiple changes to the scene/nodes that does not need to be undone). &lt;br /&gt;
* vtkMRMLScene::SetUndoOn() – enable following SaveStateForUndo calls.&lt;br /&gt;
* vtkMRMLScene::ClearUndoStack() – clears the undo history.&lt;br /&gt;
* vtkMRMLScene::ClearRedoStack() – clears the redo history.&lt;br /&gt;
&lt;br /&gt;
= Other Useful References =&lt;br /&gt;
&lt;br /&gt;
== MRML API Documentation ==&lt;br /&gt;
&lt;br /&gt;
The detailed documentation of MRML API can be found in [http://slicer.org/doc/html/classes.html Slicer {{documentation/version}} Doxygen pages]&lt;br /&gt;
&lt;br /&gt;
== Slice view pipeline ==&lt;br /&gt;
&lt;br /&gt;
VTK/MRML pipeline for the 2D slice views: [[File:SliceView.pptx]].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
See Data Model notes in [http://wiki.na-mic.org/Wiki/index.php/AHM_2006:ProjectsSlicerDataModel AHM 2006 Programming week project].&lt;br /&gt;
&lt;br /&gt;
== Path-based MRML proposal ==&lt;br /&gt;
&lt;br /&gt;
Mike's proposal for a [[Slicer3:MRML3_Path|path-based MRML3 representation]], based on extending the Coordinate Space Manager ideas to the entire MRML3 tree&lt;br /&gt;
&lt;br /&gt;
== Slicer Daemon ==&lt;br /&gt;
&lt;br /&gt;
The goal of the [[Slicer3:Slicer_Daemon|Slicer Daemon]] project is to allow remote editing of the MRML data model by external programs over a socket.&lt;br /&gt;
&lt;br /&gt;
== EventBroker Discussion ==&lt;br /&gt;
&lt;br /&gt;
The [[Slicer3:EventBroker|Event Broker]] is a proposal to improve the way events are managed inside slicer.&lt;br /&gt;
&lt;br /&gt;
= Slicer 2.6 MRML =&lt;br /&gt;
&lt;br /&gt;
== Data Represented in MRML in Slicer 2.6 ==&lt;br /&gt;
&lt;br /&gt;
* Volumes&lt;br /&gt;
** IJK-&amp;gt;RAS (VTK-&amp;gt;RAS)&lt;br /&gt;
** Scalar Types&lt;br /&gt;
** Multicomponent (RGB, Displacement Vector)&lt;br /&gt;
** Tensor Volumes&lt;br /&gt;
** Label Maps&lt;br /&gt;
** Reference to Lookup Table&lt;br /&gt;
&lt;br /&gt;
* Models&lt;br /&gt;
** vtkPolyData&lt;br /&gt;
*** Named Field Data (scalars, vectors, labels) at points and cells (FreeSurferReaders)&lt;br /&gt;
*** Polylines with tensor point data (DTMRI Module)&lt;br /&gt;
** Color, Clipping State, Visibility, Scalar Visibility, LookupTable&lt;br /&gt;
&lt;br /&gt;
* Transforms&lt;br /&gt;
** Matrix4x4&lt;br /&gt;
&lt;br /&gt;
* Lookup Tables&lt;br /&gt;
** vtkLookupTable info&lt;br /&gt;
&lt;br /&gt;
* Fiducials&lt;br /&gt;
** Position, Quaternion&lt;br /&gt;
** Name, Selection State, Type (endoscopic, normal)&lt;br /&gt;
** Glyph Size, Text Size&lt;br /&gt;
&lt;br /&gt;
* Fiducial Lists&lt;br /&gt;
** Name, Slze, Color, Selection State&lt;br /&gt;
&lt;br /&gt;
* Colors&lt;br /&gt;
** Name, Label#, Diffuse/Ambient/Specular&lt;br /&gt;
&lt;br /&gt;
* Model Groups&lt;br /&gt;
&lt;br /&gt;
* Application State (not to be carried to Slicer3 MRML)&lt;br /&gt;
* Locator (not to be carried to Slicer3 MRML)&lt;br /&gt;
* Module Specific Parameters (not to be carried to Slicer3 MRML)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operations On MRML Scene ==&lt;br /&gt;
&lt;br /&gt;
* Load from File&lt;br /&gt;
* Save to File&lt;br /&gt;
* Traverse Nodes in Tree&lt;br /&gt;
* Insert Node&lt;br /&gt;
* Delete Node&lt;br /&gt;
* Register Tree Observer&lt;br /&gt;
* Update MRML&lt;br /&gt;
* Get Transformations (e.g. IJK to World through transform tree)&lt;br /&gt;
&lt;br /&gt;
* Data Type Specific Operations&lt;br /&gt;
** Get/Set Node MetaData&lt;br /&gt;
** Get/Set Data (e.g. as vtkImageData)&lt;br /&gt;
&lt;br /&gt;
== General References on XML ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikibooks.org/wiki/XML:_Managing_Data_Exchange A wikibook on XML] &lt;br /&gt;
&lt;br /&gt;
The [http://en.wikibooks.org/wiki/XML:_Managing_Data_Exchange/The_many-to-many_relationship#ID.2FIDRE section on ID/IDREF implementations], which are similar to what we use in MRML.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/MRML&amp;diff=27535</id>
		<title>Documentation/4.1/Developers/MRML</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/MRML&amp;diff=27535"/>
		<updated>2012-06-26T17:43:59Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* Undo/Redo Mechanism */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Slicer MRML Overview =&lt;br /&gt;
&lt;br /&gt;
*MRML Library provides API for managing medical image data types (Volumes, Models, Transforms, Fiducials, Cameras, etc) and their visualization. &lt;br /&gt;
*Each data type is represented by a special MRML node. &lt;br /&gt;
*MRML Scene is a collection of MRML nodes. &lt;br /&gt;
*Slicer MRML data model is implemented independent of the visualization and algorithmic components of the system. &lt;br /&gt;
*Other Slicer components (Logic and GUI) observe changes in MRML scene and individual nodes and process change MRML events.&lt;br /&gt;
&lt;br /&gt;
For more details on MRML architecture see [http://www.na-mic.org/Wiki/images/e/e3/Slicer_3-alpha-2006-04-03.ppt Architecture Slides].&lt;br /&gt;
&lt;br /&gt;
= MRML Scene =&lt;br /&gt;
&lt;br /&gt;
*MRML Scene manages MRML nodes : add, delete, find, find by type, etc.&lt;br /&gt;
*MRML Scene provides persistence of MRML nodes (reading/writing to/from XML file). &lt;br /&gt;
*MRML  Scene provides Undo/Redo mechanism that restores a previous state of the scene and individual nodes.&lt;br /&gt;
&lt;br /&gt;
= MRML Nodes =&lt;br /&gt;
 &lt;br /&gt;
*The MRML nodes are designed to store the state of the Slicer application, both raw data and visualization parameters.&lt;br /&gt;
&lt;br /&gt;
There following is a set of core MRLN nodes that store the state of core Slicer modules:&lt;br /&gt;
&lt;br /&gt;
* vtkMRMLCameraNode&lt;br /&gt;
* vtkMRMLClipModelsNode&lt;br /&gt;
* vtkMRMLSliceCompositeNode&lt;br /&gt;
* vtkMRMLSliceNode&lt;br /&gt;
* vtkMRMLColorNode&lt;br /&gt;
* vtkMRMLTransformNode&lt;br /&gt;
* vtkMRMLLinearTransformNode&lt;br /&gt;
* vtkMRMLTransformableNode&lt;br /&gt;
* vtkMRMLFiducialListNode&lt;br /&gt;
* vtkMRMLModelNode&lt;br /&gt;
* vtkMRMLModelDisplayNode&lt;br /&gt;
* vtkMRMLStorageNode&lt;br /&gt;
* vtkMRMLModelStorageNode&lt;br /&gt;
* vtkMRMLVolumeNode&lt;br /&gt;
* vtkMRMLScalarVolumeNode&lt;br /&gt;
* vtkMRMLVectorVolumeNode&lt;br /&gt;
* vtkMRMLTensorVolumeNode&lt;br /&gt;
* vtkMRMLDiffusionTensorVolumeNode&lt;br /&gt;
* vtkMRMLDiffusionWeightedVolumeNode&lt;br /&gt;
* vtkMRMLVolumeDisplayNode&lt;br /&gt;
* vtkMRMLVectorVolumeDisplayNode&lt;br /&gt;
* vtkMRMLDiffusionTensorVolumeDisplayNode&lt;br /&gt;
* vtkMRMLDiffusionWeightedVolumeDisplayNode&lt;br /&gt;
* vtkMRMLVolumeHeaderlessStorageNode&lt;br /&gt;
* vtkMRMLVolumeArchetypeStorageNode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
*MRML nodes are organized into C++ class hierarchies, all derived from vtkMRMLNode class. &lt;br /&gt;
*For example vtkMRMLTransformableNode is the parent class of Volume, Model, Fiducial, and Transformation nodes; vtkVolumeNode is a parent of vtkMRMLScalarVolumeNode and vtkMRMLVectorVolumeNode&lt;br /&gt;
*All MRML nodes have to implement certain standard API: ReadAttributes, WriteAttributes, Copy, etc.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Node_Hier.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MRML node attributes =&lt;br /&gt;
&lt;br /&gt;
MRML nodes can store custom attributes as (attribute name; attribute value) pairs.&lt;br /&gt;
&lt;br /&gt;
To avoid name clashes custom modules that adds attributes to nodes should prefix the attribute name with the module's name and the '.' character. Example: the DoseVolumeHistogram module can use attribute names such as DoseVolumeHistogram.StructureSetName, DoseVolumeHistogram.Unit, DoseVolumeHistogram.LineStyle.&lt;br /&gt;
&lt;br /&gt;
= References to MRML Nodes =&lt;br /&gt;
&lt;br /&gt;
*Some MRML nodes have references to other nodes. &lt;br /&gt;
*Transformable Node has a reference to a Transformation node. Transformation node has a reference to its parent Transformation node. &lt;br /&gt;
*References are stored by node ID.&lt;br /&gt;
*Use vtkSetReferenceStringMacro to set reference ID (it registers reference with the scene).&lt;br /&gt;
*Access methods should check if the referenced node is still in the MRML scene using its ID.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Trans_Ref.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MRML Events and Observers =&lt;br /&gt;
&lt;br /&gt;
*Changes in MRML scene and individual nodes propagate to other observing nodes, GUI and Logic objects via vtk events and command-observer mechanism.&lt;br /&gt;
*Use vtk AddObserver() and InvokeEvent() methods. vtk SetMacro generates ModifiedEvent.&lt;br /&gt;
*The command-observer mechanism for MRML is implemented using  helper vtkObserverManager, class, MRML Observer macros, and ProcessMRMLEvents method.&lt;br /&gt;
*Observers should store a registered pointer to a MRML node to prevent callbacks on a deleted object. &lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Observ.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*MRML observer macros are defined in Libs/MRML/vtkMRMLNode.h&lt;br /&gt;
*vtkSetMRMLObjectMacro - registers MRML node with another vtk object (another MRML node, Logic or GUI). No observers added.&lt;br /&gt;
*vtkSetAndObserveMRMLObjectMacro - registers MRML node and adds an observer for vtkCommand::ModifyEvent. &lt;br /&gt;
*vtkSetAndObserveMRMLObjectEventsMacro - registers MRML node and adds an observer for a specified set of events. &lt;br /&gt;
*SetAndObserveMRMLScene[Events]() method is used in GUI and Logic to observe Modify, NewScene, NodeAdded, etc. events.&lt;br /&gt;
*ProcessMRMLEvents method should be implemented in MRML nodes, Logic, and GUI classes in order to process events from the observed nodes.&lt;br /&gt;
&lt;br /&gt;
= Creating Custom MRML Node Classes=&lt;br /&gt;
&lt;br /&gt;
*Custom MRML nodes provide persistent storage for the module parameters. &lt;br /&gt;
*Custom MRML nodes should be registered with the MRML scene using RegisterNodeClass() so they can be saved and restored from a scene file. &lt;br /&gt;
*Classes should implement the following methods: &lt;br /&gt;
*CreateNodeInstance() – similar to VTK New() method only not static. &lt;br /&gt;
*GetNodeTagName() – return a unique XML tag for this node. &lt;br /&gt;
*ReadXMLAttributes() – reads node attributes from XML file as name-value pairs. &lt;br /&gt;
*WriteXML() – writes node attributes to output stream (as in interpolate=&amp;quot;1&amp;quot; ).&lt;br /&gt;
*Copy() – copies node attributes. &lt;br /&gt;
&lt;br /&gt;
*If the node has references to other nodes the following additional methods should be implemented: &lt;br /&gt;
 –UpdateReferenceID() - updates the stored reference to another node. &lt;br /&gt;
 –UpdateScene()- updates other nodes in the scene depending on this node or updates this node if it depends on other nodes when the scene is read in. &lt;br /&gt;
   This method is called automatically by XML parser after all nodes are created. &lt;br /&gt;
*An example of a custom MRML node implementation: vtkMRMLGradientAnisotropicDiffusionFilterNode in Modules/GradientAnisotropicDiffusionFilter directory. &lt;br /&gt;
*To add node to the MRML scene: &lt;br /&gt;
 –In the code: use standard vtk New() and add node to the scene using vtkMRMLScene::AddNode(vtkMRMLNode *)&lt;br /&gt;
 –By user request: use vtkSlicerNodeSelectorWidget that creates a new node from the module’s UI.&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
== How to add into the scene==&lt;br /&gt;
* Generic pattern &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkMRML???Node* nodeToAdd = vtkMRML???Node::New();&lt;br /&gt;
 ...&lt;br /&gt;
 mrmlScene-&amp;gt;AddNode(nodeToAdd);&lt;br /&gt;
 nodeToAdd-&amp;gt;Delete();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Add a polydata to the scene&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkNew&amp;lt;vtkMRMLModelNode&amp;gt; modelNode;&lt;br /&gt;
 modelNode-&amp;gt;SetPolyData(polyData);&lt;br /&gt;
 mrmlScene-&amp;gt;AddNode(modelNode.GetPointer());&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Load a polyData from file&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkSlicerModelsLogic* modelsLogic = ...;&lt;br /&gt;
 //modelsLogic-&amp;gt;SetMRMLScene(mrmlScene);&lt;br /&gt;
 modelsLogic-&amp;gt;AddModel(polyDataFileName);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==Views==&lt;br /&gt;
* Change the volumes in the 2D views ([https://github.com/fedorov/ChangeTrackerPy/blob/master/Wizard/Helper.py#L82 source])&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 appLogic = slicer.app.applicationLogic()&lt;br /&gt;
 selectionNode = appLogic.GetSelectionNode()&lt;br /&gt;
 selectionNode.SetReferenceActiveVolumeID(bg)&lt;br /&gt;
 selectionNode.SetReferenceSecondaryVolumeID(fg)&lt;br /&gt;
 appLogic.PropagateVolumeSelection()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Undo/Redo Mechanism =&lt;br /&gt;
&lt;br /&gt;
*Undo/Redo is based on saving and restoring the state of MRML nodes in the Scene. &lt;br /&gt;
*MRML scene can save snapshot of all nodes into a special Undo and Redo stacks. &lt;br /&gt;
*The Undo and Redo stacks store copies of nodes that have changed from the previous snapshot. The node that have not changed are stored by a reference (pointer). &lt;br /&gt;
*When an Undo is called on the scene, the current state of Undo stack is copied into the current scene and also into Redo stack. &lt;br /&gt;
*  All Undoable operations must store their data as MRML nodes&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Undo.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Developer controls at what point the snapshot is saved by calling SaveStateForUndo method on the MRML scene. &lt;br /&gt;
–SaveStateForUndo() - saves the state of all nodes in the scene &lt;br /&gt;
&amp;lt;br /&amp;gt;–SetActiveScene(vtkMRMLScene *) - saves the state of the specified node. &lt;br /&gt;
&amp;lt;br /&amp;gt;–SetActiveScene(vtkCollection*) - saves the state of the specified collection of nodes. &lt;br /&gt;
*SaveStateForUndo() should be called in GUI/Logic classes before changing the state of MRML nodes. Usually done in the ProcessGUIEvents method that processes events from the user interactions with GUI widgets. &lt;br /&gt;
*SaveStateForUndo() should not be called while processing transient events such as continuous events sent by KW UI while dragging a slider (for example vtkKWScale::ScaleValueStartChangingEvent). &lt;br /&gt;
&lt;br /&gt;
The following methods on the MRML scene are used to manage Undo/Redo stacks:&lt;br /&gt;
&lt;br /&gt;
* vtkMRMLScene::Undo() – restore the previously saved state of the MRML scene.&lt;br /&gt;
* vtkMRMLScene::Redo() – restore the previously undone state of the MRML scene.&lt;br /&gt;
* vtkMRMLScene::SetUndoOff() – ignore following SaveStateForUndo calls (usefull when making multiple changes to the scene/nodes that does not need to be undone). &lt;br /&gt;
* vtkMRMLScene::SetUndoOn() – enable following SaveStateForUndo calls.&lt;br /&gt;
* vtkMRMLScene::ClearUndoStack() – clears the undo history.&lt;br /&gt;
* vtkMRMLScene::ClearRedoStack() – clears the redo history.&lt;br /&gt;
&lt;br /&gt;
Slicer Module developers should call vtkMRMLScene::SaveStateForUndo() method in their modules before changing the state of MRML nodes. This is usually done in the ProcessGUIEvents method that processes events from the user interactions with GUI widgets. Note, that vtkMRMLScene::SaveStateForUndo() method should not be called while processing transient events such as continuos events sent by UI while dragging a slider (for example vtkKWScale::ScaleValueStartChangingEvent).&lt;br /&gt;
&lt;br /&gt;
= Other Useful References =&lt;br /&gt;
&lt;br /&gt;
== MRML API Documentation ==&lt;br /&gt;
&lt;br /&gt;
The detailed documentation of MRML API can be found in [http://slicer.org/doc/html/classes.html Slicer {{documentation/version}} Doxygen pages]&lt;br /&gt;
&lt;br /&gt;
== Slice view pipeline ==&lt;br /&gt;
&lt;br /&gt;
VTK/MRML pipeline for the 2D slice views: [[File:SliceView.pptx]].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
See Data Model notes in [http://wiki.na-mic.org/Wiki/index.php/AHM_2006:ProjectsSlicerDataModel AHM 2006 Programming week project].&lt;br /&gt;
&lt;br /&gt;
== Path-based MRML proposal ==&lt;br /&gt;
&lt;br /&gt;
Mike's proposal for a [[Slicer3:MRML3_Path|path-based MRML3 representation]], based on extending the Coordinate Space Manager ideas to the entire MRML3 tree&lt;br /&gt;
&lt;br /&gt;
== Slicer Daemon ==&lt;br /&gt;
&lt;br /&gt;
The goal of the [[Slicer3:Slicer_Daemon|Slicer Daemon]] project is to allow remote editing of the MRML data model by external programs over a socket.&lt;br /&gt;
&lt;br /&gt;
== EventBroker Discussion ==&lt;br /&gt;
&lt;br /&gt;
The [[Slicer3:EventBroker|Event Broker]] is a proposal to improve the way events are managed inside slicer.&lt;br /&gt;
&lt;br /&gt;
= Slicer 2.6 MRML =&lt;br /&gt;
&lt;br /&gt;
== Data Represented in MRML in Slicer 2.6 ==&lt;br /&gt;
&lt;br /&gt;
* Volumes&lt;br /&gt;
** IJK-&amp;gt;RAS (VTK-&amp;gt;RAS)&lt;br /&gt;
** Scalar Types&lt;br /&gt;
** Multicomponent (RGB, Displacement Vector)&lt;br /&gt;
** Tensor Volumes&lt;br /&gt;
** Label Maps&lt;br /&gt;
** Reference to Lookup Table&lt;br /&gt;
&lt;br /&gt;
* Models&lt;br /&gt;
** vtkPolyData&lt;br /&gt;
*** Named Field Data (scalars, vectors, labels) at points and cells (FreeSurferReaders)&lt;br /&gt;
*** Polylines with tensor point data (DTMRI Module)&lt;br /&gt;
** Color, Clipping State, Visibility, Scalar Visibility, LookupTable&lt;br /&gt;
&lt;br /&gt;
* Transforms&lt;br /&gt;
** Matrix4x4&lt;br /&gt;
&lt;br /&gt;
* Lookup Tables&lt;br /&gt;
** vtkLookupTable info&lt;br /&gt;
&lt;br /&gt;
* Fiducials&lt;br /&gt;
** Position, Quaternion&lt;br /&gt;
** Name, Selection State, Type (endoscopic, normal)&lt;br /&gt;
** Glyph Size, Text Size&lt;br /&gt;
&lt;br /&gt;
* Fiducial Lists&lt;br /&gt;
** Name, Slze, Color, Selection State&lt;br /&gt;
&lt;br /&gt;
* Colors&lt;br /&gt;
** Name, Label#, Diffuse/Ambient/Specular&lt;br /&gt;
&lt;br /&gt;
* Model Groups&lt;br /&gt;
&lt;br /&gt;
* Application State (not to be carried to Slicer3 MRML)&lt;br /&gt;
* Locator (not to be carried to Slicer3 MRML)&lt;br /&gt;
* Module Specific Parameters (not to be carried to Slicer3 MRML)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operations On MRML Scene ==&lt;br /&gt;
&lt;br /&gt;
* Load from File&lt;br /&gt;
* Save to File&lt;br /&gt;
* Traverse Nodes in Tree&lt;br /&gt;
* Insert Node&lt;br /&gt;
* Delete Node&lt;br /&gt;
* Register Tree Observer&lt;br /&gt;
* Update MRML&lt;br /&gt;
* Get Transformations (e.g. IJK to World through transform tree)&lt;br /&gt;
&lt;br /&gt;
* Data Type Specific Operations&lt;br /&gt;
** Get/Set Node MetaData&lt;br /&gt;
** Get/Set Data (e.g. as vtkImageData)&lt;br /&gt;
&lt;br /&gt;
== General References on XML ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikibooks.org/wiki/XML:_Managing_Data_Exchange A wikibook on XML] &lt;br /&gt;
&lt;br /&gt;
The [http://en.wikibooks.org/wiki/XML:_Managing_Data_Exchange/The_many-to-many_relationship#ID.2FIDRE section on ID/IDREF implementations], which are similar to what we use in MRML.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/Logics&amp;diff=27393</id>
		<title>Documentation/4.1/Developers/Logics</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/Logics&amp;diff=27393"/>
		<updated>2012-06-20T14:54:43Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A logic is a collection of &amp;quot;algorithms&amp;quot; that mainly process MRML nodes within a scene.&lt;br /&gt;
&lt;br /&gt;
Logics can be:&lt;br /&gt;
* ''active'': observe the scene and nodes to react when receiving events are fired&lt;br /&gt;
* ''passive'' (helper): collection of utility functions to simplify the handling of nodes (e.g. &amp;lt;code&amp;gt;AddArchetypeVolume&amp;lt;/code&amp;gt; in Volumes logic, Application logic.)&lt;br /&gt;
* a mix of both: not ideal.&lt;br /&gt;
&lt;br /&gt;
There are 5 types of logics within Slicer. Their role is usually dictated by their dependencies. The [http://slicer.org/doc/html/classvtkMRMLAbstractLogic__inherit__graph.png inheritance graph] can be useful to understand the relationship between each logic types.&lt;br /&gt;
&amp;lt;!-- --------------------------------- --&amp;gt;&lt;br /&gt;
# '''MRML logics'''&lt;br /&gt;
#: Location&lt;br /&gt;
#:: ''Slicer/Libs/MRML/Logics''&lt;br /&gt;
#: Dependencies&lt;br /&gt;
#:: MRMLCore&lt;br /&gt;
#:: no graphical dependency&lt;br /&gt;
#:: no Slicer dendendency (can by used by other projects) &lt;br /&gt;
#: Role&lt;br /&gt;
#:: Contain the base classes for logics (&amp;lt;code&amp;gt;vtkMRMLAbstractLogic&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vtkMRMLApplicationLogic&amp;lt;/code&amp;gt;) and helper classes&lt;br /&gt;
#:: MRML logics don't have access to the application, and so shouldn't contain any Slicer specific code.&lt;br /&gt;
#: Examples:&lt;br /&gt;
#::* factories: for MRML nodes (&amp;lt;code&amp;gt;vtkMRMLColorLogic&amp;lt;/code&amp;gt; creates default &amp;lt;code&amp;gt;vtkMRMLColor*Nodes&amp;lt;/code&amp;gt;)&lt;br /&gt;
#::* helpers: &amp;lt;code&amp;gt;vtkMRMLModelHierarchyLogic&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;!-- --------------------------------- --&amp;gt;&lt;br /&gt;
# '''Slicer logics'''&lt;br /&gt;
#: Location&lt;br /&gt;
#:: ''Slicer/Base/Logics''&lt;br /&gt;
#: Dependencies&lt;br /&gt;
#:: MRMLLogic&lt;br /&gt;
#: Role&lt;br /&gt;
#:: Specialization of '''MRML Logics''' for the Slicer application.&lt;br /&gt;
#: Examples:&lt;br /&gt;
#::* &amp;lt;code&amp;gt;vtkSlicerColorLogic&amp;lt;/code&amp;gt;: knows about the &amp;quot;application&amp;quot; default LUT IDs and custom application lut files.&lt;br /&gt;
&amp;lt;!-- --------------------------------- --&amp;gt;&lt;br /&gt;
# '''Application logics'''&lt;br /&gt;
#: Location&lt;br /&gt;
#:: ''Slicer/Libs/MRML/Logics/vtkMRMLApplicationLogic.[h|cxx]'' and ''Slicer/Base/Logics/vtkSlicerApplicationLogic.[h|cxx]'' &lt;br /&gt;
#: Dependencies&lt;br /&gt;
#:: &amp;lt;code&amp;gt;vtkMRMLApplicationLogic&amp;lt;/code&amp;gt; doesn't depend on Slicer however &amp;lt;code&amp;gt;vtkSlicerApplicationLogic&amp;lt;/code&amp;gt; does.&lt;br /&gt;
#: Role&lt;br /&gt;
#:: Contains application specific information. &amp;lt;code&amp;gt;vtkMRMLApplicationLogic&amp;lt;/code&amp;gt; is an abstract class that is specialized for the application using MRML (&amp;lt;code&amp;gt;vtkSlicerApplicationLogic&amp;lt;/code&amp;gt; for Slicer) &lt;br /&gt;
#:: &amp;lt;code&amp;gt;vtk[MRML/Slicer]ApplicationLogic&amp;lt;/code&amp;gt; is NOT a singleton, however, it can be accessed by any logics (see &amp;lt;code&amp;gt;vtkMRMLAbstractLogic::SetApplicationLogic&amp;lt;/code&amp;gt;)  so it can be considered as such. It currently contains a list of nodes/logics, unique in the application. It is here for historic reasons (Slicer3), but it should not be seen as a placeholder for everything. Querying a module to get its logic should be preferred to access logics.&lt;br /&gt;
&amp;lt;!-- --------------------------------- --&amp;gt;&lt;br /&gt;
# '''Module logics'''&lt;br /&gt;
#: Location&lt;br /&gt;
#:: ''Slicer/Modules/Loadable/XYZ/Logic/vtkSlicerXXXLogic''&lt;br /&gt;
#: Dependencies&lt;br /&gt;
#:: Slicer logics, XYZ nodes and optionally other module logics&lt;br /&gt;
#: Role&lt;br /&gt;
#:: A module logic is the module public API. While a module has typically (not necessarily) an associated widget/panel, no processing should be done within the widget, the widget is just the interface between the user and the logic/nodes. Modules can access other module logics (i.e. &amp;lt;code&amp;gt;qSlicerCoreApplication::moduleManager()-&amp;gt;module(&amp;quot;Volumes&amp;quot;)-&amp;gt;logic()&amp;lt;/code&amp;gt;) if needed. There is maximum 1 module logic per module, however, it doesn't prevent the module logic to use helper logics (&amp;lt;code&amp;gt;vtkSlicerModelsLogic&amp;lt;/code&amp;gt; can instantiate/use &amp;lt;code&amp;gt;vtkMRMLModelHierarchyLogic&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;!-- --------------------------------- --&amp;gt;&lt;br /&gt;
# '''[[Documentation/{{documentation/version}}/Developers/DisplayableManagers|Displayable managers]]'''&lt;br /&gt;
#: Location&lt;br /&gt;
#:: ''Slicer/Libs/MRML/DisplayableManager''&lt;br /&gt;
#: Dependencies&lt;br /&gt;
#:: MRMLLogic and vtkRendering&lt;br /&gt;
#: Role&lt;br /&gt;
#:: They are logics that focus on representing nodes in a VTK renderer and handling user interaction within the view.&lt;br /&gt;
#:: Theoretically the slice logics should be displayable managers ( however, it might be a huge effort for just the sake of being consistent ).&lt;br /&gt;
#:: Displayable managers contain some limitations:&lt;br /&gt;
#:::* there is no control (yet?) over their creation, and once instantiated, it's not easy to control their behavior (properties can't be set externally on displayable managers).&lt;br /&gt;
#:::* they are not (yet?) well designed to communicate with each others. &lt;br /&gt;
&lt;br /&gt;
A class (logic, widget...) should explicitly expose in its API the required logic(s) (e.g. &amp;lt;code&amp;gt;qMRMLColorPickerwidget::setColorLogic(vtkMRMLColorLogic*)&amp;lt;/code&amp;gt;) instead of hiding the requirements by directly using the application logic (e.g. &amp;lt;code&amp;gt;this-&amp;gt;GetApplicationLogic()-&amp;gt;GetModelHierarchyLogic()&amp;lt;/code&amp;gt; ).&lt;br /&gt;
&lt;br /&gt;
It is the role of the class instantiator to pass the required logics to the created class (e.g. the module plugin sets the module logic to the module widget). For module logics depending on other module logics, it is resolved in the &amp;lt;code&amp;gt;qSlicer*Module::setup()&amp;lt;/code&amp;gt; function, &amp;lt;code&amp;gt;qSlicer*Modules&amp;lt;/code&amp;gt; have access to all modules and their logics that way (i.e. &amp;lt;code&amp;gt;qSlicerCoreApplication::moduleManager()-&amp;gt;module(&amp;quot;Volumes&amp;quot;)-&amp;gt;logic()&amp;lt;/code&amp;gt;).&lt;br /&gt;
Exposing the requirements in the API instead of using singleton has the advantage of having a scope well defined and contained, the code becomes more modular and easier to unit test.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/MRML&amp;diff=27352</id>
		<title>Documentation/4.1/Developers/MRML</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/MRML&amp;diff=27352"/>
		<updated>2012-06-19T20:29:02Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* MRML Events and Observers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Slicer MRML Overview =&lt;br /&gt;
&lt;br /&gt;
*MRML Library provides API for managing medical image data types (Volumes, Models, Transforms, Fiducials, Cameras, etc) and their visualization. &lt;br /&gt;
*Each data type is represented by a special MRML node. &lt;br /&gt;
*MRML Scene is a collection of MRML nodes. &lt;br /&gt;
*Slicer MRML data model is implemented independent of the visualization and algorithmic components of the system. &lt;br /&gt;
*Other Slicer components (Logic and GUI) observe changes in MRML scene and individual nodes and process change MRML events.&lt;br /&gt;
&lt;br /&gt;
For more details on MRML architecture see [http://www.na-mic.org/Wiki/images/e/e3/Slicer_3-alpha-2006-04-03.ppt Architecture Slides].&lt;br /&gt;
&lt;br /&gt;
= MRML Scene =&lt;br /&gt;
&lt;br /&gt;
*MRML Scene manages MRML nodes : add, delete, find, find by type, etc.&lt;br /&gt;
*MRML Scene provides persistence of MRML nodes (reading/writing to/from XML file). &lt;br /&gt;
*MRML  Scene provides Undo/Redo mechanism that restores a previous state of the scene and individual nodes.&lt;br /&gt;
&lt;br /&gt;
= MRML Nodes =&lt;br /&gt;
 &lt;br /&gt;
*The MRML nodes are designed to store the state of the Slicer application, both raw data and visualization parameters.&lt;br /&gt;
&lt;br /&gt;
There following is a set of core MRLN nodes that store the state of core Slicer modules:&lt;br /&gt;
&lt;br /&gt;
* vtkMRMLCameraNode&lt;br /&gt;
* vtkMRMLClipModelsNode&lt;br /&gt;
* vtkMRMLSliceCompositeNode&lt;br /&gt;
* vtkMRMLSliceNode&lt;br /&gt;
* vtkMRMLColorNode&lt;br /&gt;
* vtkMRMLTransformNode&lt;br /&gt;
* vtkMRMLLinearTransformNode&lt;br /&gt;
* vtkMRMLTransformableNode&lt;br /&gt;
* vtkMRMLFiducialListNode&lt;br /&gt;
* vtkMRMLModelNode&lt;br /&gt;
* vtkMRMLModelDisplayNode&lt;br /&gt;
* vtkMRMLStorageNode&lt;br /&gt;
* vtkMRMLModelStorageNode&lt;br /&gt;
* vtkMRMLVolumeNode&lt;br /&gt;
* vtkMRMLScalarVolumeNode&lt;br /&gt;
* vtkMRMLVectorVolumeNode&lt;br /&gt;
* vtkMRMLTensorVolumeNode&lt;br /&gt;
* vtkMRMLDiffusionTensorVolumeNode&lt;br /&gt;
* vtkMRMLDiffusionWeightedVolumeNode&lt;br /&gt;
* vtkMRMLVolumeDisplayNode&lt;br /&gt;
* vtkMRMLVectorVolumeDisplayNode&lt;br /&gt;
* vtkMRMLDiffusionTensorVolumeDisplayNode&lt;br /&gt;
* vtkMRMLDiffusionWeightedVolumeDisplayNode&lt;br /&gt;
* vtkMRMLVolumeHeaderlessStorageNode&lt;br /&gt;
* vtkMRMLVolumeArchetypeStorageNode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
*MRML nodes are organized into C++ class hierarchies, all derived from vtkMRMLNode class. &lt;br /&gt;
*For example vtkMRMLTransformableNode is the parent class of Volume, Model, Fiducial, and Transformation nodes; vtkVolumeNode is a parent of vtkMRMLScalarVolumeNode and vtkMRMLVectorVolumeNode&lt;br /&gt;
*All MRML nodes have to implement certain standard API: ReadAttributes, WriteAttributes, Copy, etc.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Node_Hier.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MRML node attributes =&lt;br /&gt;
&lt;br /&gt;
MRML nodes can store custom attributes as (attribute name; attribute value) pairs.&lt;br /&gt;
&lt;br /&gt;
To avoid name clashes custom modules that adds attributes to nodes should prefix the attribute name with the module's name and the '.' character. Example: the DoseVolumeHistogram module can use attribute names such as DoseVolumeHistogram.StructureSetName, DoseVolumeHistogram.Unit, DoseVolumeHistogram.LineStyle.&lt;br /&gt;
&lt;br /&gt;
= References to MRML Nodes =&lt;br /&gt;
&lt;br /&gt;
*Some MRML nodes have references to other nodes. &lt;br /&gt;
*Transformable Node has a reference to a Transformation node. Transformation node has a reference to its parent Transformation node. &lt;br /&gt;
*References are stored by node ID.&lt;br /&gt;
*Use vtkSetReferenceStringMacro to set reference ID (it registers reference with the scene).&lt;br /&gt;
*Access methods should check if the referenced node is still in the MRML scene using its ID.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Trans_Ref.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MRML Events and Observers =&lt;br /&gt;
&lt;br /&gt;
*Changes in MRML scene and individual nodes propagate to other observing nodes, GUI and Logic objects via vtk events and command-observer mechanism.&lt;br /&gt;
*Use vtk AddObserver() and InvokeEvent() methods. vtk SetMacro generates ModifiedEvent.&lt;br /&gt;
*The command-observer mechanism for MRML is implemented using  helper vtkObserverManager, class, MRML Observer macros, and ProcessMRMLEvents method.&lt;br /&gt;
*Observers should store a registered pointer to a MRML node to prevent callbacks on a deleted object. &lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Observ.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*MRML observer macros are defined in Libs/MRML/vtkMRMLNode.h&lt;br /&gt;
*vtkSetMRMLObjectMacro - registers MRML node with another vtk object (another MRML node, Logic or GUI). No observers added.&lt;br /&gt;
*vtkSetAndObserveMRMLObjectMacro - registers MRML node and adds an observer for vtkCommand::ModifyEvent. &lt;br /&gt;
*vtkSetAndObserveMRMLObjectEventsMacro - registers MRML node and adds an observer for a specified set of events. &lt;br /&gt;
*SetAndObserveMRMLScene[Events]() method is used in GUI and Logic to observe Modify, NewScene, NodeAdded, etc. events.&lt;br /&gt;
*ProcessMRMLEvents method should be implemented in MRML nodes, Logic, and GUI classes in order to process events from the observed nodes.&lt;br /&gt;
&lt;br /&gt;
= Creating Custom MRML Node Classes=&lt;br /&gt;
&lt;br /&gt;
*Custom MRML nodes provide persistent storage for the module parameters. &lt;br /&gt;
*Custom MRML nodes should be registered with the MRML scene using RegisterNodeClass() so they can be saved and restored from a scene file. &lt;br /&gt;
*Classes should implement the following methods: &lt;br /&gt;
*CreateNodeInstance() – similar to VTK New() method only not static. &lt;br /&gt;
*GetNodeTagName() – return a unique XML tag for this node. &lt;br /&gt;
*ReadXMLAttributes() – reads node attributes from XML file as name-value pairs. &lt;br /&gt;
*WriteXML() – writes node attributes to output stream (as in interpolate=&amp;quot;1&amp;quot; ).&lt;br /&gt;
*Copy() – copies node attributes. &lt;br /&gt;
&lt;br /&gt;
*If the node has references to other nodes the following additional methods should be implemented: &lt;br /&gt;
 –UpdateReferenceID() - updates the stored reference to another node. &lt;br /&gt;
 –UpdateScene()- updates other nodes in the scene depending on this node or updates this node if it depends on other nodes when the scene is read in. &lt;br /&gt;
   This method is called automatically by XML parser after all nodes are created. &lt;br /&gt;
*An example of a custom MRML node implementation: vtkMRMLGradientAnisotropicDiffusionFilterNode in Modules/GradientAnisotropicDiffusionFilter directory. &lt;br /&gt;
*To add node to the MRML scene: &lt;br /&gt;
 –In the code: use standard vtk New() and add node to the scene using vtkMRMLScene::AddNode(vtkMRMLNode *)&lt;br /&gt;
 –By user request: use vtkSlicerNodeSelectorWidget that creates a new node from the module’s UI.&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
== How to add into the scene==&lt;br /&gt;
* Generic pattern &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkMRML???Node* nodeToAdd = vtkMRML???Node::New();&lt;br /&gt;
 ...&lt;br /&gt;
 mrmlScene-&amp;gt;AddNode(nodeToAdd);&lt;br /&gt;
 nodeToAdd-&amp;gt;Delete();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Add a polydata to the scene&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkNew&amp;lt;vtkMRMLModelNode&amp;gt; modelNode;&lt;br /&gt;
 modelNode-&amp;gt;SetPolyData(polyData);&lt;br /&gt;
 mrmlScene-&amp;gt;AddNode(modelNode.GetPointer());&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Load a polyData from file&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 vtkSlicerModelsLogic* modelsLogic = ...;&lt;br /&gt;
 //modelsLogic-&amp;gt;SetMRMLScene(mrmlScene);&lt;br /&gt;
 modelsLogic-&amp;gt;AddModel(polyDataFileName);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==Views==&lt;br /&gt;
* Change the volumes in the 2D views ([https://github.com/fedorov/ChangeTrackerPy/blob/master/Wizard/Helper.py#L82 source])&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 appLogic = slicer.app.applicationLogic()&lt;br /&gt;
 selectionNode = appLogic.GetSelectionNode()&lt;br /&gt;
 selectionNode.SetReferenceActiveVolumeID(bg)&lt;br /&gt;
 selectionNode.SetReferenceSecondaryVolumeID(fg)&lt;br /&gt;
 appLogic.PropagateVolumeSelection()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Undo/Redo Mechanism =&lt;br /&gt;
&lt;br /&gt;
*Undo/Redo is based on saving and restoring the state of MRML nodes in the Scene. &lt;br /&gt;
*MRML scene can save snapshot of all nodes into a special Undo and Redo stacks. &lt;br /&gt;
*The Undo and Redo stacks store copies of nodes that have changed from the previous snapshot. The node that have not changed are stored by a reference (pointer). &lt;br /&gt;
*When an Undo is called on the scene, the current state of Undo stack is copied into the current scene and also into Redo stack. &lt;br /&gt;
*  All Undoable operations must store their data as MRML nodes&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image: Slicer3_MRML_Undo.jpg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Developer controls at what point the snapshot is saved by calling SaveStateForUndo method on the MRML scene. &lt;br /&gt;
–SaveStateForUndo() - saves the state of all nodes in the scene &lt;br /&gt;
&amp;lt;br /&amp;gt;–SetActiveScene(vtkMRMLScene *) - saves the state of the specified node. &lt;br /&gt;
&amp;lt;br /&amp;gt;–SetActiveScene(vtkCollection*) - saves the state of the specified collection of nodes. &lt;br /&gt;
*SaveStateForUndo() should be called in GUI/Logic classes before changing the state of MRML nodes. Usually done in the ProcessGUIEvents method that processes events from the user interactions with GUI widgets. &lt;br /&gt;
*SaveStateForUndo() should not be called while processing transient events such as continuous events sent by KW UI while dragging a slider (for example vtkKWScale::ScaleValueStartChangingEvent). &lt;br /&gt;
&lt;br /&gt;
The following methods on the MRML scene are used to manage Undo/Redo stacks:&lt;br /&gt;
&lt;br /&gt;
* vtkMRMLScene::Undo() – restore the previously saved state of the MRML scene.&lt;br /&gt;
* vtkMRMLScene::Redo() – restore the previously undone state of the MREML scene.&lt;br /&gt;
* vtkMRMLScene::SetUndoOff() – ignore following SaveStateForUndo calls (usefull when making multiple changes to the scene/nodes that does not need to be undone). &lt;br /&gt;
* vtkMRMLScene::SetUndoOn() – enable following SaveStateForUndo calls.&lt;br /&gt;
* vtkMRMLScene::ClearUndoStack() – clears the undo history.&lt;br /&gt;
* vtkMRMLScene::ClearRedoStack() – clears the redo history.&lt;br /&gt;
&lt;br /&gt;
Slicer Module developers should call vtkMRMLScene::SaveStateForUndo() method in their modules before changing the state of MRML nodes. This is usually done in the ProcessGUIEvents method that processes events from the user interactions with GUI widgets. Note, that vtkMRMLScene::SaveStateForUndo() method should not be called while processing transient events such as continuos events sent by UI while dragging a slider (for example vtkKWScale::ScaleValueStartChangingEvent).&lt;br /&gt;
&lt;br /&gt;
= Other Useful References =&lt;br /&gt;
&lt;br /&gt;
== MRML API Documentation ==&lt;br /&gt;
&lt;br /&gt;
The detailed documentation of MRML API can be found in [http://slicer.org/doc/html/classes.html Slicer {{documentation/version}} Doxygen pages]&lt;br /&gt;
&lt;br /&gt;
== Slice view pipeline ==&lt;br /&gt;
&lt;br /&gt;
VTK/MRML pipeline for the 2D slice views: [[File:SliceView.pptx]].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
See Data Model notes in [http://wiki.na-mic.org/Wiki/index.php/AHM_2006:ProjectsSlicerDataModel AHM 2006 Programming week project].&lt;br /&gt;
&lt;br /&gt;
== Path-based MRML proposal ==&lt;br /&gt;
&lt;br /&gt;
Mike's proposal for a [[Slicer3:MRML3_Path|path-based MRML3 representation]], based on extending the Coordinate Space Manager ideas to the entire MRML3 tree&lt;br /&gt;
&lt;br /&gt;
== Slicer Daemon ==&lt;br /&gt;
&lt;br /&gt;
The goal of the [[Slicer3:Slicer_Daemon|Slicer Daemon]] project is to allow remote editing of the MRML data model by external programs over a socket.&lt;br /&gt;
&lt;br /&gt;
== EventBroker Discussion ==&lt;br /&gt;
&lt;br /&gt;
The [[Slicer3:EventBroker|Event Broker]] is a proposal to improve the way events are managed inside slicer.&lt;br /&gt;
&lt;br /&gt;
= Slicer 2.6 MRML =&lt;br /&gt;
&lt;br /&gt;
== Data Represented in MRML in Slicer 2.6 ==&lt;br /&gt;
&lt;br /&gt;
* Volumes&lt;br /&gt;
** IJK-&amp;gt;RAS (VTK-&amp;gt;RAS)&lt;br /&gt;
** Scalar Types&lt;br /&gt;
** Multicomponent (RGB, Displacement Vector)&lt;br /&gt;
** Tensor Volumes&lt;br /&gt;
** Label Maps&lt;br /&gt;
** Reference to Lookup Table&lt;br /&gt;
&lt;br /&gt;
* Models&lt;br /&gt;
** vtkPolyData&lt;br /&gt;
*** Named Field Data (scalars, vectors, labels) at points and cells (FreeSurferReaders)&lt;br /&gt;
*** Polylines with tensor point data (DTMRI Module)&lt;br /&gt;
** Color, Clipping State, Visibility, Scalar Visibility, LookupTable&lt;br /&gt;
&lt;br /&gt;
* Transforms&lt;br /&gt;
** Matrix4x4&lt;br /&gt;
&lt;br /&gt;
* Lookup Tables&lt;br /&gt;
** vtkLookupTable info&lt;br /&gt;
&lt;br /&gt;
* Fiducials&lt;br /&gt;
** Position, Quaternion&lt;br /&gt;
** Name, Selection State, Type (endoscopic, normal)&lt;br /&gt;
** Glyph Size, Text Size&lt;br /&gt;
&lt;br /&gt;
* Fiducial Lists&lt;br /&gt;
** Name, Slze, Color, Selection State&lt;br /&gt;
&lt;br /&gt;
* Colors&lt;br /&gt;
** Name, Label#, Diffuse/Ambient/Specular&lt;br /&gt;
&lt;br /&gt;
* Model Groups&lt;br /&gt;
&lt;br /&gt;
* Application State (not to be carried to Slicer3 MRML)&lt;br /&gt;
* Locator (not to be carried to Slicer3 MRML)&lt;br /&gt;
* Module Specific Parameters (not to be carried to Slicer3 MRML)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operations On MRML Scene ==&lt;br /&gt;
&lt;br /&gt;
* Load from File&lt;br /&gt;
* Save to File&lt;br /&gt;
* Traverse Nodes in Tree&lt;br /&gt;
* Insert Node&lt;br /&gt;
* Delete Node&lt;br /&gt;
* Register Tree Observer&lt;br /&gt;
* Update MRML&lt;br /&gt;
* Get Transformations (e.g. IJK to World through transform tree)&lt;br /&gt;
&lt;br /&gt;
* Data Type Specific Operations&lt;br /&gt;
** Get/Set Node MetaData&lt;br /&gt;
** Get/Set Data (e.g. as vtkImageData)&lt;br /&gt;
&lt;br /&gt;
== General References on XML ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikibooks.org/wiki/XML:_Managing_Data_Exchange A wikibook on XML] &lt;br /&gt;
&lt;br /&gt;
The [http://en.wikibooks.org/wiki/XML:_Managing_Data_Exchange/The_many-to-many_relationship#ID.2FIDRE section on ID/IDREF implementations], which are similar to what we use in MRML.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Developer_Meetings/20120612&amp;diff=26820</id>
		<title>Developer Meetings/20120612</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Developer_Meetings/20120612&amp;diff=26820"/>
		<updated>2012-06-12T20:17:52Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* To discuss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Attendees: &lt;br /&gt;
&lt;br /&gt;
== To discuss ==&lt;br /&gt;
* Preparations for [http://www.na-mic.org/Wiki/index.php/2012_Summer_Project_Week Project Week]&lt;br /&gt;
** Extensions:&lt;br /&gt;
*** User documentation associated with extensions manager will be added here: http://www.slicer.org/slicerWiki/index.php/Documentation/4.1/SlicerApplication/ExtensionsManager&lt;br /&gt;
*** Developer documentation specific to extension writing: CMakeLists, which variables to use, ... -&amp;gt; TBD&lt;br /&gt;
*** [[Documentation/4.1/Developers|Developer page has been updated]]&lt;br /&gt;
**** Better presentation of Slicer, module and extensions. Schema will be added soon.&lt;br /&gt;
*** Regular update of http://na-mic.org/Mantis/view.php?id=1989&lt;br /&gt;
*** Schema to illustrate difference between ExtensionsIndex, ExtensionsCatalog, .... See below&lt;br /&gt;
**** A better image to illustrate the factory machine will be used (Thanks J2)&lt;br /&gt;
**** It will be specify that only extensions belonging to category one and two can be contributed&lt;br /&gt;
*** How to build and publish extensions: https://github.com/jcfr/ExtensionsIndex/tree/24-ExtensionIndex-add-readme-file#readme&lt;br /&gt;
** DCMTK Build issues (CMake 2.8 on mac)&lt;br /&gt;
*** http://massmail.spl.harvard.edu/public-archives/slicer-devel/2012/009034.html&lt;br /&gt;
*** http://massmail.spl.harvard.edu/public-archives/slicer-devel/2012/009020.html&lt;br /&gt;
** Update to support Ninja&lt;br /&gt;
*** Should CTK be updated ?&lt;br /&gt;
*** http://massmail.spl.harvard.edu/public-archives/slicer-devel/2012/009022.html&lt;br /&gt;
*** Updated Slicer patch: https://github.com/thewtex/Slicer/tree/update_command2&lt;br /&gt;
**** Needs to be tested on Windows (refactors python double patch hack)&lt;br /&gt;
&lt;br /&gt;
=== Extensions index to catalog cycle ===&lt;br /&gt;
&lt;br /&gt;
[[File:Extensions-Index-to-Catalog-cycle.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/Build_Instructions/Configure&amp;diff=26650</id>
		<title>Documentation/4.1/Developers/Build Instructions/Configure</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/Build_Instructions/Configure&amp;diff=26650"/>
		<updated>2012-06-05T22:31:30Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: /* General information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CONFIGURE and generate Slicer solution files ==&lt;br /&gt;
You can configure and generate Slicer solution files using either &amp;lt;code&amp;gt;ccmake&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;cmake-gui&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Per-platform instructions===&lt;br /&gt;
==== Windows ====&lt;br /&gt;
*'''Recommended''': &amp;lt;code&amp;gt;cmake-gui&amp;lt;/code&amp;gt;&lt;br /&gt;
** Configure using default options.&lt;br /&gt;
* '''Remarks''':&lt;br /&gt;
#If you downloaded the Qt binary then &amp;lt;code&amp;gt;qmake&amp;lt;/code&amp;gt; will be detected and all paths will be set automatically.  &lt;br /&gt;
#If you built your own Qt (e.g. in Debug mode for use with the designer) set the &amp;lt;code&amp;gt;QT_QMAKE_EXECUTABLE&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;cmake-gui&amp;lt;/code&amp;gt;.&amp;lt;code&amp;gt;QT_QMAKE_EXECUTABLE&amp;lt;/code&amp;gt; should be set to the path of the qmake.exe file, which is inside the bin directory (for example, &amp;lt;code&amp;gt;/path/to/qt-everywhere-opensource-build-4.7.4/bin/qmake.exe&amp;lt;/code&amp;gt;). &lt;br /&gt;
#Windows doesn't support path longer than 260 characters, please make sure that the total path name of your &amp;lt;code&amp;gt;Slicer-build&amp;lt;/code&amp;gt; directory is no longer than 50 characters ( for example &amp;lt;code&amp;gt;c:\work\Slicer\Slicer-Superbuild&amp;lt;/code&amp;gt; (32 characters) is fine)&lt;br /&gt;
&lt;br /&gt;
==== Unix-like ====&lt;br /&gt;
*'''Recommended''': &amp;lt;code&amp;gt;ccmake&amp;lt;/code&amp;gt;&lt;br /&gt;
** Configure using the following commands. By default '''CMAKE_BUILD_TYPE''' is set to '''Debug'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir Slicer4-SuperBuild-Debug&lt;br /&gt;
cd Slicer4-SuperBuild-Debug&lt;br /&gt;
ccmake -DQT_QMAKE_EXECUTABLE:FILEPATH=/path/to/QtSDK-1.2/Desktop/Qt/474/gcc/bin/qmake ../Slicer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Remarks''':&lt;br /&gt;
# Using top-level directory name like &amp;lt;code&amp;gt;Slicer-Superbuild-Release&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Slicer-Superbuild-Debug&amp;lt;/code&amp;gt; is recommended.&lt;br /&gt;
&lt;br /&gt;
=== General information ===&lt;br /&gt;
&lt;br /&gt;
Two projects are generated by either &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ccmake&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;cmake-gui&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
One of them is in the top-level bin directory &amp;lt;code&amp;gt;Slicer4-Superbuild&amp;lt;/code&amp;gt; and the other one is in the subdirectory &amp;lt;code&amp;gt;Slicer-build&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Slicer4-Superbuild/Slicer-build&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# The first project in &amp;lt;code&amp;gt;Slicer4-Superbuild&amp;lt;/code&amp;gt; manages all the external dependencies of Slicer (VTK, ITK, Python, ...). To build Slicer for the first time, run make (or build the solution file in Visual Studio) in &amp;lt;code&amp;gt;Slicer4-Superbuild&amp;lt;/code&amp;gt;, which will update and build the external libraries and if successful will then build the subproject Slicer-build.&amp;lt;br&amp;gt;&lt;br /&gt;
# The second project in &amp;lt;code&amp;gt;Slicer4-Superbuild/Slicer-build&amp;lt;/code&amp;gt; is the &amp;quot;traditional&amp;quot; build directory of Slicer.  After local changes in Slicer (or after an svn update on the source directory of Slicer), only running make (or building the solution file in Visual Studio) in &amp;lt;code&amp;gt;Slicer4-Superbuild/Slicer-build&amp;lt;/code&amp;gt; is necessary (the external libraries are considered built and up to date). &amp;lt;br&amp;gt;&lt;br /&gt;
#'''Warning''': An significant amount of disk space is required to compile Slicer in Debug (&amp;gt;10GB on Windows)&lt;br /&gt;
&lt;br /&gt;
=== Workaround firewall blocking git protocol ===&lt;br /&gt;
* Some firewall will be blocking the git protocol, a possible workaround is to configure Slicer disabling the option &amp;lt;code&amp;gt;Slicer_USE_GIT_PROTOCOL&amp;lt;/code&amp;gt;. Then http protocol will be used instead. Consider also reading https://github.com/commontk/CTK/issues/33&lt;br /&gt;
&lt;br /&gt;
=== Notes for advanced users ===&lt;br /&gt;
* By default, if CMake finds Java on your machine, it automatically builds Java CLIs. If you don't want any Java in your Slicer (or if you don't want to install Java on your Mac Os X), you can pass &amp;lt;code&amp;gt;-DCMAKE_DISABLE_FIND_PACKAGE_Java:BOOL=TRUE&amp;lt;/code&amp;gt; when configuring Slicer.&lt;br /&gt;
* Same applies for OpenSSL: &amp;lt;code&amp;gt;CMAKE_DISABLE_FIND_PACKAGE_OpenSSL:BOOL=TRUE&amp;lt;/code&amp;gt; can be passed when building Slicer for packaging.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/Modules&amp;diff=26640</id>
		<title>Documentation/4.1/Developers/Modules</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/Modules&amp;diff=26640"/>
		<updated>2012-06-05T19:52:13Z</updated>

		<summary type="html">&lt;p&gt;Matt.mccormick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Slicer 4 supports 3 types of modules. While the developer has to choose between one of the 3 types to implement its module, the end user won't notice a difference as they all share the look &amp;amp; feel. The choice for a given type of module is usually based on the type of inputs/parameters for a given module.&lt;br /&gt;
= Command Line Interface (CLI) =&lt;br /&gt;
CLIs are standalone executables with a limited input/output arguments complexity (simple argument types, no user interactions...). They are typically implemented using ITK.&lt;br /&gt;
The recommended way to write your own CLI is to copy an [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Modules/CLI/ existing module].&lt;br /&gt;
* Shared lib or executable&lt;br /&gt;
* GUI automatically generated&lt;br /&gt;
* Links:&lt;br /&gt;
** [[Slicer3:Execution_Model_Documentation|Slicer3 execution model]] (Slicer4 is very similar)&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/File:Slicer4_CLI.ppt CLI in Slicer4] (presentation of 2012 NAMIC AHM)&lt;br /&gt;
&lt;br /&gt;
= Loadable Modules =&lt;br /&gt;
Loadable modules are C++ plugins that are built against Slicer. They define custom GUIs for their specific behavior as they have full control over the application.&lt;br /&gt;
* C++ shared library&lt;br /&gt;
* Full control over the GUI (Qt) and Slicer internals (MRML, logics, display managers...)&lt;br /&gt;
* Optimized for heavy computations&lt;br /&gt;
* Links:&lt;br /&gt;
**[http://www.na-mic.org/Wiki/index.php/File:LoadableModules.pptx Loadable modules] (presentation of 2012 NAMIC AHM)&lt;br /&gt;
**[[Documentation/4.0/Developers/Tutorials/ModuleWriting|How to write a loadable module]]&lt;br /&gt;
&lt;br /&gt;
= Scripted Modules =&lt;br /&gt;
Scripted modules are written in Python and typically but not necessarily use the high level API of Slicer and toolkits.   &lt;br /&gt;
* Python Console&lt;br /&gt;
* Full access to the API: VTK, ITK, MRML, Qt and Slicer are fully wrapped&lt;br /&gt;
* Recommended for fast prototyping&lt;br /&gt;
* Links:&lt;br /&gt;
** [http://www.slicer.org/slicerWiki/index.php/Documentation/4.0/Developers/Python_scripting|Python Scripting]&lt;br /&gt;
** See the [[4.0/Training#Slicer4_Programming_Tutorial|Python Scripting Tutorial]]&lt;br /&gt;
&lt;br /&gt;
=Module Factory=&lt;br /&gt;
Loading modules into slicer happens in multiple steps:&lt;br /&gt;
*module factories must be registered into the factory manager&lt;br /&gt;
* directories where the modules to load are located must be passed to the factory manager&lt;br /&gt;
* Optionally specify module names to ignore&lt;br /&gt;
* scan the directories and test which file is a module and register it (not instantiated yet) &lt;br /&gt;
* Instantiate all the register modules&lt;br /&gt;
* Connect each module with the scene and the application&lt;br /&gt;
More details can be found in the [http://slicer.org/doc/html/classqSlicerAbstractModuleFactoryManager.html online doc]&lt;br /&gt;
&lt;br /&gt;
==ToDo==&lt;br /&gt;
* Transform all core modules into Loadable modules.&lt;br /&gt;
** the factory manager only support file based modules, core modules are not file based (linked into the core factory itself)&lt;br /&gt;
* Move factory registration in qSlicerApplication (or a general application library) to support module discovery/loading without needing to instantiate Slicer.&lt;br /&gt;
** Currently can't be moved into qSlicerApplication as the CLI factories that are in QTCLI depend on QTGUI&lt;br /&gt;
** QtTesting is also limited with the QTCLI dependency on QtGUI (-&amp;gt;qSlicerApplication would need to access QtTesting code from QtCli)&lt;br /&gt;
** Proposed architecture&lt;br /&gt;
 Base&lt;br /&gt;
   Application -&amp;gt; classes that are useful to build an application (mix of qSlicerCoreApplication, qSlicerApplication, Main.cxx...)&lt;br /&gt;
   Core -&amp;gt; formally QtCore&lt;br /&gt;
   Modules -&amp;gt; contains the factories and module specific code&lt;br /&gt;
      Loadable&lt;br /&gt;
      CLI&lt;br /&gt;
      Scripted&lt;br /&gt;
   Scripted -&amp;gt; all that is python specific&lt;br /&gt;
      Cxx&lt;br /&gt;
      Python&lt;br /&gt;
   Widgets -&amp;gt; formally QtGUI&lt;br /&gt;
* Add category hierarchy in the Settings module panel&lt;br /&gt;
* Register factory settings/command-options(e.g. disable-loadable-modules) when registering module factories&lt;br /&gt;
** To have the settings panel be generic but have the code proper of each registered factory somewhere else&lt;br /&gt;
* Add mechanism for modules to register dialogs (toolbars that open dialogs),  e.g. the sceneview module needs to register the sceneView dialog into an icon.&lt;br /&gt;
* Ignore modules from the launcher command line.&lt;/div&gt;</summary>
		<author><name>Matt.mccormick</name></author>
		
	</entry>
</feed>