예제 #1
0
 def __init__(self):
     floor_mapper = vtk.vtkPolyDataMapper()
     floor_mapper.SetInputData(vtk.vtkPolyData())
     self.floor_actor = vtk.vtkActor()
     self.floor_actor.SetMapper(floor_mapper)
     car_mapper = vtk.vtkPolyDataMapper()
     car_mapper.SetInputData(vtk.vtkPolyData())
     self.car_actor = vtk.vtkActor()
     self.car_actor.SetMapper(car_mapper)
예제 #2
0
    def __init__(self, renderer):
        # Renderer variable is needed to add the cone actor
        self.__renderer = renderer

        self.__cone = vtkConeSource()
        self.__cone_mapper = vtkPolyDataMapper()
        self.__cone_actor = vtkActor()
예제 #3
0
    def __init__(self, renderer):
        # Renderer variable is needed to add the actor
        self.__renderer = renderer

        self.__reader = vtkSLCReader()
        self.__extract_voi = vtkExtractVOI()

        self.__contour_filter = vtkContourFilter()
        self.__mapper = vtkPolyDataMapper()
        self.__property = vtkProperty()
        self.__actor = vtkActor()

        self.__outline_filter = vtkOutlineFilter()
        self.__outline_mapper = vtkPolyDataMapper()
        self.__outline_property = vtkProperty()
        self.__outline_actor = vtkActor()
예제 #4
0
 def __init__(self, renderer):
     self.__renderer = renderer
     self.__reader = vtkPolyDataReader()
     self.__mapper = vtkPolyDataMapper()
     self.__actor = vtkActor()
     self.__property = vtkProperty()
     self.__geometry_filter = vtkGeometryFilter()
예제 #5
0
def __skin_renderer(renderer):
        __reader = vtkVolume16Reader()
        __reader.SetDataDimensions(64, 64)
        __reader.SetImageRange(1, 93)
        __reader.SetDataByteOrderToLittleEndian()
        __reader.SetFilePrefix("objfiles/headsq/quarter")
        __reader.SetDataSpacing(3.2, 3.2, 1.5)

        __contourfilter = vtkContourFilter()
        __contourfilter.SetInputConnection(__reader.GetOutputPort())
        #__contourfilter.SetValue(0, 1150)
        __contourfilter.SetValue(1, 500)

        __mapper = vtkPolyDataMapper()
        __mapper.SetInputConnection(__contourfilter.GetOutputPort())
        __mapper.ScalarVisibilityOff()

        __prop = vtkProperty()
        __prop.SetDiffuseColor(1, 0.8, 0.4)
        __prop.SetDiffuse(1)
        __prop.SetOpacity(0.2)

        __actor = vtkActor()
        __actor.SetMapper(__mapper)
        __actor.SetProperty(__prop)

        renderer.AddActor(__actor)
예제 #6
0
 def __init__(self, renderer):
     self.__renderer = renderer
     self.__mapper = vtkPolyDataMapper()
     self.__filter = vtkContourFilter()
     self.__reader = vtkStructuredGridReader()
     self.__actor = vtkActor()
     self.__property = vtkProperty()
예제 #7
0
 def __init__(self, max_num_pts=1e24):
     self.max_num_pts = max_num_pts
     self.pd = vtk.vtkPolyData()
     self.clear_points()
     mapper = vtk.vtkPolyDataMapper()
     self.actor = vtk.vtkActor()
     self.actor.SetMapper(mapper)
예제 #8
0
    def __init__(self, renderer):
        # Renderer variable is needed to add the actor
        self.__renderer = renderer

        self.__reader = vtkStructuredPointsReader()
        self.__property = vtkProperty()
        self.__geometry_filter = vtkGeometryFilter()
        self.__mapper = vtkPolyDataMapper()
        self.__actor = vtkActor()
