Пример #1
0
    def updateGlyph(self, item):
        self.vtk_widget.interactor.Disable()
        axes = item.itemData[4]
        if axes is not None:
            if item.isSource():
                newColorX = colors.GetColor3d('darkslategray')
                newColorY = colors.GetColor3d('darkslategray')
                newColorZ = colors.GetColor3d('darkslategray')
            elif item.isDest():
                newColorX = colors.GetColor3d('lightslategray')
                newColorY = colors.GetColor3d('lightslategray')
                newColorZ = colors.GetColor3d('lightslategray')
            else:
                newColorX = vtk.vtkColor3d(1.0, 0.0, 0.0)
                newColorY = vtk.vtkColor3d(0.0, 1.0, 0.0)
                newColorZ = vtk.vtkColor3d(0.0, 0.0, 1.0)

            axes.GetXAxisShaftProperty().SetColor(newColorX)
            axes.GetYAxisShaftProperty().SetColor(newColorY)
            axes.GetZAxisShaftProperty().SetColor(newColorZ)
            axes.GetXAxisTipProperty().SetColor(newColorX)
            axes.GetYAxisTipProperty().SetColor(newColorY)
            axes.GetZAxisTipProperty().SetColor(newColorZ)

            self.vtk_widget.interactor.Enable()
            self.vtk_widget.render_window.Render()
Пример #2
0
    def loadSurface(self, fileName, index=0):
        reader = vtk.vtkXMLPolyDataReader()
        reader.SetFileName(fileName)
        reader.Update()

        # Take the largest connected component
        connectFilter = vtk.vtkPolyDataConnectivityFilter()
        connectFilter.SetInputConnection(reader.GetOutputPort())
        connectFilter.SetExtractionModeToLargestRegion()
        connectFilter.Update()

        normals = vtk.vtkPolyDataNormals()
        normals.SetInputConnection(connectFilter.GetOutputPort())

        # 3D viewer

        # Mapper
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(normals.GetOutputPort())

        # Actor for vessels
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        prop = actor.GetProperty()

        if index == 0:
            # Veins
            prop.SetColor(vtk.vtkColor3d(hexCol("#517487")))  # 25% lighter
        else:
            # Liver
            prop.SetColor(vtk.vtkColor3d(hexCol("#873927")))

        self.vessels = actor

        # Assign actor to the renderer
        prop.SetOpacity(0.35)
        self.viewer3D.planeWidgets[0].GetDefaultRenderer().AddActor(actor)

        # 2D Views
        polyData = normals.GetOutput()

        self.appendFilter.AddInputData(polyData)
        self.appendFilter.Update()

        # TODO: Make this work if read before US
        for i in range(self.stackCT.count()):
            self.stackCT.widget(i).InitializeContours(self.appendFilter,
                                                      color=pink)

        for i in range(len(self.viewUS)):
            self.viewUS[i].InitializeContours(self.appendFilter)
            # TODO: Assign instead product of two identity matrices
            self.viewUS[i].SetTransform(self.alignment)

        if self.vessels is not None:
            self.vessels.SetUserTransform(self.misAlignment)

        self.Render()
Пример #3
0
    def loadSurface(self, fileName):
        reader = vtk.vtkXMLPolyDataReader()
        reader.SetFileName(fileName)
        reader.Update()

        # Take the largest connected component
        connectFilter = vtk.vtkPolyDataConnectivityFilter()
        connectFilter.SetInputConnection(reader.GetOutputPort())
        connectFilter.SetExtractionModeToLargestRegion()
        connectFilter.Update()

        self.vesselPolyData = connectFilter.GetOutput()

        # Compute normals
        self.vesselNormals = vtk.vtkPolyDataNormals()
        self.vesselNormals.SetInputData(self.vesselPolyData)

        # Mapper
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(self.vesselNormals.GetOutputPort())

        # Actor for vessels
        self.vessels = vtk.vtkActor()
        self.vessels.SetMapper(mapper)
        prop = self.vessels.GetProperty()
        prop.SetColor(vtk.vtkColor3d(hexCol("#517487")))  # 25% lighter

        # Assign actor to the renderer
        prop.SetOpacity(0.35)
        self.planeWidget[0].GetDefaultRenderer().AddActor(self.vessels)

        for i in range(3):
            self.vtk_widgets[i].InitializeContour(self.vesselNormals)
        self.Render()
Пример #4
0
def loadSurface(fname):
    reader = vtk.vtkXMLPolyDataReader()
    reader.SetFileName(fileName)
    reader.Update()

    # Take the largest connected component
    connectFilter = vtk.vtkPolyDataConnectivityFilter()
    connectFilter.SetInputConnection(reader.GetOutputPort())
    connectFilter.SetExtractionModeToLargestRegion()
    connectFilter.Update()

    normals = vtk.vtkPolyDataNormals()
    normals.SetInputConnection(connectFilter.GetOutputPort())
    normals.Update()

    pd = normals.GetOutput()
    com = vtk.vtkCenterOfMass()
    com.SetInputData(pd)
    com.SetUseScalarsAsWeights(False)
    com.Update()
    center = com.GetCenter()

    # Mapper
    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputConnection(normals.GetOutputPort())

    actor = vtk.vtkActor()
    actor.SetMapper(mapper)
    prop = actor.GetProperty()
    prop.SetColor(vtk.vtkColor3d(hexCol("#873927")))

    # Assign actor to the renderer
    prop.SetOpacity(0.35)
    return actor, center
