本文整理汇总了Python中EditUtil.EditUtil类的典型用法代码示例。如果您正苦于以下问题:Python EditUtil类的具体用法?Python EditUtil怎么用?Python EditUtil使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了EditUtil类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: deleteSelectedStructure
def deleteSelectedStructure(self, confirm=True):
"""delete the currently selected structure"""
merge = self.merge
if not merge:
return
selectionModel = self.structuresView.selectionModel()
selected = selectionModel.currentIndex().row()
if selected >= 0:
structureName = self.structures.item(selected,2).text()
labelNode = slicer.util.getNode(self.structures.item(selected,3).text())
if confirm:
if not slicer.util.confirmOkCancelDisplay("Delete \'%s\' volume?" % structureName, windowTitle='Editor'):
return
slicer.mrmlScene.SaveStateForUndo()
slicer.mrmlScene.RemoveNode( labelNode )
self.updateStructures()
if self.structures.rowCount() > 0:
self.selectStructure((selected-1) if (selected-1 >= 0) else 0)
else:
EditUtil.setActiveVolumes(self.master, merge)
self.edit(0)
示例2: changeLabel
def changeLabel(self):
#
# change the label values based on the parameter node
#
if not self.sliceLogic:
self.sliceLogic = EditUtil.getSliceLogic()
parameterNode = EditUtil.getParameterNode()
parameterNode = EditUtil.getParameterNode()
inputColor = int(parameterNode.GetParameter("ChangeLabelEffect,inputColor"))
outputColor = int(parameterNode.GetParameter("ChangeLabelEffect,outputColor"))
change = slicer.vtkImageLabelChange()
if vtk.VTK_MAJOR_VERSION <= 5:
change.SetInput( self.getScopedLabelInput() )
else:
change.SetInputData( self.getScopedLabelInput() )
change.SetOutput( self.getScopedLabelOutput() )
change.SetInputLabel( inputColor )
change.SetOutputLabel( outputColor )
# TODO
#$this setProgressFilter $change "Change Label"
change.Update()
self.applyScopedLabel()
change.SetOutput( None )
示例3: export
def export(self):
"""create a DICOM Segmentation Object from the current labels
and put it in the slicer dicom database"""
if not hasattr(slicer.modules, "encodeseg"):
# TODO: change this message when EncodeSEG is in the trunk
qt.QMessageBox.critical(
slicer.util.mainWindow(),
"DICOM",
"The Reporting extension must be installed in order to export segmentation objects",
)
return
if not self.master.GetAttribute("DICOM.instanceUIDs"):
qt.QMessageBox.critical(slicer.util.mainWindow(), "DICOM", "Master volume must have DICOM context")
return
rows = self.structures.rowCount()
if rows == 0:
self.split()
rows = self.structures.rowCount()
if rows == 0:
logging.info("Cannot export empty segmentation") # TODO: should you be able to?
return
EditUtil.exportAsDICOMSEG(self.master)
logging.info("Segmentations exported to DICOM Database")
示例4: paintPixel
def paintPixel(self, x, y):
"""
paint with a single pixel (in label space)
"""
sliceLogic = self.sliceWidget.sliceLogic()
labelLogic = sliceLogic.GetLabelLayer()
labelNode = labelLogic.GetVolumeNode()
labelImage = labelNode.GetImageData()
if not labelNode:
# if there's no label, we can't paint
return
xyToIJK = labelLogic.GetXYToIJKTransform()
ijkFloat = xyToIJK.TransformDoublePoint( (x, y, 0) )
ijk = []
for e in ijkFloat:
try:
index = int(round(e))
except ValueError:
return
ijk.append(index)
dims = labelImage.GetDimensions()
for e,d in zip(ijk,dims): # clamp to volume extent
if e < 0 or e >= d:
return
parameterNode = EditUtil.getParameterNode()
paintLabel = int(parameterNode.GetParameter("label"))
labelImage.SetScalarComponentFromFloat(ijk[0],ijk[1],ijk[2],0, paintLabel)
EditUtil.markVolumeNodeAsModified(labelNode)
示例5: _onParameterNodeModified
def _onParameterNodeModified(self, caller, event=-1):
self._onEffectChanged(caller.GetParameter("effect"))
EditUtil.setEraseEffectEnabled(EditUtil.isEraseEffectEnabled())
self.actions["EraseLabel"].checked = EditUtil.isEraseEffectEnabled()
effectName = EditUtil.getCurrentEffect()
if effectName not in self.actions:
print('Warning: effect %s not a valid action' % effectName)
return
self.actions[effectName].checked = True
示例6: split
def split(self):
"""split the merge volume into individual structures"""
self.statusText( "Splitting..." )
if self.merge:
EditUtil.splitPerStructureVolumes(self.master, self.merge)
self.updateStructures()
else:
logging.info("No merged label map, cannot split")
self.statusText( "Finished splitting." )
示例7: edit
def edit(self,label):
"""select the picked label for editing"""
merge = self.merge
if not merge:
return
colorNode = merge.GetDisplayNode().GetColorNode()
structureName = colorNode.GetColorName( label )
structureVolume = self.structureVolume( structureName )
EditUtil.setActiveVolumes(self.master, structureVolume)
EditUtil.setLabel(label)
示例8: updateGUIFromMRML
def updateGUIFromMRML(self,caller,event):
if self.parameterNode.GetParameter(self.parameter) == '':
# parameter does not exist - probably initializing
return
label = int(self.parameterNode.GetParameter(self.parameter))
self.colorNode = EditUtil.getColorNode()
if self.colorNode:
self.frame.setDisabled(0)
self.labelName.setText( self.colorNode.GetColorName( label ) )
lut = self.colorNode.GetLookupTable()
rgb = lut.GetTableValue( label )
self.colorPatch.setStyleSheet(
"background-color: rgb(%s,%s,%s)" % (rgb[0]*255, rgb[1]*255, rgb[2]*255) )
self.colorSpin.setMaximum( self.colorNode.GetNumberOfColors()-1 )
else:
self.frame.setDisabled(1)
try:
self.colorSpin.setValue(label)
except ValueError:
# TODO: why does the python class still exist if the widget is destroyed?
# - this only happens when reloading the module. The owner of the
# instance is gone and the widgets are gone, but this instance still
# has observer on the parameter node - this indicates memory leaks
# that need to be fixed
self.cleanup()
return
示例9: onApply
def onApply(self):
logic = WatershedFromMarkerEffectLogic( EditUtil.getSliceLogic() )
logic.undoRedo = self.undoRedo
logic.sigma = float( self.sigmaSpinBox.value )
logic.doit()
示例10: __init__
def __init__(self, sliceWidget):
super(PaintEffectTool,self).__init__(sliceWidget)
# create a logic instance to do the non-gui work
self.logic = PaintEffectLogic(self.sliceWidget.sliceLogic())
# configuration variables
self.delayedPaint = True
self.parameterNode = EditUtil.getParameterNode()
self.sphere = not (0 == int(self.parameterNode.GetParameter("PaintEffect,sphere")))
self.smudge = not (0 == int(self.parameterNode.GetParameter("PaintEffect,smudge")))
self.pixelMode = not (0 == int(self.parameterNode.GetParameter("PaintEffect,pixelMode")))
self.radius = float(self.parameterNode.GetParameter("PaintEffect,radius"))
# interaction state variables
self.position = [0, 0, 0]
self.paintCoordinates = []
self.feedbackActors = []
self.lastRadius = 0
# scratch variables
self.rasToXY = vtk.vtkMatrix4x4()
# initialization
self.brush = vtk.vtkPolyData()
self.createGlyph(self.brush)
self.mapper = vtk.vtkPolyDataMapper2D()
self.actor = vtk.vtkActor2D()
self.mapper.SetInputData(self.brush)
self.actor.SetMapper(self.mapper)
self.actor.VisibilityOff()
self.renderer.AddActor2D(self.actor)
self.actors.append(self.actor)
self.processEvent()
示例11: showColorBox
def showColorBox(self):
self.colorNode = EditUtil.getColorNode()
if not self.colorBox:
self.colorBox = ColorBox.ColorBox(parameterNode=self.parameterNode, parameter=self.parameter, colorNode=self.colorNode)
self.colorBox.show(parameterNode=self.parameterNode, parameter=self.parameter, colorNode=self.colorNode)
示例12: updateParameterNode
def updateParameterNode(self, caller, event):
node = EditUtil.getParameterNode()
if node != self.parameterNode:
if self.parameterNode:
node.RemoveObserver(self.parameterNodeTag)
self.parameterNode = node
self.parameterNodeTag = node.AddObserver(vtk.vtkCommand.ModifiedEvent, self.updateGUIFromMRML)
示例13: create
def create(self):
self.frame = qt.QFrame(self.parent)
self.frame.objectName = 'EditColorFrame'
self.frame.setLayout(qt.QHBoxLayout())
self.parent.layout().addWidget(self.frame)
self.label = qt.QLabel(self.frame)
self.label.setText("Label: ")
self.frame.layout().addWidget(self.label)
self.labelName = qt.QLabel(self.frame)
self.labelName.setText("")
self.frame.layout().addWidget(self.labelName)
self.colorSpin = qt.QSpinBox(self.frame)
self.colorSpin.objectName = 'ColorSpinBox'
self.colorSpin.setMaximum( 64000)
self.colorSpin.setValue( EditUtil.getLabel() )
self.colorSpin.setToolTip( "Click colored patch at right to bring up color selection pop up window. Use the 'c' key to bring up color popup menu." )
self.frame.layout().addWidget(self.colorSpin)
self.colorPatch = qt.QPushButton(self.frame)
self.colorPatch.setObjectName('ColorPatchButton')
self.frame.layout().addWidget(self.colorPatch)
self.updateParameterNode(slicer.mrmlScene, vtk.vtkCommand.ModifiedEvent)
self.updateGUIFromMRML(self.parameterNode, vtk.vtkCommand.ModifiedEvent)
self.frame.connect( 'destroyed()', self.cleanup)
self.colorSpin.connect( 'valueChanged(int)', self.updateMRMLFromGUI)
self.colorPatch.connect( 'clicked()', self.showColorBox )
# TODO: change this to look for specfic events (added, removed...)
# but this requires being able to access events by number from wrapped code
self.addObserver(slicer.mrmlScene, vtk.vtkCommand.ModifiedEvent, self.updateParameterNode)
示例14: split
def split(self):
"""split the merge volume into individual structures"""
self.statusText( "Splitting..." )
merge = self.merge
if not merge:
return
colorNode = merge.GetDisplayNode().GetColorNode()
accum = vtk.vtkImageAccumulate()
if vtk.VTK_MAJOR_VERSION <= 5:
accum.SetInput(merge.GetImageData())
else:
accum.SetInputConnection(merge.GetImageDataConnection())
accum.Update()
lo = int(accum.GetMin()[0])
hi = int(accum.GetMax()[0])
# TODO: pending resolution of bug 1822, run the thresholding
# in single threaded mode to avoid data corruption observed on mac release
# builds
thresholder = vtk.vtkImageThreshold()
thresholder.SetNumberOfThreads(1)
for i in xrange(lo,hi+1):
self.statusText( "Splitting label %d..."%i )
if vtk.VTK_MAJOR_VERSION <= 5:
thresholder.SetInput( merge.GetImageData() )
else:
thresholder.SetInputConnection( merge.GetImageDataConnection() )
thresholder.SetInValue( i )
thresholder.SetOutValue( 0 )
thresholder.ReplaceInOn()
thresholder.ReplaceOutOn()
thresholder.ThresholdBetween( i, i )
thresholder.SetOutputScalarType( merge.GetImageData().GetScalarType() )
thresholder.Update()
if thresholder.GetOutput().GetScalarRange() != (0.0, 0.0):
labelName = colorNode.GetColorName(i)
self.statusText( "Creating structure volume %s..."%labelName )
structureVolume = self.structureVolume( labelName )
if not structureVolume:
self.addStructure( i, "noEdit" )
structureVolume = self.structureVolume( labelName )
structureVolume.GetImageData().DeepCopy( thresholder.GetOutput() )
EditUtil.markVolumeNodeAsModified(structureVolume)
self.statusText( "Finished splitting." )
示例15: processEvent
def processEvent(self, caller=None, event=None):
"""
handle events from the render window interactor
"""
if super(PaintEffectTool,self).processEvent(caller,event):
return
# interactor events
if event == "LeftButtonPressEvent":
self.actionState = "painting"
if not self.pixelMode:
self.cursorOff()
xy = self.interactor.GetEventPosition()
if self.smudge:
EditUtil.setLabel(self.getLabelPixel(xy))
self.paintAddPoint(xy[0], xy[1])
self.abortEvent(event)
elif event == "LeftButtonReleaseEvent":
self.paintApply()
self.actionState = None
self.cursorOn()
elif event == "MouseMoveEvent":
self.actor.VisibilityOn()
if self.actionState == "painting":
xy = self.interactor.GetEventPosition()
self.paintAddPoint(xy[0], xy[1])
self.abortEvent(event)
elif event == "EnterEvent":
self.actor.VisibilityOn()
elif event == "LeaveEvent":
self.actor.VisibilityOff()
elif event == "KeyPressEvent":
key = self.interactor.GetKeySym()
if key == 'plus' or key == 'equal':
self.scaleRadius(1.2)
if key == 'minus' or key == 'underscore':
self.scaleRadius(0.8)
else:
pass
# events from the slice node
if caller and caller.IsA('vtkMRMLSliceNode'):
if hasattr(self,'brush'):
self.createGlyph(self.brush)
self.positionActors()