예제 #9
0
    def __init__(self, windowrenderer):
        #Renderer
        self.__renderer = windowrenderer

        #vtk import variables
        self.__plane = vtkPlaneSource()
        self.__reader = vtkBMPReader()
        self.__texture = vtkTexture()
        self.__mapper = vtkPolyDataMapper()
        self.__actor = vtkActor()
예제 #10
0
 def __init__(self, color, width):
     self._color = color
     # LINE
     self._points = all.vtkPoints()
     self._lines = all.vtkCellArray()
     self._line = all.vtkLine()
     poly = all.vtkPolyData()
     poly.SetPoints(self._points)
     poly.SetLines(self._lines)
     mapper = all.vtkPolyDataMapper()
     mapper.SetInputData(poly)
     self.actor = all.vtkActor()
     self.actor.SetMapper(mapper)
     self.actor.GetProperty().SetLineWidth(width)
     self.actor.GetProperty().SetColor(color)
예제 #11
0
    def __init__(self):
        append_poly = vtk.vtkAppendPolyData()

        reader1 = vtk.vtkSTLReader()
        reader1.SetFileName(file1)
        reader1.Update()
        reader2 = vtk.vtkSTLReader()
        reader2.SetFileName(file2)
        reader2.Update()

        mapper1 = vtk.vtkPolyDataMapper()
        mapper1.SetInputData(vtk.vtkPolyData())
        mapper2 = vtk.vtkPolyDataMapper()
        mapper2.SetInputData(vtk.vtkPolyData())

        actor1 = vtk.vtkActor()
        actor1.SetMapper(mapper1)
        actor2 = vtk.vtkActor()
        actor2.SetMapper(mapper2)

        actor1.GetMapper().SetInputData(reader1.GetOutput())
        actor2.GetMapper().SetInputData(reader2.GetOutput())

        h_center = actor2.GetCenter()
        c_center = actor1.GetCenter()
        c_h = actor1.GetBounds()[2]
        x = h_center[0] - c_center[0]
        y = 0.07 - c_h
        z = h_center[2] - c_center[2]
        actor1.SetPosition(x, y, z)

        # append_poly.AddInputData(reader1.GetOutput())
        # append_poly.AddInputData(reader2.GetOutput())
        # reader1.FastDelete()
        # reader2.FastDelete()

        render = vtk.vtkRenderer()
        ren_win = vtk.vtkRenderWindow()
        ren_win.AddRenderer(render)
        ren_win.SetSize(2000, 2000)
        i_ren = vtk.vtkRenderWindowInteractor()
        i_ren.SetInteractorStyle(vtk.vtkInteractorStyleMultiTouchCamera())
        i_ren.SetRenderWindow(ren_win)
        actor_list = [actor1, actor2]

        for actor in actor_list:
            position = list(actor.GetPosition())
            actor.SetPosition(position[0], position[1], position[2])
            mapper = actor.GetMapper()
            poly = mapper.GetInput()
            if position != (0, 0, 0):
                points = poly.GetPoints()
                sum_pts = points.GetNumberOfPoints()
                for x in range(sum_pts):
                    pos_point = list(points.GetPoint(x))
                    for y in range(3):
                        pos_point[y] += position[y]
                        points.SetPoint(x, pos_point)
            append_poly.AddInputData(poly)
            append_poly.Update()

        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputData(append_poly.GetOutput())
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        render.AddActor(actor)
        ren_win.Render()

        i_ren.Start()
예제 #12
0
 def __init__(self, renderer):
     self.__renderer = renderer
     self.__cylinder = vtkCylinderSource()
     self.__cyl_mapper = vtkPolyDataMapper()
     self.__cyl_actor = vtkActor()