Пример #5
0
    def initVessels(self):
        qDebug('initVessels()')
        if os.name == 'nt':
            filename = os.path.join(filedir,
                                    '../../data/Abdomen/Connected.vtp')
            if IOUSFAN:
                #filename = 'e:/analogic/TrialVTK/data/VesselMeshData.vtk'
                filename = 'e:/analogic/TrialVTK/data/LiverVesselMeshData.vtk'
        else:
            filename = '/home/jmh/bkmedical/data/CT/Connected.vtp'

        # read data
        if IOUSFAN:
            reader = vtk.vtkGenericDataObjectReader()
        else:
            reader = vtk.vtkXMLPolyDataReader()
        reader.SetFileName(filename)
        reader.Update()

        connectFilter = vtk.vtkPolyDataConnectivityFilter()
        connectFilter.SetInputConnection(reader.GetOutputPort())
        connectFilter.SetExtractionModeToLargestRegion()
        connectFilter.Update()

        self.vesselPolyData = self.scale(connectFilter.GetOutput())

        # compute normals
        self.vesselNormals = vtk.vtkPolyDataNormals()
        self.vesselNormals.SetInputData(self.vesselPolyData)

        # mapper
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(self.vesselNormals.GetOutputPort())

        # actor for vessels
        self.vessels = vtk.vtkActor()
        self.vessels.SetMapper(mapper)
        prop = self.vessels.GetProperty()

        if self.brighter25:
            prop.SetColor(vtk.vtkColor3d(hexCol("#517487")))  # 25% lighter
        else:
            prop.SetColor(vtk.vtkColor3d(hexCol("#415d6c")))
        # assign actor to the renderer
        self.renderer.AddActor(self.vessels)
Пример #6
0
    def initLiver(self):
        qDebug('initLiver()')
        if os.name == 'nt':
            filename = os.path.join(
                filedir, '../../data/Abdomen/Liver_3D-interpolation.vtp')
            if IOUSFAN:
                filename = 'e:/analogic/TrialVTK/data/segmented_liver_ITK_snap.vtk'
        else:
            filename = '/home/jmh/bkmedical/data/CT/Liver_3D-interpolation.vtp'
        if IOUSFAN:
            reader = vtk.vtkGenericDataObjectReader()
        else:
            reader = vtk.vtkXMLPolyDataReader()

        reader.SetFileName(filename)
        reader.Update()

        connectFilter = vtk.vtkPolyDataConnectivityFilter()
        connectFilter.SetInputConnection(reader.GetOutputPort())
        connectFilter.SetExtractionModeToLargestRegion()
        connectFilter.Update()

        surfNormals = vtk.vtkPolyDataNormals()
        surfNormals.SetInputData(self.scale(connectFilter.GetOutput()))

        #Create a mapper and actor
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(surfNormals.GetOutputPort())  # was reader
        self.liver = vtk.vtkActor()
        self.liver.SetMapper(mapper)
        prop = self.liver.GetProperty()

        if self.brighter25:
            prop.SetColor(vtk.vtkColor3d(hexCol("#873927")))
        else:
            prop.SetColor(vtk.vtkColor3d(hexCol("#6c2e1f")))
        prop.SetOpacity(self.opacity)
        self.renderer.AddActor(self.liver)
Пример #7
0
    def loadSurface(self, fileName, contours=True):
        reader = vtk.vtkXMLPolyDataReader()
        reader.SetFileName(fileName)
        reader.Update()

        # Take the largest connected component
        connectFilter = vtk.vtkPolyDataConnectivityFilter()
        connectFilter.SetInputConnection(reader.GetOutputPort())
        connectFilter.SetExtractionModeToLargestRegion()
        connectFilter.Update()

        vesselPolyData = connectFilter.GetOutput()

        self.appendFilter.AddInputData(vesselPolyData)
        self.appendFilter.Update()

        # Disable interactor, remove actors, normals, initialize contours,

        # Compute normals
        self.vesselNormals = vtk.vtkPolyDataNormals()
        self.vesselNormals.SetInputData(vesselPolyData)

        # Mapper
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(self.vesselNormals.GetOutputPort())

        # Actor for vessels
        self.vessels = vtk.vtkActor()
        self.vessels.SetMapper(mapper)
        prop = self.vessels.GetProperty()
        prop.SetColor(vtk.vtkColor3d(hexCol("#517487")))  # 25% lighter

        # Assign actor to the renderer
        prop.SetOpacity(0.35)
        self.viewer3D.planeWidgets[0].GetDefaultRenderer().AddActor(
            self.vessels)

        # TODO: Make this work if read before US
        if contours:
            for i in range(self.stackCT.count()):
                self.stackCT.widget(i).InitializeContour(self.vesselNormals,
                                                         color=red)
            for i in range(len(self.viewUS)):
                self.viewUS[i].InitializeContour(self.vesselNormals)
        self.Render()
Пример #8
0
readerLiver.SetFileName(fileLiver)
readerLiver.Update()

surfNormals = vtk.vtkPolyDataNormals()
surfNormals.SetInputConnection(readerLiver.GetOutputPort())

#Create a mapper and actor
mapperLiver = vtk.vtkPolyDataMapper()
mapperLiver.SetInputConnection(surfNormals.GetOutputPort())  # was readerLiver
actorLiver = vtk.vtkActor()
actorLiver.SetMapper(mapperLiver)
prop = actorLiver.GetProperty()
#prop.SetColor(colors.GetColor3d("Purple"))

#prop.SetColor(vtk.vtkColor3d(hexCol("#6c2e1f")))
prop.SetColor(vtk.vtkColor3d(hexCol("#873927")))  # (25% lighter)
prop.SetOpacity(0.25)

# read data
reader = vtk.vtkXMLPolyDataReader()
reader.SetFileName(filename)
reader.Update()

vesselPolyData = reader.GetOutput()

# compute normals
vesselNormals = vtk.vtkPolyDataNormals()
vesselNormals.SetInputConnection(reader.GetOutputPort())

# mapper
mapper = vtk.vtkPolyDataMapper()