Difference between revisions of "Documentation/Nightly/ScriptRepository"

From Slicer Wiki
Jump to: navigation, search
(Moved page to readthedocs)
Tags: 2017 source edit, Replaced
 
(341 intermediate revisions by 14 users not shown)
Line 1: Line 1:
 
<noinclude>{{documentation/versioncheck}}</noinclude>
 
<noinclude>{{documentation/versioncheck}}</noinclude>
__TOC__
 
  
 
+
{{documentation/banner
=Community-contributed modules=
+
| text  = [https://slicer.readthedocs.io/en/latest/developer_guide/script_repository.html This page has been moved to read-the-docs.]
 
+
| background-color = 8FBC8F }}
Usage: save the .py file to a directory, add the directory to the additional module paths in the Slicer application settings (choose in the menu: Edit / Application settings, click Modules, click >> next to Additional module paths, click Add, and choose the .py file's location).
 
 
 
==Segmentation==
 
* [https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/sandbox/FillRoiModule/FillRoi.py FillRoi.py]: Fill a region of interest in a labelmap volume with a constant value. This can be used after an automatic segmentation for removing certain regions of a volume.
 
 
 
==Filters==
 
* [https://raw.github.com/pieper/VolumeMasker/master/VolumeMasker.py VolumeMasker.py]: Update a target volume with the results of setting all input volume voxels to 0 except for those that correspond to a selected label value in an input label map (Used for example in the volume rendering in [https://www.youtube.com/watch?v=dfu2gugHLHs this video).
 
 
 
==DICOM==
 
* [https://gist.github.com/pieper/6186477 dicom header browser] to easily scroll through dicom files using dcmdump.
 
 
 
==Informatics==
 
* [https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/sandbox/MarkupsInfoModule/MarkupsInfo.py MarkupsInfo.py]: Compute the total length between all the points of a markup list.
 
* [https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/sandbox/LineProfile/LineProfile.py LineProfile.py]: Compute intensity profile in a volume along a line.
 
 
 
=Community-contributed examples=
 
 
 
Usage: Copy-paste the shown code lines or linked .py file contents into Python console in Slicer.
 
 
 
==Capture==
 
* Get a MRML node in the scene based on the node name and call methods of that object. For the MRHead sample data:
 
  vol=slicer.util.getNode('MR*')
 
  vol.GetImageData().GetDimensions()
 
* Capture the full Slicer screen and save it into a file
 
  img = qt.QPixmap.grabWidget(slicer.util.mainWindow()).toImage()
 
  img.save('c:/tmp/test.png')
 
* [https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/sandbox/CaptureRotationVideo/CaptureRotationVideo.py CaptureRotationVideo.py]: Capture a video of the scene rotating in the 3D view
 
 
 
==Launching Slicer==
 
* How to open an .mrb file with Slicer at the command line?
 
  Slicer.exe --python-code "slicer.util.loadScene( 'f:/2013-08-23-Scene.mrb' )"
 
* How to run a script in the Slicer environment in batch mode (without showing any graphical user interface)?
 
  Slicer.exe --python-code "doSomething; doSomethingElse; etc." --testing --no-splash --no-main-window
 
 
 
==DICOM==
 
* How to access tags of DICOM images imported into Slicer? For example, to print the first patient's first study's first series' "0020,0032" field:
 
  db=slicer.dicomDatabase
 
  patientList=db.patients()
 
  studyList=db.studiesForPatient(patientList[0])
 
  seriesList=db.seriesForStudy(studyList[0])
 
  fileList=db.filesForSeries(seriesList[0])
 
  print db.fileValue(fileList[0],'0020,0032')
 
 
 
==Toolbar functions==
 
* How to turn on slice intersections in the crosshair menu on the toolbar:
 
  viewNodes = slicer.mrmlScene.GetNodesByClass('vtkMRMLSliceCompositeNode')
 
  viewNodes.UnRegister(slicer.mrmlScene)
 
  viewNodes.InitTraversal()
 
  viewNode = viewNodes.GetNextItemAsObject()
 
  while viewNode:
 
    viewNode.SetSliceIntersectionVisibility(1)
 
    viewNode = viewNodes.GetNextItemAsObject()
 
 
 
How to find similar functions? For this one I searched for "slice intersections" text in the whole slicer source code, found that the function is implemented in Base\QTGUI\qSlicerViewersToolBar.cxx, then translated the qSlicerViewersToolBarPrivate::setSliceIntersectionVisible(bool visible) method to Python.
 
 
 
==Manipulating objects in the slice viewer==
 
* How to define/edit a circular region of interest in a slice viewer?
 
 
 
Drop two markup points on a slice view and copy-paste the code below into the Python console. After this, as you move the markups you’ll see a circle following the markups.
 
 
 
  # Update the sphere from the fiducial points
 
  def UpdateSphere(param1, param2): 
 
    centerPointCoord = [0.0, 0.0, 0.0]
 
    markups.GetNthFiducialPosition(0,centerPointCoord)
 
    circumferencePointCoord = [0.0, 0.0, 0.0]
 
    markups.GetNthFiducialPosition(1,circumferencePointCoord)
 
    sphere.SetCenter(centerPointCoord)
 
    radius=math.sqrt((centerPointCoord[0]-circumferencePointCoord[0])**2+(centerPointCoord[1]-circumferencePointCoord[1])**2+(centerPointCoord[2]-circumferencePointCoord[2])**2)
 
    sphere.SetRadius(radius)
 
    sphere.SetPhiResolution(30)
 
    sphere.SetThetaResolution(30)
 
    sphere.Update()
 
 
 
  # Get a reference to the markup
 
  markups=slicer.util.getNode('F')
 
  # Create the sphere that will intersect the slice viewer
 
  sphere = vtk.vtkSphereSource()
 
  # Initial positioning of the sphere
 
  UpdateSphere(0,0)
 
  # Create model node and add to scene
 
  model = slicer.vtkMRMLModelNode()
 
  model.SetAndObservePolyData(sphere.GetOutput())
 
  modelDisplay = slicer.vtkMRMLModelDisplayNode()
 
  modelDisplay.SetSliceIntersectionVisibility(True) # Show in slice view
 
  modelDisplay.SetVisibility(False) # Hide in 3D view
 
  slicer.mrmlScene.AddNode(modelDisplay)
 
  model.SetAndObserveDisplayNodeID(modelDisplay.GetID())
 
  modelDisplay.SetInputPolyData(model.GetPolyData())
 
  slicer.mrmlScene.AddNode(model)
 
  # Call UpdateSphere whenever the fiducials are changed
 
  markups.AddObserver("ModifiedEvent", UpdateSphere, 2)
 

Latest revision as of 04:06, 24 April 2021

Home < Documentation < Nightly < ScriptRepository