예제 #13
0
def utils_view_3D(path):
    class KeyPressInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
        def __init__(self, parent=None):
            self.parent = vtk.vtkRenderWindowInteractor()
            if (parent is not None):
                self.parent = parent

            self.AddObserver("KeyPressEvent", self.keyPress)

        def keyPress(self, obj, event):
            key = self.parent.GetKeySym()
            if key == 'Up':
                gradtfun.AddPoint(-100, 1.0)
                gradtfun.AddPoint(10, 1.0)
                gradtfun.AddPoint(20, 1.0)

                volumeProperty.SetGradientOpacity(gradtfun)
                # 下面这一行是关键,实现了actor的更新
                renWin.Render()
            if key == 'Down':
                tfun.AddPoint(1129, 0)
                tfun.AddPoint(1300.0, 0.1)
                tfun.AddPoint(1600.0, 0.2)
                tfun.AddPoint(2000.0, 0.1)
                tfun.AddPoint(2200.0, 0.1)
                tfun.AddPoint(2500.0, 0.1)
                tfun.AddPoint(2800.0, 0.1)
                tfun.AddPoint(3000.0, 0.1)
                # 下面这一行是关键,实现了actor的更新
                renWin.Render()

    def StartInteraction():
        renWin.SetDesiredUpdateRate(10)

    def EndInteraction():
        renWin.SetDesiredUpdateRate(0.001)

    def ClipVolumeRender(obj):
        obj.GetPlanes(planes)
        volumeMapper.SetClippingPlanes(planes)

    ds = sitk.ReadImage(path)
    data = sitk.GetArrayFromImage(ds)

    spacing = ds.GetSpacing()
    srange = [np.min(data), np.max(data)]
    img_arr = vtkImageImportFromArray()
    img_arr.SetArray(data)
    img_arr.SetDataSpacing(spacing)
    origin = (0, 0, 0)
    img_arr.SetDataOrigin(origin)  # 设置vtk数据的坐标系原点
    img_arr.Update()

    ren = vtk.vtkRenderer()
    renWin = vtk.vtkRenderWindow()
    renWin.AddRenderer(ren)  # 把一个空的渲染器添加到一个空的窗口上
    renWin.AddRenderer(ren)
    iren = vtk.vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)  # 把上面那个窗口加入交互操作
    iren.SetInteractorStyle(
        KeyPressInteractorStyle(parent=iren))  # 在交互操作里面添加这个自定义的操作例如up,down
    min = srange[0]
    max = srange[1]
    diff = max - min
    inter = 4200 / diff
    shift = -min

    shifter = vtk.vtkImageShiftScale()  # 对偏移和比例参数来对图像数据进行操作 数据转换,之后直接调用shifter
    shifter.SetShift(shift)
    shifter.SetScale(inter)
    shifter.SetOutputScalarTypeToUnsignedShort()
    shifter.SetInputData(img_arr.GetOutput())
    shifter.ReleaseDataFlagOff()

    shifter.Update()

    tfun = vtk.vtkPiecewiseFunction()  # 不透明度传输函数---放在tfun
    tfun.AddPoint(1600, 0)
    tfun.AddPoint(2200.0, 0.3)
    tfun.AddPoint(2500.0, 0.1)
    tfun.AddPoint(3000.0, 0.5)

    gradtfun = vtk.vtkPiecewiseFunction()  # 梯度不透明度函数---放在gradtfun
    gradtfun.AddPoint(10, 0)
    gradtfun.AddPoint(90, 0.5)
    gradtfun.AddPoint(100, 1.0)

    ctfun = vtk.vtkColorTransferFunction()  # 颜色传输函数---放在ctfun
    ctfun.AddRGBPoint(0.0, 0.1, 0.0, 0.0)
    ctfun.AddRGBPoint(1280.0, 0.5, 0.2, 0.3)
    ctfun.AddRGBPoint(2200.0, 0.9, 0.2, 0.3)
    ctfun.AddRGBPoint(3024.0, 0.5, 0.5, 0.5)

    volumeMapper = vtk.vtkGPUVolumeRayCastMapper()
    volumeMapper.SetInputData(shifter.GetOutput())
    volumeProperty = vtk.vtkVolumeProperty()
    volumeProperty.SetColor(ctfun)
    volumeProperty.SetScalarOpacity(tfun)
    volumeProperty.SetGradientOpacity(gradtfun)
    volumeProperty.SetInterpolationTypeToLinear()
    volumeProperty.ShadeOn()

    newvol = vtk.vtkVolume()
    newvol.SetMapper(volumeMapper)
    newvol.SetProperty(volumeProperty)

    outline = vtk.vtkOutlineFilter()
    outline.SetInputConnection(shifter.GetOutputPort())

    outlineMapper = vtk.vtkPolyDataMapper()
    outlineMapper.SetInputConnection(outline.GetOutputPort())

    outlineActor = vtk.vtkActor()
    outlineActor.SetMapper(outlineMapper)

    ren.AddActor(outlineActor)
    ren.AddVolume(newvol)
    ren.SetBackground(0, 0, 0)
    renWin.SetSize(600, 600)

    planes = vtk.vtkPlanes()
    boxWidget = vtk.vtkBoxWidget()
    boxWidget.SetInteractor(iren)
    boxWidget.SetPlaceFactor(1.0)
    boxWidget.PlaceWidget(0, 0, 0, 0, 0, 0)
    boxWidget.InsideOutOn()
    boxWidget.AddObserver("StartInteractionEvent", StartInteraction)
    boxWidget.AddObserver("InteractionEvent", ClipVolumeRender)
    boxWidget.AddObserver("EndInteractionEvent", EndInteraction)

    outlineProperty = boxWidget.GetOutlineProperty()
    outlineProperty.SetRepresentationToWireframe()
    outlineProperty.SetAmbient(1.0)
    outlineProperty.SetAmbientColor(1, 1, 1)
    outlineProperty.SetLineWidth(9)

    selectedOutlineProperty = boxWidget.GetSelectedOutlineProperty()
    selectedOutlineProperty.SetRepresentationToWireframe()
    selectedOutlineProperty.SetAmbient(1.0)
    selectedOutlineProperty.SetAmbientColor(1, 0, 0)
    selectedOutlineProperty.SetLineWidth(3)

    ren.ResetCamera()
    iren.Initialize()
    renWin.Render()
    iren.Start()
예제 #14
0
teta = GetAngleBetweenPoints([x, y], [0, 0], [xo, yo])
print(teta)
transfo.RotateWXYZ(+(teta), 0, 0, 1)
# angle Y
teta = GetAngleBetweenPoints([x, z], [0, 0], [xo, zo])
print(teta)
transfo.RotateWXYZ(+(teta), 0, 1, 0)
transfo.Translate(x, y, z)

filter = vtk.vtkTransformPolyDataFilter()
filter.SetInputConnection(textSource.GetOutputPort())
filter.SetTransform(transfo)
filter.Update()

# Create a mapper and actor
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(filter.GetOutputPort())

actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(1.0, 0.0, 0.0)

# Create a renderer, render window, and interactor
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)

renderer.AddActor(actor)
renderer.AddActor(vtk.vtkAxesActor())
예제 #15
0
 def __init__(self, renderer):
     self.__renderer = renderer
     self.__mapper = vtkPolyDataMapper()
     self.__lookup_table = vtkLookupTable()
     self.__property = vtkProperty()
     self.__actor = vtkActor()
예제 #16
0
def kneeinner(renderer, zoomlevel, opacity, color):
    reader = vtkSLCReader()
    extracter = vtkExtractVOI()

    contourfilter = vtkContourFilter()
    mapper = vtkPolyDataMapper()
    property = vtkProperty()
    actor = vtkActor()

    outline_filter = vtkOutlineFilter()
    outline_mapper = vtkPolyDataMapper()
    outline_property = vtkProperty()
    outline_actor = vtkActor()

    reader.SetFileName("objfiles/vw_knee.slc")
    reader.Update()

    # Extract volume of interest to subsample the data for faster rendering
    extracter.SetInputConnection(reader.GetOutputPort())
    extracter.SetSampleRate(3, 1, 1)

    # Set contour filter
    contourfilter.SetInputConnection(extracter.GetOutputPort())
    contourfilter.SetValue(0, zoomlevel)
    
    # Clipping 1
    clipper = vtkClipPolyData()
    clipper.SetGenerateClipScalars(0)
    sphere = vtkSphere()
    sphere.SetRadius(110)
    sphere.SetCenter((74.8305, 89.2905, 275))
    print(sphere.GetCenter())
    print(reader.GetOutput().GetCenter())
    clipper.SetInputConnection(contourfilter.GetOutputPort())
    clipper.SetClipFunction(sphere)
    clipper.Update()

    #clipping 2
    clipper2 = vtkClipPolyData()
    clipper2.SetGenerateClipScalars(0)
    sphere2 = vtkSphere()
    sphere2.SetRadius(100)
    sphere2.SetCenter((74.8305, 89.2905, -20))
    clipper2.SetInputConnection(clipper.GetOutputPort())
    clipper2.SetClipFunction(sphere2)
    clipper2.Update()

    mapper.SetInputConnection(clipper2.GetOutputPort())
    mapper.ScalarVisibilityOff()

    # Set property
    property.SetColor(color)
    property.SetOpacity(opacity)

    # Set actor
    actor.SetMapper(mapper)
    actor.SetProperty(property)

    # Set outline filter
    outline_filter.SetInputConnection(extracter.GetOutputPort())

    # Set outline mapper
    outline_mapper.SetInputConnection(outline_filter.GetOutputPort())

    # Set property
    outline_property.SetColor(0.2, 0.2, 0.2)

    # Set outline actor
    outline_actor.SetMapper(outline_mapper)
    outline_actor.SetProperty(outline_property)

    # Add actor to the window renderer
    renderer.AddActor(actor)
    renderer.AddActor(outline_actor)
예제 #17
0
volumeMapper.SetInputData(shifter.GetOutput())  # 向映射器中输入数据:shifter(预处理之后的数据)
volumeProperty = vtk.vtkVolumeProperty()  # 创建vtk属性存放器,向属性存放器中存放颜色和透明度
volumeProperty.SetColor(ctfun)
volumeProperty.SetScalarOpacity(tfun)
volumeProperty.SetGradientOpacity(gradtfun)
volumeProperty.SetInterpolationTypeToLinear()  # ???
volumeProperty.ShadeOn()

newvol = vtk.vtkVolume()  # 演员
newvol.SetMapper(volumeMapper)
newvol.SetProperty(volumeProperty)

outline = vtk.vtkOutlineFilter()
outline.SetInputConnection(shifter.GetOutputPort())

outlineMapper = vtk.vtkPolyDataMapper()
outlineMapper.SetInputConnection(outline.GetOutputPort())

outlineActor = vtk.vtkActor()
outlineActor.SetMapper(outlineMapper)

ren.AddActor(outlineActor)
ren.AddVolume(newvol)
ren.SetBackground(0, 0, 0)
renWin.SetSize(600, 600)

planes = vtk.vtkPlanes()

boxWidget = vtk.vtkBoxWidget()
boxWidget.SetInteractor(iren)
boxWidget.SetPlaceFactor(1.0)
예제 #18
0
 def __init__(self, renderer):
     self.__renderer = renderer
     self.__vtkOBJReader = vtkOBJReader()
     self.__objMapper = vtkPolyDataMapper()
     self.__objActor = vtkActor()
예제 #19
0
from vtkmodules import all as vtk
import os
print(os.getcwd())

cone = vtk.vtkConeSource()
cone_mapper = vtk.vtkPolyDataMapper()
cone_mapper.SetInputConnection(cone.GetOutputPort())

cone_actor = vtk.vtkActor()
cone_actor.SetMapper(cone_mapper)

stl_actor = vtk.vtkActor()
stl_mapper = vtk.vtkPolyDataMapper()
stl_actor.SetMapper(stl_mapper)
stl = vtk.vtkSTLReader()
stl.SetFileName('Arm.stl')
stl_mapper.SetInputConnection(stl.GetOutputPort())
stl.Update()

ren = vtk.vtkRenderer()
ren.AddActor(cone_actor)
ren.AddActor(stl_actor)
ren.SetBackground(0.5, 0.2, 0.7)

ren_win = vtk.vtkRenderWindow()
ren_win.AddRenderer(ren)
ren_win.SetSize(1000, 1000)
ren_win.Render()

i_ren = vtk.vtkRenderWindowInteractor()
i_ren.SetRenderWindow(ren_win)
예제 #20
0
    def __init__(self):
        stl_writer = vtk.vtkSTLWriter()
        append_poly = vtk.vtkAppendPolyData()

        reader1 = vtk.vtkSTLReader()
        reader1.SetFileName(file1)
        reader1.Update()
        reader2 = vtk.vtkSTLReader()
        reader2.SetFileName(file2)
        reader2.Update()

        mapper1 = vtk.vtkPolyDataMapper()
        mapper1.SetInputData(vtk.vtkPolyData())
        mapper2 = vtk.vtkPolyDataMapper()
        mapper2.SetInputData(vtk.vtkPolyData())

        actor1 = vtk.vtkActor()
        actor1.SetMapper(mapper1)
        actor2 = vtk.vtkActor()
        actor2.SetMapper(mapper2)

        actor1.GetMapper().SetInputData(reader1.GetOutput())
        actor2.GetMapper().SetInputData(reader2.GetOutput())

        h_center = actor2.GetCenter()
        c_center = actor1.GetCenter()
        c_h = actor1.GetBounds()[2]
        x = h_center[0] - c_center[0]
        y = 0.07 - c_h
        z = h_center[2] - c_center[2]
        actor1.SetPosition(x, y, z)

        # append_poly.AddInputData(reader1.GetOutput())
        # append_poly.AddInputData(reader2.GetOutput())
        reader1.FastDelete()
        reader2.FastDelete()

        render = vtk.vtkRenderer()
        ren_win = vtk.vtkRenderWindow()
        ren_win.AddRenderer(render)
        ren_win.SetSize(2000, 2000)
        i_ren = vtk.vtkRenderWindowInteractor()
        i_ren.SetInteractorStyle(vtk.vtkInteractorStyleMultiTouchCamera())
        i_ren.SetRenderWindow(ren_win)
        render.AddActor(actor1)
        render.AddActor(actor2)
        ren_win.Render()

        actors = render.GetActors()
        actor_items = actors.GetNumberOfItems()
        actors.InitTraversal()
        for i in range(actor_items):
            actor = actors.GetNextActor()
            position = list(actor.GetPosition())
            actor.SetPosition(position[0], position[1], position[2])
            mapper = actor.GetMapper()
            poly = mapper.GetInput()
            if position != (0, 0, 0):  # 如果发生平移则把每个点的坐标都做一下平移
                points = poly.GetPoints()
                sum_pts = points.GetNumberOfPoints()
                for x in range(sum_pts):
                    pos_point = list(points.GetPoint(x))
                    for y in range(3):
                        pos_point[y] += position[y]
                        points.SetPoint(x, pos_point)
            append_poly.AddInputData(poly)
            append_poly.Update()

        filter = vtk.vtkTriangleFilter()
        filter.SetInputConnection(append_poly.GetOutputPort())
        stl_writer.SetFileName('STL/1.stl')
        stl_writer.SetInputConnection(filter.GetOutputPort())
        stl_writer.Update()
        stl_writer.Write()

        i_ren.Start()
예제 #21
0
 def __init__(self, renderer):
     self.__renderer = renderer
     self.__text = vtkTextSource()
     self.__poly_mapper = vtkPolyDataMapper()
     self.__vtkactor = vtkActor()