Esempio n. 1
0
def pca(points, pvalue=.95, c='c', alpha=0.5, pcaAxes=False, legend=None):
    '''
    Show the oriented PCA ellipsoid that contains fraction pvalue of points.
        axes = True, show the 3 PCA semi axes
    Extra info is stored in actor.sphericity, actor.va, actor.vb, actor.vc
    (sphericity = 1 for a perfect sphere)
    '''
    try:
        from scipy.stats import f
    except:
        vio.printc("Error in ellipsoid(): scipy not installed. Skip.", 1)
        return None
    if len(points) == 0: return None
    P = np.array(points, ndmin=2, dtype=float)
    cov = np.cov(P, rowvar=0)  # covariance matrix
    U, s, R = np.linalg.svd(cov)  # singular value decomposition
    p, n = s.size, P.shape[0]
    fppf = f.ppf(pvalue, p, n - p) * (n - 1) * p * (n + 1) / n / (
        n - p)  # f % point function
    ua, ub, uc = np.sqrt(s * fppf) * 2  # semi-axes (largest first)
    center = np.mean(P, axis=0)  # centroid of the hyperellipsoid
    sphericity = (((ua - ub) / (ua + ub))**2 + ((ua - uc) / (ua + uc))**2 +
                  ((ub - uc) / (ub + uc))**2) / 3. * 4.
    elliSource = vtk.vtkSphereSource()
    elliSource.SetThetaResolution(48)
    elliSource.SetPhiResolution(48)
    matri = vtk.vtkMatrix4x4()
    matri.DeepCopy(
        (R[0][0] * ua, R[1][0] * ub, R[2][0] * uc, center[0], R[0][1] * ua,
         R[1][1] * ub, R[2][1] * uc, center[1], R[0][2] * ua, R[1][2] * ub,
         R[2][2] * uc, center[2], 0, 0, 0, 1))
    vtra = vtk.vtkTransform()
    vtra.SetMatrix(matri)
    ftra = vtk.vtkTransformFilter()
    ftra.SetTransform(vtra)
    ftra.SetInputConnection(elliSource.GetOutputPort())
    ftra.Update()
    actor_elli = vu.makeActor(ftra.GetOutput(), c, alpha, legend=legend)
    actor_elli.GetProperty().BackfaceCullingOn()
    actor_elli.GetProperty().SetInterpolationToPhong()
    if pcaAxes:
        axs = []
        for ax in ([1, 0, 0], [0, 1, 0], [0, 0, 1]):
            l = vtk.vtkLineSource()
            l.SetPoint1([0, 0, 0])
            l.SetPoint2(ax)
            l.Update()
            t = vtk.vtkTransformFilter()
            t.SetTransform(vtra)
            vu.setInput(t, l.GetOutput())
            t.Update()
            axs.append(vu.makeActor(t.GetOutput(), c, alpha))
        finact = vu.makeAssembly([actor_elli] + axs, legend=legend)
    else:
        finact = actor_elli
    setattr(finact, 'sphericity', sphericity)
    setattr(finact, 'va', ua)
    setattr(finact, 'vb', ub)
    setattr(finact, 'vc', uc)
    return finact
Esempio n. 2
0
def toOriginalPos(actor, center, rotationTransform):
    rotMat = vtk.vtkMatrix4x4()
    rotationTransform.GetTranspose(rotMat)
    rotTrans = vtk.vtkTransform()
    rotTrans.SetMatrix(rotMat)

    transformFilter = vtk.vtkTransformFilter()
    transformFilter.SetInputData(actor.GetMapper().GetInput())
    transformFilter.SetTransform(rotTrans)
    transformFilter.Update()

    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputConnection(transformFilter.GetOutputPort())
    mapper.Update()
    actor.SetMapper(mapper)

    centerTransform = vtk.vtkTransform()
    centerTransform.Translate(center[0], center[1], center[2])

    transformFilter = vtk.vtkTransformFilter()
    transformFilter.SetInputData(actor.GetMapper().GetInput())
    transformFilter.SetTransform(centerTransform)
    transformFilter.Update()

    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputConnection(transformFilter.GetOutputPort())
    mapper.Update()
    actor.SetMapper(mapper)

    centerCalculer = vtk.vtkCenterOfMass()
    centerCalculer.SetInputData(actor.GetMapper().GetInput())
    centerCalculer.SetUseScalarsAsWeights(False)
    centerCalculer.Update()
    center = centerCalculer.GetCenter()
    print(center)
Esempio n. 3
0
def get_sphere_source(
    center,
    radius,
    resolution=10,
    start_phi=None,
    end_phi=None,
    axis=0,
    theta_resolution=None,
    phi_resolution=None,
):
    # create source
    if theta_resolution is None:
        theta_resolution = resolution
    if phi_resolution is None:
        phi_resolution = resolution
    import vtk

    sphere = vtk.vtkSphereSource()
    sphere.SetPhiResolution(phi_resolution)
    sphere.SetThetaResolution(theta_resolution)
    # sphere.SetCenter(center[0], center[1], center[2])
    sphere.SetCenter(0.0, 0.0, 0.0)
    sphere.SetRadius(radius)
    if start_phi is not None:
        sphere.SetStartPhi(start_phi)
    if end_phi is not None:
        sphere.SetEndPhi(end_phi)

    if axis == 0:
        translate = vtk.vtkTransform()
        translate.Translate(center)

        tr2 = vtk.vtkTransformFilter()
        tr2.SetInputConnection(sphere.GetOutputPort())
        tr2.SetTransform(translate)
        sphere = tr2

    if axis == 1:
        # sphere = move_to_position(sphere, center, [1., 1., 0.])

        rot1 = vtk.vtkTransform()
        rot1.RotateWXYZ(90, 1, 0, 0)
        translate = vtk.vtkTransform()
        translate.Translate(center)

        tr1 = vtk.vtkTransformFilter()
        # tr1a.SetInputConnection(src.GetOutputPort())
        tr1.SetInputConnection(sphere.GetOutputPort())
        tr1.SetTransform(rot1)
        tr1.Update()

        tr2 = vtk.vtkTransformFilter()
        tr2.SetInputConnection(tr1.GetOutputPort())
        tr2.SetTransform(translate)
        sphere = tr2
    sphere.Update()
    return sphere.GetOutput()
Esempio n. 4
0
def convert_label_map_to_surface(label_name, output_file):
    print('Converting', label_name)

    reader = vtk.vtkNIFTIImageReader()
    reader.SetFileName(label_name)
    reader.Update()

    mc = vtk.vtkDiscreteMarchingCubes()
    mc.SetInputConnection(reader.GetOutputPort())
    mc.SetNumberOfContours(1)
    mc.SetValue(0, 1)
    mc.Update()

    # Hacky way to get real size of image (for some reason the vtk image is incorrect)
    image_itk = sitk.Cast(sitk.ReadImage(label_name), sitk.sitkFloat32)

    origin = image_itk.GetOrigin()
    size = image_itk.GetSize()
    spacing = image_itk.GetSpacing()

    # Transform surface to fit in coordinate system
    # 6/4-2020 these transformations are found by trial and error...
    rotate = vtk.vtkTransform()
    # rotate.RotateY(180)
    rotate.RotateZ(180)
    rotate.RotateX(180)
    translate = vtk.vtkTransform()

    rotate_filter = vtk.vtkTransformFilter()
    rotate_filter.SetInputConnection(mc.GetOutputPort())
    rotate_filter.SetTransform(rotate)
    rotate_filter.Update()

    # 6/4-2020 these transformations are found by trial and error...
    t_x, t_y, t_z = -origin[0], -origin[1], origin[2] + spacing[2] * size[2]
    translate.Translate(t_x, t_y, t_z)
    translate_filter = vtk.vtkTransformFilter()
    translate_filter.SetInputData(rotate_filter.GetOutput())
    translate_filter.SetTransform(translate)
    translate_filter.Update()

    norms = vtk.vtkPolyDataNormals()
    norms.SetInputConnection(translate_filter.GetOutputPort())
    norms.SetFlipNormals(True)
    norms.SetSplitting(False)

    writer = vtk.vtkPolyDataWriter()
    writer.SetInputConnection(norms.GetOutputPort())
    writer.SetFileTypeToBinary()
    writer.SetFileName(output_file)
    writer.Write()
Esempio n. 5
0
def get_cylinder(upper, height, radius,
                 direction,
                 resolution=10):

    src = vtk.vtkCylinderSource()
    src.SetCenter((0, height/2, 0))
    src.SetHeight(height + radius/2.0)
    src.SetRadius(radius)
    src.SetResolution(resolution)

    rot1 = vtk.vtkTransform()
    fi = nm.arccos(direction[1])

    rot1.RotateWXYZ(-nm.rad2deg(fi), 0.0, 0.0, 1.0)
    u = nm.abs(nm.sin(fi))
    rot2 = vtk.vtkTransform()
    if u > 1.0e-6:

        # sometimes d[0]/u little bit is over 1
        d0_over_u = direction[0] / u
        if d0_over_u > 1:
            psi = 0
        elif d0_over_u < -1:
            psi = 2 * nm.pi
        else:
            psi = nm.arccos(direction[0] / u)

        logger.debug('d0 '+str(direction[0])+'  u '+str(u)+' psi '+str(psi))
        if direction[2] < 0:
            psi = 2 * nm.pi - psi

        rot2.RotateWXYZ(-nm.rad2deg(psi), 0.0, 1.0, 0.0)

    tl = vtk.vtkTransform()
    tl.Translate(upper)

    tr1a = vtk.vtkTransformFilter()
    tr1a.SetInput(src.GetOutput())
    tr1a.SetTransform(rot1)

    tr1b = vtk.vtkTransformFilter()
    tr1b.SetInput(tr1a.GetOutput())
    tr1b.SetTransform(rot2)

    tr2 = vtk.vtkTransformFilter()
    tr2.SetInput(tr1b.GetOutput())
    tr2.SetTransform(tl)

    tr2.Update()

    return tr2.GetOutput()
Esempio n. 6
0
def RotateTranslate(data, kampas):
    tran = vtk.vtkTransform()
    tran.RotateZ(kampas)
    tranfilter = vtk.vtkTransformFilter()
    tranfilter.SetTransform(tran)
    tranfilter.SetInputData(data)
    tranfilter.Update()
    bounds = tranfilter.GetOutput().GetBounds()
    tran = vtk.vtkTransform()
    tran.Translate(-bounds[0], -bounds[2] + aukstis, -bounds[4])
    tranfilter1 = vtk.vtkTransformFilter()
    tranfilter1.SetTransform(tran)
    tranfilter1.SetInputData(tranfilter.GetOutput())
    tranfilter1.Update()
    return tranfilter1.GetOutput()
Esempio n. 7
0
def RotateTranslate1(data,translate):
    tran=vtk.vtkTransform()
    tran.RotateZ(kampas)
    tranfilter=vtk.vtkTransformFilter()
    tranfilter.SetTransform(tran)
    tranfilter.SetInputData(data)
    tranfilter.Update()
    
    tran=vtk.vtkTransform()
    tran.Translate(translate[0],translate[1],translate[2])
    tranfilter1=vtk.vtkTransformFilter()
    tranfilter1.SetTransform(tran)
    tranfilter1.SetInputData(tranfilter.GetOutput())
    tranfilter1.Update()
    return tranfilter1.GetOutput()
Esempio n. 8
0
 def WriteVTSXMLVolumeFile(self):
     if (self.OutputFileName == ''):
         self.PrintError('Error: no OutputFileName.')
     self.PrintLog('Writing VTS XML grid file.')
     if self.ApplyTransform == 0:
         origin = self.Image.GetOrigin()
         spacing = self.Image.GetSpacing()
         matrix = vtk.vtkMatrix4x4()
         matrix.DeepCopy(
             (1 / spacing[0], 0, 0, -origin[0] / spacing[0], 0,
              1 / spacing[1], 0, -origin[1] / spacing[1], 0, 0,
              1 / spacing[2], -origin[2] / spacing[2], 0, 0, 0,
              1))  #LPI convention with correct origin and spacing
     else:
         if self.RasToIjkMatrixCoefficients == None:
             self.PrintError('Error: no RasToIjkMatrixCoefficients.')
         matrix = vtk.vtkMatrix4x4()
         matrix.DeepCopy(self.RasToIjkMatrixCoefficients)
     trans = vtk.vtkTransform()
     trans.SetMatrix(matrix)
     trans_filt = vtk.vtkTransformFilter()
     trans_filt.SetTransform(trans)
     trans_filt.SetInputData(self.Image)
     trans_filt.Update()
     writer = vtk.vtkXMLStructuredGridWriter()
     writer.SetInputConnection(trans_filt.GetOutputPort())
     writer.SetFileName(self.OutputFileName)
     writer.Write()
Esempio n. 9
0
    def attach_stl(self, fname, scale=None):
        """Load a given STL file into a vtkPolyData object"""

        reader = vtk.vtkSTLReader()
        reader.SetFileName(fname)
        reader.Update() # polydata

        if scale is not None:
            trans = vtk.vtkTransform()
            trans.Scale(scale)

            filt = vtk.vtkTransformFilter()

            if vtk.VTK_MAJOR_VERSION <= 5:
                filt.SetInputConnection(reader.GetOutputPort)
            else:
                filt.SetInputConnection(reader.GetOutputPort())
                   
            filt.SetTransform(trans)

        mapper = vtk.vtkPolyDataMapper()

        if vtk.VTK_MAJOR_VERSION <= 5:
           mapper.SetInput(filt.GetOutput())
        else:
           mapper.SetInputConnection(filt.GetOutputPort())

        actor = vtk.vtkActor()
        actor.SetMapper(mapper)

        self._ren.AddActor(actor)
Esempio n. 10
0
    def get_slice(self, image, rotation):
        """Generate a polydata object of the provided image rotated by the
        provided rotation."""

        rotation_degrees = rotation.copy()
        rotation_degrees[0] = 2. * numpy.arccos(rotation[0]) * 180. / numpy.pi
        transformation = vtk.vtkTransform()
        transformation.RotateWXYZ(rotation_degrees[0], rotation_degrees[1],
                                  rotation_degrees[2], rotation_degrees[3])
        transform_filter = vtk.vtkTransformFilter()
        input_poly_data = vtk.vtkPolyData()
        input_poly_data.DeepCopy(self._template_poly_data)
        # This deep copy stuff is needed since transform returns a
        # pointer to the same object but transformed (i think) but
        # it should be checked really.
        #input_poly_data = self._template_poly_data.
        #transform_filter.SetInputData(self._template_poly_data)
        transform_filter.SetInputData(input_poly_data)
        transform_filter.SetTransform(transformation)
        transform_filter.Update()
        this_poly_data = transform_filter.GetOutput()

        scalars = this_poly_data.GetPointData().GetScalars()
        for i in range(self._side):
            for j in range(self._side):
                # point_coord = this_poly_data.GetPoint(self._side*i + j)
                #if point_coord[0] > 0.:
                scalars.SetTuple1(i * self._side + j, image[i, j])
                #scalars.SetTuple1(i*self._side+j, image[j, i])
                # else:
                #     #polys.GetData().SetTuple4(i*self._side+j, 0., 0., 0., 0.)
                #     scalars.SetTuple1(i*self._side+j, nan)
        this_poly_data.Modified()
        return this_poly_data
Esempio n. 11
0
    def __init__(self, profile):
        """Clip the STL and set attributes on the SWIG-proxied C++ 
        GeometryGenerator object.
        """
        self.profile = profile
        self.generator = Generation.PolyDataGenerator()
        self._SetCommonGeneratorProperties()
        
        self.generator.SetSeedPointWorking(profile.SeedPoint.x / profile.VoxelSize,
                                           profile.SeedPoint.y / profile.VoxelSize,
                                           profile.SeedPoint.z / profile.VoxelSize)

        # This will create the pipeline for the clipped surface
        clipper = Clipper(profile)

        # Scale by the voxel size
        trans = vtkTransform()
        scale = 1. / profile.VoxelSize
        trans.Scale(scale, scale, scale)
        
        transformer = vtkTransformFilter()
        transformer.SetTransform(trans)
        transformer.SetInputConnection(clipper.ClippedSurfaceSource.GetOutputPort())
        
        # Uncomment this an insert the output path to debug pipeline construction
        # write = StageWriter('/path/to/stage/output/directory').WriteOutput
        # for alg in getpipeline(transformer):
        #    write(alg)

        transformer.Update()
        self.ClippedSurface = transformer.GetOutput()
        self.generator.SetClippedSurface(self.ClippedSurface)
        
        return
Esempio n. 12
0
def add_stl(input_file1, input_file2, output_file, transform_file, visualize, overwrite, func):

  if os.path.isfile(output_file) and not overwrite:
    result = input('File \"{}\" already exists. Overwrite? [y/n]: '.format(output_file))
    if result.lower() not in ['y', 'yes']:
      print('Not overwriting. Exiting...')
      os.sys.exit()
  
  im1 = vtk.vtkSTLReader()
  im1.SetFileName(input_file1)
  im1.Update()
  
  im2 = vtk.vtkSTLReader()
  im2.SetFileName(input_file2)
  im2.Update()

  im2 = applyTransform(transform_file, im2)
  
  if (visualize):
    mat4x4 = visualize_actors( im2.GetOutputPort(), im1.GetOutputPort() )
  else:
    mat4x4 = vtk.vtkMatrix4x4()

  transform = vtk.vtkTransform()
  transform.SetMatrix(mat4x4)
  
  transformFilter = vtk.vtkTransformFilter()
  transformFilter.SetInputConnection( im2.GetOutputPort() )
  transformFilter.SetTransform( transform )
  transformFilter.Update()
  
  final_image = joinPolyData( transformFilter.GetOutput(), im1.GetOutput() )
  
  write_stl( final_image.GetOutputPort(), output_file, vtk.vtkMatrix4x4() )
Esempio n. 13
0
def transform_filter(dataset,
                     transform=None,
                     matrix=None,
                     rescale=None,
                     outputtype=None):
    '''Transforms dataobject into given space.'''
    transformer = vtk.vtkTransformFilter()
    transformer.SetInputData(dataset)

    if matrix is not None:
        transform = vtk.vtkTransform()
        transform.SetMatrix(matrix)
    elif rescale is not None:
        transform = vtk.vtkTransform()
        rescaleTuple = (rescale, rescale, rescale)
        transform.Scale(rescaleTuple)

    transformer.SetTransform(transform)
    transformer.Update()

    if outputtype == 'StructuredGrid' or isinstance(
            dataset, (vtk.vtkStructuredGrid, vtk.vtkImageData)):
        return transformer.GetStructuredGridOutput()
    elif outputtype == 'UnstructuredGrid' or isinstance(
            dataset, vtk.vtkUnstructuredGrid):
        return transformer.GetUnstructuredGridOutput()
    elif outputtype == 'PolyData' or isinstance(dataset, vtk.vtkPolyData):
        return transformer.GetPolyDataOutput()
Esempio n. 14
0
def create_tilted_frame(array_pointing, size=300):
    planeSource = vtk.vtkPlaneSource()
    planeSource.SetXResolution(10)
    planeSource.SetYResolution(10)
    planeSource.SetCenter(0.0, 0.0, 0.0)
    planeSource.SetNormal(0.0, 0.0, 1.0)
    planeSource.Update()

    transform_text = vtk.vtkTransform()
    transform_text.Scale(size, size, size)
    transform_text.RotateZ(-array_pointing.az.value)
    transform_text.RotateY(90 - array_pointing.alt.value)
    transform_text_axes = vtk.vtkTransformFilter()
    transform_text_axes.SetTransform(transform_text)
    transform_text_axes.SetInputConnection(planeSource.GetOutputPort())
    transform_text_axes.Update()

    # Create a mapper and actor
    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputData(transform_text_axes.GetOutput())

    actor = vtk.vtkActor()
    actor.SetMapper(mapper)
    actor.GetProperty().EdgeVisibilityOn()
    actor.GetProperty().LightingOff()
    actor.GetProperty().SetOpacity(0.3)
    actor.GetProperty().SetColor([0, 255, 0])

    return actor
Esempio n. 15
0
 def __init__ (self, mod_m): 
     debug ("In VelocityVector::__init__ ()")
     Common.state.busy ()
     Base.Objects.Module.__init__ (self, mod_m)
     self.glyph2d_src = vtk.vtkGlyphSource2D ()
     self.cone = vtk.vtkConeSource ()
     self.arrow = vtk.vtkArrowSource ()
     self.glyph_src = self.cone
     self.glyph3d = vtk.vtkGlyph3D ()
     self.mapper = self.map = vtk.vtkPolyDataMapper ()
     self.actor = self.act = vtk.vtkActor ()
     # used to orient the cone properly
     self.glph_trfm = vtk.vtkTransformFilter ()
     self.glph_trfm.SetTransform (vtk.vtkTransform ())
     self.data_out = self.mod_m.GetOutput ()
     
     # Point of glyph that is attached -- -1 is tail, 0 is center,
     # 1 is head.
     self.glyph_pos = -1 
     self.scale = 1.0
     self.color_mode = 2 #2 is vector, 1 is scalar, -1 none
     self._initialize ()
     self._gui_init ()
     self.renwin.Render ()
     Common.state.idle ()
Esempio n. 16
0
 def __init__(self, module_manager):
     SimpleVTKClassModuleBase.__init__(
         self, module_manager,
         vtk.vtkTransformFilter(), 'Processing.',
         ('vtkPointSet',), ('vtkPointSet',),
         replaceDoc=True,
         inputFunctions=None, outputFunctions=None)
Esempio n. 17
0
 def setMeshPath(self, meshPath, scale):
     self.meshPath = meshPath
     self.scale = scale
     # Set up 3D actor for organ
     meshPath = cleanResourcePath(self.meshPath)
     extension = os.path.splitext(meshPath)[1]
     if extension == ".stl" or extension == ".STL":
         meshReader = vtk.vtkSTLReader()
     elif extension == ".obj" or extension == ".OBJ":
         meshReader = vtk.vtkOBJReader()
     else:
         ROS_FATAL("Mesh file has invalid extension (" + extension + ")")
     meshReader.SetFileName(meshPath)
     # Scale STL
     transform = vtk.vtkTransform()
     transform.Scale(scale, scale, scale)
     transformFilter = vtk.vtkTransformFilter()
     transformFilter.SetTransform(transform)
     transformFilter.SetInputConnection(meshReader.GetOutputPort())
     transformFilter.Update()
     color = (0,0,1)
     self._updateActorPolydata(self.actor_moving,
                               polydata=transformFilter.GetOutput(),
                               color = color)
     if image is not None:
         # Set texture to default
         image = cv2.imread(cleanResourcePath(self.texturePath))
         self.actor_moving.setTexture(image)
         self.actor_moving.textureOnOff(True)
Esempio n. 18
0
    def attach_stl(self, fname, scale=None):
        """Load a given STL file into a vtkPolyData object"""

        reader = vtk.vtkSTLReader()
        reader.SetFileName(fname)
        reader.Update()  # polydata

        if scale is not None:
            trans = vtk.vtkTransform()
            trans.Scale(scale)

            filt = vtk.vtkTransformFilter()

            if vtk.VTK_MAJOR_VERSION <= 5:
                filt.SetInputConnection(reader.GetOutputPort)
            else:
                filt.SetInputConnection(reader.GetOutputPort())

            filt.SetTransform(trans)

        mapper = vtk.vtkPolyDataMapper()

        if vtk.VTK_MAJOR_VERSION <= 5:
            mapper.SetInput(filt.GetOutput())
        else:
            mapper.SetInputConnection(filt.GetOutputPort())

        actor = vtk.vtkActor()
        actor.SetMapper(mapper)

        self._ren.AddActor(actor)
Esempio n. 19
0
def loadMesh(path, scale):
    # Read in STL
    meshPath = cleanResourcePath(path)
    extension = os.path.splitext(path)[1]
    if extension == ".stl" or extension == ".STL":
        meshInput = vtk.vtkSTLReader()
        meshInput.SetFileName(path)
        meshReader = vtk.vtkTextureMapToPlane()
        meshReader.SetInputConnection(meshInput.GetOutputPort())
    elif extension == ".obj" or extension == ".OBJ":
        meshReader = vtk.vtkOBJReader()
        meshReader.SetFileName(path)
    else:
        ROS_FATAL("Mesh file has invalid extension (" + extension + ")")

    # Scale STL
    transform = vtk.vtkTransform()
    transform.Scale(scale, scale, scale)
    # transform.RotateWXYZ(rot[1], rot[2], rot[3], rot[0])
    # transform.Translate(pos[0],pos[1], pos[2])
    transformFilter = vtk.vtkTransformFilter()
    transformFilter.SetTransform(transform)
    transformFilter.SetInputConnection(meshReader.GetOutputPort())
    transformFilter.Update()
    return transformFilter.GetOutput()
Esempio n. 20
0
    def Execute(self):

        if (self.Mesh == None):
            self.PrintError('Error: no Mesh.')

        if not self.Matrix4x4:
            self.Matrix4x4 = vtk.vtkMatrix4x4()
            if self.MatrixCoefficients != []:
                self.PrintLog('Setting up transform matrix using specified coefficients')
                self.Matrix4x4.DeepCopy(self.MatrixCoefficients)
            elif self.Translation != [0.0,0.0,0.0] or self.Rotation != [0.0,0.0,0.0] or self.Scaling != [1.0,1.0,1.0]:
                self.PrintLog('Setting up transform matrix using specified translation, rotation and/or scaling')
                transform = vtk.vtkTransform()
                transform.RotateX(self.Rotation[0])
                transform.RotateY(self.Rotation[1])
                transform.RotateZ(self.Rotation[2])                       
                transform.Translate(self.Translation[0], self.Translation[1], self.Translation[2])
                transform.Scale(self.Scaling[0], self.Scaling[1], self.Scaling[2])
                self.Matrix4x4.DeepCopy(transform.GetMatrix())

        if self.InvertMatrix:
            self.Matrix4x4.Invert()

        transform = vtk.vtkMatrixToLinearTransform()
        transform.SetInput(self.Matrix4x4)

        transformFilter = vtk.vtkTransformFilter()
        transformFilter.SetInputData(self.Mesh)
        transformFilter.SetTransform(transform)
        transformFilter.Update()

        self.Mesh = transformFilter.GetOutput()
Esempio n. 21
0
def rotateDataset(dataset, angle, nameOfPointData):
    bounds=[0]*6
    dataset.GetBounds(bounds)
    center = [0.5*(bounds[1]+bounds[0]), 0.5*(bounds[3]+bounds[2]), 0.5*(bounds[5]+bounds[4])]

    dataset.SetOrigin(dataset.GetOrigin()[0]-center[0],dataset.GetOrigin()[1]-center[1],dataset.GetOrigin()[2]-center[2])

    trans = vtk.vtkTransform()
    trans.RotateZ(angle*180/math.pi)
    tf = vtk.vtkTransformFilter()
    tf.SetTransform(trans)
    tf.SetInputData(dataset);
    tf.Update()

    result = vtk.vtkImageData()
    result.DeepCopy(dataset)
    result.SetSpacing(dataset.GetSpacing()[0]*(1-1e-10),dataset.GetSpacing()[1]*(1-1e-10),dataset.GetSpacing()[2]*(1-1e-10))
    result = sample(tf.GetOutput(),result)
    result.SetSpacing(dataset.GetSpacing())
    result.SetOrigin(dataset.GetOrigin()[0]+center[0],dataset.GetOrigin()[1]+center[1],dataset.GetOrigin()[2]+center[2])

    if result.GetPointData().GetArray(nameOfPointData).GetNumberOfComponents() == 9:
      array = result.GetPointData().GetArray(nameOfPointData)
      rotMat = numpy.array([[numpy.cos(angle), -numpy.sin(angle),0], [numpy.sin(angle),  numpy.cos(angle),0], [0,0,1]])
      for i in range(dataset.GetNumberOfPoints()):
        value = numpy.array(array.GetTuple(i)).reshape(3,3)
        value = numpy.dot(rotMat,numpy.dot(value,rotMat.transpose()))
        value = value.reshape(9,1)
        array.SetTuple9( i, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8] );

    return result
Esempio n. 22
0
 def wrapOpImp(self):
     transformFilter = vtk.vtkTransformFilter();
     transformFilter.SetTransform(self.getTransform());
     transformFilter.SetInputData(self.data);
     transformFilter.Update();
     result = transformFilter.GetOutput();
     return result;
Esempio n. 23
0
def CreateTorus(point1, point2, axe):
    """
	Creates a torus that has point1 as center point2 defines
	a point on the torus.
	"""
    direction = map(lambda x, y: x - y, point2, point1)
    length = math.sqrt(sum(map(lambda x: x**2, direction)))

    torus = vtkParametricTorus()
    torus.SetRingRadius(length / 1.5)
    torus.SetCrossSectionRadius(length / 30.0)

    torusSource = vtkParametricFunctionSource()
    torusSource.SetParametricFunction(torus)
    torusSource.SetScalarModeToPhase()
    torusSource.Update()

    transform = vtkTransform()
    if axe == 0:
        transform.RotateY(90)
    elif axe == 1:
        transform.RotateX(90)

    transformFilter = vtkTransformFilter()
    transformFilter.SetInputConnection(torusSource.GetOutputPort())
    transformFilter.SetTransform(transform)
    transformFilter.Update()

    torusMapper = vtkPolyDataMapper()
    torusMapper.SetInputConnection(transformFilter.GetOutputPort())

    torusActor = vtkActor()
    torusActor.SetMapper(torusMapper)

    return torusActor, transformFilter.GetOutput()
Esempio n. 24
0
def rotateUGrid(ugrid,
                rx=0.0,
                ry=0.0,
                rz=0.0,
                sx=1.0,
                sy=1.0,
                sz=1.0,
                verbose=True):

    transmat = vtk.vtkTransform()
    transmat.RotateX(rx)
    transmat.RotateY(ry)
    transmat.RotateZ(rz)
    transmat.Scale(sx, sy, sz)

    transmat.Update()

    tf = vtk.vtkTransformFilter()
    if (vtk.vtkVersion().GetVTKMajorVersion() < 6):
        tf.SetInput(ugrid)
    else:
        tf.SetInputData(ugrid)
    tf.SetTransform(transmat)
    tf.Update()

    return tf.GetOutput()
def CreateTorus(point1, point2, axe):
	"""
	Creates a torus that has point1 as center point2 defines
	a point on the torus.
	"""
	direction = map(lambda x, y: x - y, point2, point1)
	length = math.sqrt(sum(map(lambda x: x ** 2, direction)))

	torus = vtkParametricTorus()
	torus.SetRingRadius(length / 1.5)
	torus.SetCrossSectionRadius(length / 30.0)

	torusSource = vtkParametricFunctionSource()
	torusSource.SetParametricFunction(torus)
	torusSource.SetScalarModeToPhase()
	torusSource.Update()

	transform = vtkTransform()
	if axe == 0:
		transform.RotateY(90)
	elif axe == 1:
		transform.RotateX(90)

	transformFilter = vtkTransformFilter()
	transformFilter.SetInputConnection(torusSource.GetOutputPort())
	transformFilter.SetTransform(transform)
	transformFilter.Update()

	torusMapper = vtkPolyDataMapper()
	torusMapper.SetInputConnection(transformFilter.GetOutputPort())

	torusActor = vtkActor()
	torusActor.SetMapper(torusMapper)

	return torusActor, transformFilter.GetOutput()
Esempio n. 26
0
 def WriteVTSXMLVolumeFile(self):
     if (self.OutputFileName == ''):
         self.PrintError('Error: no OutputFileName.')
     self.PrintLog('Writing VTS XML grid file.')
     if self.ApplyTransform == 0:
         origin = self.Image.GetOrigin()
         spacing = self.Image.GetSpacing()
         matrix = vtk.vtkMatrix4x4()
         matrix.DeepCopy((1/spacing[0], 0, 0, - origin[0]/spacing[0], 
                      0, 1/spacing[1], 0, - origin[1]/spacing[1],
                      0, 0, 1/spacing[2], - origin[2]/spacing[2],
                      0, 0, 0, 1)) #LPI convention with correct origin and spacing 
     else:
         if self.RasToIjkMatrixCoefficients == None:
             self.PrintError('Error: no RasToIjkMatrixCoefficients.')
         matrix = vtk.vtkMatrix4x4()
         matrix.DeepCopy(self.RasToIjkMatrixCoefficients)
     trans = vtk.vtkTransform()
     trans.SetMatrix(matrix)
     trans_filt = vtk.vtkTransformFilter()
     trans_filt.SetTransform(trans)
     trans_filt.SetInputData(self.Image)
     trans_filt.Update()
     writer = vtk.vtkXMLStructuredGridWriter()
     writer.SetInputConnection(trans_filt.GetOutputPort())
     writer.SetFileName(self.OutputFileName)
     writer.Write()
Esempio n. 27
0
    def transform(self, transform, mesh):
        transform_filter = vtk.vtkTransformFilter()
        transform_filter.SetInputData(mesh.pyvista)
        transform_filter.SetTransform(transform)
        transform_filter.Update()

        return transform_filter.GetOutput()
Esempio n. 28
0
 def TransformFilter(self, currentElement):
     transFilter = vtk.vtkTransformFilter()
     # Datatype(s) I need for input:  Algorithm, LinearTransform
     AlgorithmElement = ''
     TransformElement = ''
     for childElement in currentElement.getchildren():
         if childElement.tag in vtkTypes['Algorithm']:
             AlgorithmElement = childElement
         if childElement.tag in vtkTypes['LinearTransform']:
             TransformElement = childElement
     if AlgorithmElement != '':
         dataset = self.namesToFunctions[AlgorithmElement.tag](AlgorithmElement)
         try:
             transFilter.SetInputConnection(dataset.GetOutputPort())
         except:
             self.logger.error('  .. <TransformFilter> failed to SetInputConnection')
     else:
         self.logger.error('  .. <TransformFilter> needs an Algorithm-type childElement')
     if TransformElement != '':
         transform = self.namesToFunctions[TransformElement.tag](TransformElement)
         try:
             transFilter.SetTransform(transform)
         except:
             self.logger.error('  .. <TransformFilter> failed to SetTransform')
     else:
         self.logger.error('<TransformFilter> needs an Transform-type childElement')
     return transFilter
Esempio n. 29
0
    def Execute(self):

        if (self.Mesh == None):
            self.PrintError('Error: no Mesh.')

        if not self.Matrix4x4:
            self.Matrix4x4 = vtk.vtkMatrix4x4()
            if self.MatrixCoefficients != []:
                self.PrintLog('Setting up transform matrix using specified coefficients')
                self.Matrix4x4.DeepCopy(self.MatrixCoefficients)
            elif self.Translation != [0.0,0.0,0.0] or self.Rotation != [0.0,0.0,0.0] or self.Scaling != [1.0,1.0,1.0]:
                self.PrintLog('Setting up transform matrix using specified translation, rotation and/or scaling')
                transform = vtk.vtkTransform()
                transform.RotateX(self.Rotation[0])
                transform.RotateY(self.Rotation[1])
                transform.RotateZ(self.Rotation[2])                       
                transform.Translate(self.Translation[0], self.Translation[1], self.Translation[2])
                transform.Scale(self.Scaling[0], self.Scaling[1], self.Scaling[2])
                self.Matrix4x4.DeepCopy(transform.GetMatrix())

        if self.InvertMatrix:
            self.Matrix4x4.Invert()

        transform = vtk.vtkMatrixToLinearTransform()
        transform.SetInput(self.Matrix4x4)

        transformFilter = vtk.vtkTransformFilter()
        transformFilter.SetInputData(self.Mesh)
        transformFilter.SetTransform(transform)
        transformFilter.Update()

        self.Mesh = transformFilter.GetOutput()
Esempio n. 30
0
def addTorus(center, radii, rotation, rotation_axis='Y',resolution=50):
    torus = vtk.vtkParametricTorus()
    torus.SetRingRadius(radii[0])
    torus.SetCrossSectionRadius(radii[1])

    torusSource = vtk.vtkParametricFunctionSource()
    torusSource.SetParametricFunction(torus)
    torusSource.SetUResolution(resolution)
    torusSource.SetVResolution(resolution)
    torusSource.Update()

    transform = vtk.vtkTransform()
    if(rotation_axis=='X'):
        transform.RotateX(rotation)
    elif(rotation_axis=='Y'):
        transform.RotateY(rotation)
    else:
        transform.RotateZ(rotation)

    transform.Translate(center)

    transformFilter = vtk.vtkTransformFilter()
    transformFilter.SetInputConnection(torusSource.GetOutputPort())
    transformFilter.SetTransform(transform)
    transformFilter.Update()

    return transformFilter
Esempio n. 31
0
    def get_slice(self, image, rotation):
        """Generate a polydata object of the provided image rotated by the
        provided rotation."""

        rotation_degrees = rotation.copy()
        rotation_degrees[0] = 2.*numpy.arccos(rotation[0])*180./numpy.pi
        transformation = vtk.vtkTransform()
        transformation.RotateWXYZ(rotation_degrees[0], rotation_degrees[1],
                                  rotation_degrees[2], rotation_degrees[3])
        transform_filter = vtk.vtkTransformFilter()
        input_poly_data = vtk.vtkPolyData()
        input_poly_data.DeepCopy(self._template_poly_data)
        # This deep copy stuff is needed since transform returns a
        # pointer to the same object but transformed (i think) but
        # it should be checked really.
        #input_poly_data = self._template_poly_data.
        #transform_filter.SetInputData(self._template_poly_data)
        transform_filter.SetInputData(input_poly_data)
        transform_filter.SetTransform(transformation)
        transform_filter.Update()
        this_poly_data = transform_filter.GetOutput()

        scalars = this_poly_data.GetPointData().GetScalars()
        for i in range(self._side):
            for j in range(self._side):
                # point_coord = this_poly_data.GetPoint(self._side*i + j)
                #if point_coord[0] > 0.:
                scalars.SetTuple1(i*self._side+j, image[i, j])
                #scalars.SetTuple1(i*self._side+j, image[j, i])
                # else:
                #     #polys.GetData().SetTuple4(i*self._side+j, 0., 0., 0., 0.)
                #     scalars.SetTuple1(i*self._side+j, nan)
        this_poly_data.Modified()
        return this_poly_data
Esempio n. 32
0
def scalePolyData(polydata, scaleFactor):
    transform = vtk.vtkTransform()
    transform.Scale(scaleFactor, scaleFactor, scaleFactor)
    transformFilter = vtk.vtkTransformFilter()
    transformFilter.SetInputData(polydata)
    transformFilter.SetTransform(transform)
    transformFilter.Update()
    return transformFilter.GetOutput()
Esempio n. 33
0
def apply_transform(poly_data, matrix):
    transform = vtk.vtkTransform()
    transform.SetMatrix(matrix)
    transform_filter = vtk.vtkTransformFilter()
    transform_filter.SetTransform(transform)
    transform_filter.SetInputData(poly_data)
    transform_filter.Update()
    return transform_filter.GetOutput()
Esempio n. 34
0
def Disc(center=(0., 0., 0.),
         inner=0.25,
         outer=0.5,
         normal=(0, 0, 1),
         r_res=1,
         c_res=6):
    """Create a polygonal disk with a hole in the center.

    The disk has zero height. The user can specify the inner and outer radius
    of the disk, and the radial and circumferential resolution of the polygonal
    representation.

    Parameters
    ----------
    center : np.ndarray or list
        Center in [x, y, z]. middle of the axis of the disc.

    inner : float
        The inner radius

    outer : float
        The outer radius

    normal : np.ndarray or list
        Direction vector in [x, y, z]. orientation vector of the cone.

    r_res: int
        Number of points in radius direction.

    r_res: int
        Number of points in circumferential direction.

    """
    src = vtk.vtkDiskSource()
    src.SetInnerRadius(inner)
    src.SetOuterRadius(outer)
    src.SetRadialResolution(r_res)
    src.SetCircumferentialResolution(c_res)
    src.Update()

    default_normal = np.array([0, 0, 1])
    normal = np.array(normal)
    center = np.array(center)

    axis = np.cross(default_normal, normal)
    angle = np.rad2deg(
        np.arccos(np.clip(np.dot(normal, default_normal), -1, 1)))

    transform = vtk.vtkTransform()
    transform.RotateWXYZ(angle, axis)
    transform.Translate(center)

    transform_filter = vtk.vtkTransformFilter()
    transform_filter.SetInputConnection(src.GetOutputPort())
    transform_filter.SetTransform(transform)
    transform_filter.Update()

    return pyvista.wrap(transform_filter.GetOutput())
Esempio n. 35
0
def main():
    colors = vtk.vtkNamedColors()
    geoGraticle = vtk.vtkGeoGraticule()
    transformProjection = vtk.vtkGeoTransform()
    destinationProjection = vtk.vtkGeoProjection()
    sourceProjection = vtk.vtkGeoProjection()
    transformGraticle = vtk.vtkTransformFilter()
    
    reader = vtk.vtkXMLPolyDataReader()
    transformReader = vtk.vtkTransformFilter()
    graticleMapper = vtk.vtkPolyDataMapper()
    readerMapper = vtk.vtkPolyDataMapper()
    graticleActor = vtk.vtkActor()
    readerActor = vtk.vtkActor()

    geoGraticle.SetGeometryType( geoGraticle.POLYLINES )
    geoGraticle.SetLatitudeLevel( 2 )
    geoGraticle.SetLongitudeLevel( 2 )
    geoGraticle.SetLongitudeBounds( -180, 180 )
    geoGraticle.SetLatitudeBounds( -90, 90 )
    
    # destinationProjection defaults to latlong.
    destinationProjection.SetName( "rouss" )
    destinationProjection.SetCentralMeridian( 0. )
    transformProjection.SetSourceProjection( sourceProjection )
    transformProjection.SetDestinationProjection( destinationProjection )
    transformGraticle.SetInputConnection( geoGraticle.GetOutputPort() )
    transformGraticle.SetTransform( transformProjection )
    graticleMapper.SetInputConnection( transformGraticle.GetOutputPort() )
    graticleActor.SetMapper( graticleMapper )
  
    renderWindow = vtk.vtkRenderWindow()
    renderer = vtk.vtkRenderer()
    interactor = vtk.vtkRenderWindowInteractor()
    renderWindow.SetInteractor( interactor )
    renderWindow.AddRenderer( renderer )
    renderWindow.SetSize(640, 480)
    renderer.SetBackground(colors.GetColor3d("BurlyWood"))
    
    renderer.AddActor( readerActor )
    renderer.AddActor( graticleActor )
    
    renderWindow.Render()  	
    interactor.Initialize()
    interactor.Start()
Esempio n. 36
0
def surfacescaling(polydata, scalefactor=1.0):
    """Scale a vtkPolyData object."""
    transform = vtk.vtkTransform()
    transform.Scale(scalefactor, scalefactor, scalefactor)
    transformFilter = vtk.vtkTransformFilter()
    transformFilter.SetInput(polydata)
    transformFilter.SetTransform(transform)
    transformFilter.Update()
    return transformFilter.GetOutput()
Esempio n. 37
0
 def __init__(self, module_manager):
     SimpleVTKClassModuleBase.__init__(self,
                                       module_manager,
                                       vtk.vtkTransformFilter(),
                                       'Processing.', ('vtkPointSet', ),
                                       ('vtkPointSet', ),
                                       replaceDoc=True,
                                       inputFunctions=None,
                                       outputFunctions=None)
Esempio n. 38
0
def surfacetranslation(polydata, translation=[0.0, 0.0, 0.0]):
    """Translate a vtkPolyData object."""
    transform = vtk.vtkTransform()
    transform.Translate(translation)
    transformFilter = vtk.vtkTransformFilter()
    transformFilter.SetInput(polydata)
    transformFilter.SetTransform(transform)
    transformFilter.Update()
    return transformFilter.GetOutput()
Esempio n. 39
0
def surfacescaling(polydata, scalefactor=1.0):
    """Scale a vtkPolyData object."""
    transform = vtk.vtkTransform()
    transform.Scale(scalefactor, scalefactor, scalefactor)
    transformFilter = vtk.vtkTransformFilter()
    transformFilter.SetInput(polydata)
    transformFilter.SetTransform(transform)
    transformFilter.Update()
    return transformFilter.GetOutput()
Esempio n. 40
0
def transform(mesh, matrix):
    t = vtk.vtkTransform()
    t.SetMatrix(matrix)
    # Apply the transformation to the grid
    tf = vtk.vtkTransformFilter()
    tf.SetInputData(mesh)
    tf.SetTransform(t)
    tf.Update()
    return tf.GetOutput()
Esempio n. 41
0
def transformScale(mesh, scale):
    t = vtk.vtkTransform()
    t.Scale(scale)
    # Apply the transformation to the grid
    tf = vtk.vtkTransformFilter()
    tf.SetInputData(mesh)
    tf.SetTransform(t)
    tf.Update()
    return tf.GetOutput()
Esempio n. 42
0
def arrayToPoly(array, origin, spacing, direction):
    # array to vtkImageData
    flatten_array = array.ravel()
    vtk_data_array = numpy_to_vtk(
        num_array=
        flatten_array,  # ndarray contains the fitting result from the points. It is a 3D array
        deep=True,
        array_type=vtk.VTK_UNSIGNED_CHAR)

    # Convert the VTK array to vtkImageData
    shape = np.array(array.shape[::-1])
    origin = np.array(origin)
    spacing = np.array(spacing)

    img_vtk = vtk.vtkImageData()
    img_vtk.SetDimensions(shape)

    img_vtk.SetSpacing(spacing)
    img_vtk.SetOrigin(origin)
    img_vtk.SetDirectionMatrix(*direction)
    img_vtk.GetPointData().SetScalars(vtk_data_array)

    surf = vtk.vtkDiscreteMarchingCubes()
    surf.SetInputData(img_vtk)
    surf.SetValue(
        0, 1
    )  # use surf.GenerateValues function if more than one contour is available in the file
    # surf.GenerateValues(2, 0, 1)  # use surf.GenerateValues function if more than one contour is available in the file
    surf.Update()

    # smoothing the mesh
    smoother = vtk.vtkSmoothPolyDataFilter()
    smoother.SetInputConnection(surf.GetOutputPort())
    smoother.SetNumberOfIterations(50)
    smoother.SetRelaxationFactor(0.1)
    smoother.FeatureEdgeSmoothingOff()
    smoother.BoundarySmoothingOn()
    smoother.Update()

    # Update normals on newly smoothed polydata
    normalGenerator = vtk.vtkPolyDataNormals()
    normalGenerator.SetInputConnection(smoother.GetOutputPort())
    normalGenerator.ComputePointNormalsOn()
    normalGenerator.ComputeCellNormalsOn()
    normalGenerator.Update()

    # transform
    transform = vtk.vtkTransform()
    transform.Scale(-1, -1, 1)
    transform_filter = vtk.vtkTransformFilter()
    transform_filter.SetTransform(transform)
    transform_filter.SetInputData(normalGenerator.GetOutput())
    transform_filter.TransformAllInputVectorsOn()
    transform_filter.Update()

    poly = transform_filter.GetOutput()
    return poly
Esempio n. 43
0
def surfacetranslation(polydata, translation=[0.0, 0.0, 0.0]):
    """Translate a vtkPolyData object."""
    transform = vtk.vtkTransform()
    transform.Translate(translation)
    transformFilter = vtk.vtkTransformFilter()
    transformFilter.SetInput(polydata)
    transformFilter.SetTransform(transform)
    transformFilter.Update()
    return transformFilter.GetOutput()
Esempio n. 44
0
    def Execute(self):

        if (self.Mesh == None):
            self.PrintError('Error: no Mesh.')

        transform = vtk.vtkTransform()
        transform.Scale(self.ScaleFactor,self.ScaleFactor,self.ScaleFactor)

        transformFilter = vtk.vtkTransformFilter()
        transformFilter.SetInputData(self.Mesh)
        transformFilter.SetTransform(transform)
        transformFilter.Update()

        self.Mesh = transformFilter.GetOutput()
Esempio n. 45
0
 def addToScene(self, msource, **kwargs):
   import vtk
   vsource = msource
   if 'translate' in kwargs:
       tf = vtk.vtkTransformFilter()
       tf.SetTransform(vtk.vtkTransform())
       delta = kwargs['translate']
       tf.GetTransform().Translate(delta[0], delta[1], delta[2])
       tf.SetInputConnection(msource.GetOutputPort())
       vsource = tf
   ac = vtk.vtkActor()
   mp = vtk.vtkCompositePolyDataMapper()
   ac.SetMapper(mp)
   mp.SetInputConnection(vsource.GetOutputPort())
   self.renderer.AddActor(ac)
Esempio n. 46
0
    def Execute(self):

        if (self.Mesh == None):
            self.PrintError('Error: no Mesh.')

        transform = vtk.vtkTransform()
        transform.Scale(self.ScaleFactor,self.ScaleFactor,self.ScaleFactor)

        transformFilter = vtk.vtkTransformFilter()
        transformFilter.SetInput(self.Mesh)
        transformFilter.SetTransform(transform)
        transformFilter.Update()

        self.Mesh = transformFilter.GetOutput()

        if self.Mesh.GetSource():
            self.Mesh.GetSource().UnRegisterAllOutputs()
Esempio n. 47
0
 def __init__( self, desiredPointSize=0.5, maxNumPoints=1e6 ):
     self.maxNumPoints = maxNumPoints
     self.vtkPolyData = vtk.vtkPolyData()
     self.vtkTransformFilter = vtk.vtkTransformFilter()
     self.vtkTransform = vtk.vtkTransform()
     self.vtkTransformFilter.SetTransform( self.vtkTransform )
     self.vtkTransformFilter.SetInput( self.vtkPolyData )
     self.clearPoints()
     mapper = vtk.vtkPolyDataMapper()
     mapper. SetInput( self.vtkTransformFilter.GetOutput() )
     mapper.SetColorModeToDefault()
     mapper.SetScalarRange( 0.0, 1.0 )
     mapper.SetScalarVisibility(1)
     self.vtkActor = vtk.vtkActor()
     self.vtkActor.SetMapper(mapper)
     property = self.vtkActor.GetProperty()
     property.SetPointSize(desiredPointSize)
Esempio n. 48
0
    def __init__(self, profile):
        """Clip the STL and set attributes on the SWIG-proxied C++
        GeometryGenerator object.
        """
        GeometryGenerator.__init__(self)
        self._profile = profile
        self.generator = Generation.PolyDataGenerator()
        self._SetCommonGeneratorProperties()
        self.generator.SetSeedPointWorking(
            profile.SeedPoint.x / profile.VoxelSize,
            profile.SeedPoint.y / profile.VoxelSize,
            profile.SeedPoint.z / profile.VoxelSize)

        # This will create the pipeline for the clipped surface
        clipper = Clipper(profile)

        # Scale by the voxel size
        trans = vtkTransform()
        scale = 1. / profile.VoxelSize
        trans.Scale(scale, scale, scale)

        transformer = vtkTransformFilter()
        transformer.SetTransform(trans)
        transformer.SetInputConnection(
            clipper.ClippedSurfaceSource.GetOutputPort())

        # Uncomment this an insert the output path to debug pipeline construction
        # write = StageWriter('/Users/rupert/working/compare/aneurysm').WriteOutput
        # i = 0
        # for alg in getpipeline(transformer):
        #     print i
        #     i += 1
        #     print alg
        #     write(alg)

        transformer.Update()
        self.ClippedSurface = transformer.GetOutput()
        self.generator.SetClippedSurface(self.ClippedSurface)
        
        originWorking, nSites = self._ComputeOriginWorking()
        self.generator.SetOriginWorking(*(float(x) for x in originWorking))
        self.generator.SetSiteCounts(*(int(x) for x in nSites))
        self.OriginMetres = Vector(originWorking * self.VoxelSizeMetres) 
        return
 def __init__(self, body_fixed=True):
     self.body_fixed = body_fixed
     # vtk objects for creating 3D scene
     self.vtkrenderer = vtk.vtkRenderer()
     self.vtkrenderer.SetBackground(1, 1, 1)
     self.vtkrender_window = vtk.vtkRenderWindow()
     self.vtkrender_window.AddRenderer(self.vtkrenderer)
     self.vtkrender_window.SetSize(self.window_size)
     self.vtkrender_window_interactor = vtk.vtkRenderWindowInteractor()
     self.vtkrender_window_interactor.SetRenderWindow(self.vtkrender_window)
     self.camera = vtk.vtkCamera()
     self.camera.SetPosition([p*self.scale_factor for p in self.camera_pos]);
     self.camera.SetFocalPoint(0, 0, 0);
     self.camera.SetViewUp(self.camera_up);
     self.vtkrenderer.SetActiveCamera(self.camera);
     
     self.vtkvrml_exporter = vtk.vtkVRMLExporter()
     # vtk objects for reading, and rendering object parts
     self.vtkreader = {}
     self.vtkpolydata = {}
     self.vtkmapper = {}
     self.vtktransform = {}
     self.vtkfilter = {}
     # read each part from its stl file
     for part in self.parts:
         self.vtkreader[part] = vtk.vtkSTLReader()
         self.vtkreader[part].SetFileName(self.models_folder + part + '.stl')
         self.vtktransform[part] = vtk.vtkTransform()
         self.vtktransform[part].Scale(self.scale_factor, self.scale_factor, self.scale_factor)
         self.vtkfilter[part] = vtk.vtkTransformFilter()
         self.vtkfilter[part].SetInput(self.vtkreader[part].GetOutput())
         self.vtkfilter[part].SetTransform(self.vtktransform[part])
         self.vtkpolydata[part] = self.vtkfilter[part].GetOutput()
         self.vtkmapper[part] = vtk.vtkPolyDataMapper()
         self.vtkmapper[part].SetInput(self.vtkpolydata[part])
     if self.body_fixed:
         # actor for body part (every object has a part named body at origin)
         self.vtkbodyactor = vtk.vtkActor()
         self.vtkbodyactor.SetMapper(self.vtkmapper['Body'])
         self.vtkbodyactor.SetPosition(0, 0, 0)
         
     self.graspit_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     self.graspit_socket.connect((self.graspit_tcp_ip, self.graspit_tcp_port))
Esempio n. 50
0
    def initialize (self, valid_coord):        
        """ Initializes the seed given an array of valid co-ordinate
        directions. [x-axis, y-axis, z_axis] is the format.  For
        instance if x-axis == 0 then the data is along the YZ plane.
        This method is responsible for actually creating the seed. """

        debug ("In SeedManager::initialize ()")
        assert len (valid_coord) == 3
        self.dim = reduce (lambda x, y: x+y, valid_coord)
        if self.dim == 3:
            self.seed = vtk.vtkPointSource ()
        else:
            self.seed = vtk.vtkDiskSource ()
            self.seed.SetRadialResolution (1)
            self.seed.SetInnerRadius (0.0)
            self.transform = vtk.vtkTransformFilter ()
            self.transform.SetTransform (vtk.vtkTransform ())
            self.transform.SetInput (self.seed.GetOutput ())
            self.orient_2d (valid_coord)
Esempio n. 51
0
    def Execute(self):

        if self.Mesh == None:
            self.PrintError('Error: no Mesh.')

        if self.XyzToRasMatrixCoefficients == None:
            self.PrintError('Error: no XyzToRasMatrixCoefficients.')

        matrix = vtk.vtkMatrix4x4()
        matrix.DeepCopy(self.XyzToRasMatrixCoefficients)

        transform = vtk.vtkTransform()
        transform.SetMatrix(matrix)

        transformFilter = vtk.vtkTransformFilter()
        transformFilter.SetInputData(self.Mesh)
        transformFilter.SetTransform(transform)
        transformFilter.Update()

        self.Mesh = transformFilter.GetOutput()
Esempio n. 52
0
def main ():
    # example code...
    import vtk
    from vtk.wx.wxVTKRenderWindow import wxVTKRenderWindow
    
    cone = vtk.vtkConeSource()
    cone.SetResolution(8)
    transform = vtk.vtkTransformFilter ()
    transform.SetInput ( cone.GetOutput() )
    transform.SetTransform ( vtk.vtkTransform() )
    coneMapper = vtk.vtkPolyDataMapper()
    coneMapper.SetInput(transform.GetOutput())
    l = vtk.vtkLookupTable ()
    coneMapper.SetLookupTable (l)
    coneActor = vtk.vtkActor()
    coneActor.SetMapper(coneMapper)    
    axes = vtk.vtkCubeAxesActor2D ()

    app = wx.PySimpleApp()
    frame = wx.Frame(None, -1, "wx.RenderWindow", size=wx.Size(400,400))
    wid = wxVTKRenderWindow(frame, -1)

    ren = vtk.vtkRenderer()
    renWin = wid.GetRenderWindow()
    renWin.AddRenderer(ren)
    renWin.SetSize(300,300)
    ren.AddActor (coneActor)
    ren.AddActor (axes)
    axes.SetCamera (ren.GetActiveCamera ())
    renWin.Render ()

    debug ("Starting VTK Pipeline Browser...")
    pipe = vtkPipelineBrowser (frame, renWin)
    pipe.show()

    pipe_segment = vtkPipelineBrowser(frame, renWin, (coneActor, axes))
    pipe_segment.show()

    app.MainLoop()
Esempio n. 53
0
def scalepolydata(polydata, scalefactor, inorigin=False):

    surfacecenter = polydata.GetCenter()
    toorigin = [0,0,0]
    toorigin[0] = -1*surfacecenter[0]
    toorigin[1] = -1*surfacecenter[1]
    toorigin[2] = -1*surfacecenter[2]

    # bring to origin + rotate + bring back
    transform = vtk.vtkTransform()
    transform.PostMultiply()
    transform.Translate(toorigin)
    transform.Scale(scalefactor,scalefactor,scalefactor)
    if not inorigin:
        transform.Translate(surfacecenter)

    transformfilter = vtk.vtkTransformFilter()
    transformfilter.SetTransform(transform)
    transformfilter.SetInputData(polydata)
    transformfilter.Update()

    return transformfilter.GetOutput()
Esempio n. 54
0
    def insert_slice(self, image, rotation):
        """Return a vtkPolyData object corresponding to a single
        slice with intensities given by the image variable and
        with the specified rotation. Rotation is a quaternion."""
        rotation_degrees = rotation.copy()
        rotation_degrees[0] = 2.*_numpy.arccos(rotation[0])*180./_numpy.pi
        transformation = _vtk.vtkTransform()
        transformation.RotateWXYZ(-rotation_degrees[0], rotation_degrees[3],
                                  rotation_degrees[2], rotation_degrees[1])
        input_poly_data = _vtk.vtkPolyData()
        input_poly_data.DeepCopy(self._template_poly_data)
        transform_filter = _vtk.vtkTransformFilter()
        transform_filter.SetInputData(input_poly_data)
        transform_filter.SetTransform(transformation)
        transform_filter.Update()
        this_poly_data = transform_filter.GetOutput()

        scalars = this_poly_data.GetPointData().GetScalars()
        for i in range(self._side):
            for j in range(self._side):
                scalars.SetTuple1(i*self._side+j, image[i, j])
        this_poly_data.Modified()
        return this_poly_data
  def __init__(self, SEMDataDirectory,variableDictionary  ):
     
     self.DataDictionary = {}
     self.DebugObjective = True
     self.DebugObjective = False
     self.ctx   = cl.create_some_context()
     self.queue = cl.CommandQueue(self.ctx)
     self.prg   = cl.Program(self.ctx, """
              __kernel void diff_sq(__global const float *a,
              __global const float *b, __global float *c)
              {
                int gid = get_global_id(0);
                c[gid] = (a[gid] - b[gid]) * (a[gid] - b[gid]);
              }
              """).build()

     # FIXME  should this be different ?  
     self.SEMDataDirectory = SEMDataDirectory 
  
     # FIXME vtk needs to be loaded AFTER kernel is built
     import vtk
     import vtk.util.numpy_support as vtkNumPy 
     print "using vtk version", vtk.vtkVersion.GetVTKVersion()
     print "read SEM data"

     start = time.clock()
     vtkSEMReader = vtk.vtkXMLUnstructuredGridReader()
     vtufileName = "%s/%d.vtu" % (self.SEMDataDirectory,0)
     vtkSEMReader.SetFileName( vtufileName )
     vtkSEMReader.SetPointArrayStatus("Temperature",1)
     vtkSEMReader.Update()
     elapsed = (time.clock() - start)
     print "read SEM data", elapsed
  
     # get registration parameters
  
     # register the SEM data to MRTI
     AffineTransform = vtk.vtkTransform()
     AffineTransform.Translate([ 
       float(variableDictionary['x_displace']),
       float(variableDictionary['y_displace']),
       float(variableDictionary['z_displace'])
                               ])
     # FIXME  notice that order of operations is IMPORTANT
     # FIXME   translation followed by rotation will give different results
     # FIXME   than rotation followed by translation
     # FIXME  Translate -> RotateZ -> RotateY -> RotateX -> Scale seems to be the order of paraview
     AffineTransform.RotateZ( float(variableDictionary['z_rotate'  ] ) ) 
     AffineTransform.RotateY( float(variableDictionary['y_rotate'  ] ) )
     AffineTransform.RotateX( float(variableDictionary['x_rotate'  ] ) )
     AffineTransform.Scale([1.e0,1.e0,1.e0])
     self.SEMRegister = vtk.vtkTransformFilter()
     self.SEMRegister.SetInput(vtkSEMReader.GetOutput())
     self.SEMRegister.SetTransform(AffineTransform)
     self.SEMRegister.Update()
  
     print "write transform output"
     if ( self.DebugObjective ):
        vtkSEMWriter = vtk.vtkDataSetWriter()
        vtkSEMWriter.SetFileTypeToBinary()
        semfileName = "%s/semtransform%04d.vtk" % (self.SEMDataDirectory,0)
        print "writing ", semfileName 
        vtkSEMWriter.SetFileName( semfileName )
        vtkSEMWriter.SetInput(self.SEMRegister.GetOutput())
        vtkSEMWriter.Update()
Esempio n. 56
0
    def readFile(self,filename,verbose=False,ts = 0):  #ts required only for ensight files
        self.filename=os.path.abspath(filename)
        
        if os.path.splitext(self.filename)[1] == '.vtk':
            self.readVTK()
        elif os.path.splitext(self.filename)[1] == '.CASE':
            self.readEnSight(ts)
        self.reader.Update()
        self.output = self.reader.GetOutput()
        self.outputPort = self.reader.GetOutputPort()

        
        #a workaround: in binary vtk files (OpenFOAM, Truchas), the arrays are given, but with no information 
        #if they are scalars or vectors, therefore vectors are not rotated from 2D to 3D
        #it's probably a bug in current implementation of VTK
        self.pointData = self.output.GetPointData()
        self.cellData = self.output.GetCellData()
        if not self.pointData.GetVectors():
            self.pointData.SetVectors(self.pointData.GetArray(self.velArray[self.solver]))
            self.cellData.SetVectors(self.cellData.GetArray(self.velArray[self.solver]))
        
        #transformations:
        self.transform = vtk.vtkTransform() #transform is a matrix, and identity at the beginning, which is immediately multiplied by using Translate, Rotate etc.
        self.transform.PostMultiply()  #required to apply the transformation in the given order
        
        if self.sim=='2D':
            self.transform.RotateX(90)
            if self.solver in ['Gerris','Thetis']:
                self.transform.Scale(1.,0.,1.)
        if 'rotated' in self.filename:
            self.transform.Translate(0,0,-4.22)
            self.transform.RotateY(-10) #it is in XZ plane

        if self.solver == 'Gerris' and ('propagation' in self.filename or 'runup' in self.filename or 'stillwater' in self.filename):  
            self.transform.Translate(0,0,-1)#the water level is originally at z=1
        self.transformFilter=vtk.vtkTransformFilter()
        self.transformFilter.SetInputConnection(self.outputPort)
        self.transformFilter.SetTransform(self.transform)
        self.transformFilter.Update()
        self.output = self.transformFilter.GetOutput()
        self.outputPort = self.transformFilter.GetOutputPort()

        if self.output.GetCellData().GetNumberOfArrays() == 0:
            self.converter = vtk.vtkPointDataToCellData()
            self.converter.SetInputConnection(self.outputPort)
            self.converter.PassPointDataOn()
            self.converter.Update()
            self.output=self.converter.GetOutput() #later on output will always have at least cell data
            self.outputPort = self.converter.GetOutputPort()
        elif self.output.GetPointData().GetNumberOfArrays() == 0:
            self.converter = vtk.vtkCellDataToPointData()
            self.converter.SetInputConnection(self.outputPort)
            self.converter.PassCellDataOn()
            self.converter.Update()
            self.output=self.converter.GetOutput() #later on output will always have at least point data
            self.outputPort = self.converter.GetOutputPort()
        
        #self.output.Update()
        self.pointData = self.output.GetPointData()
        self.cellData  = self.output.GetCellData()
        
        
        self.getArrayNames(verbose)
        self.Ncells=self.output.GetNumberOfCells()
        
        #self.header = self.reader.GetHeader()
        self.time=-1
Esempio n. 57
0
arrowIM = vtk.vtkImplicitModeller()
arrowIM.SetInputData(pd)
arrowIM.SetSampleDimensions(50,20,8)
arrowCF = vtk.vtkContourFilter()
arrowCF.SetInputConnection(arrowIM.GetOutputPort())
arrowCF.SetValue(0,0.2)
arrowWT = vtk.vtkWarpTo()
arrowWT.SetInputConnection(arrowCF.GetOutputPort())
arrowWT.SetPosition(5,0,5)
arrowWT.SetScaleFactor(0.85)
arrowWT.AbsoluteOn()
arrowT = vtk.vtkTransform()
arrowT.RotateY(60)
arrowT.Translate(-1.33198,0,-1.479)
arrowT.Scale(1,0.5,1)
arrowTF = vtk.vtkTransformFilter()
arrowTF.SetInputConnection(arrowWT.GetOutputPort())
arrowTF.SetTransform(arrowT)
arrowMapper = vtk.vtkDataSetMapper()
arrowMapper.SetInputConnection(arrowTF.GetOutputPort())
arrowMapper.ScalarVisibilityOff()
# draw the azimuth arrows
a1Actor = vtk.vtkLODActor()
a1Actor.SetMapper(arrowMapper)
a1Actor.RotateZ(180)
a1Actor.SetPosition(1,0,-1)
a1Actor.GetProperty().SetColor(1,0.3,0.3)
a1Actor.GetProperty().SetSpecularColor(1,1,1)
a1Actor.GetProperty().SetSpecular(0.3)
a1Actor.GetProperty().SetSpecularPower(20)
a1Actor.GetProperty().SetAmbient(0.2)
TargetLMReader = vtk.vtkPolyDataReader()
TargetLMReader.SetFileName("TargetLandmarks.vtk");
TargetLMReader.Update()
#print TargetLMReader.GetOutput().GetPoints()


# create transformation
LandmarkTransform = vtk.vtkLandmarkTransform()
LandmarkTransform.SetSourceLandmarks(SourceLMReader.GetOutput().GetPoints() )
LandmarkTransform.SetTargetLandmarks(TargetLMReader.GetOutput().GetPoints() )
LandmarkTransform.SetModeToRigidBody()
LandmarkTransform.Update()
print LandmarkTransform.GetMatrix()

# apply transform
transformFilter = vtk.vtkTransformFilter()
#transformFilter.SetInput(vtkCylinder.GetOutput() ) 
transformFilter.SetInput(trianglefilter.GetOutput() ) 
transformFilter.SetTransform( LandmarkTransform) 
transformFilter.Update()

# write model
modelWriter = vtk.vtkDataSetWriter()
modelWriter.SetInput(transformFilter.GetOutput())
modelWriter.SetFileName("needle.vtk")
modelWriter.SetFileTypeToBinary()
modelWriter.Update()

# read image/ROI
ImageReader = vtk.vtkDataSetReader()
ImageReader.SetFileName("newimage.vtk")
def ProjectImagingMesh(fem_mesh_file): 
  import vtk
  import vtk.util.numpy_support as vtkNumPy
  import scipy.io as scipyio
  # echo vtk version info
  print "using vtk version", vtk.vtkVersion.GetVTKVersion()
  # FIXME notice that order of operations is IMPORTANT
  # FIXME translation followed by rotation will give different results
  # FIXME than rotation followed by translation
  # FIXME Translate -> RotateZ -> RotateY -> RotateX -> Scale seems to be the order of paraview
  AffineTransform = vtk.vtkTransform()
  # should be in meters
  AffineTransform.Translate(.0000001,.0000001,.0000001)
  AffineTransform.RotateZ( 0 )
  AffineTransform.RotateY( 0 )
  AffineTransform.RotateX( 0 )
  AffineTransform.Scale([1.,1.,1.])
  # get homogenius 4x4 matrix of the form
  # A | b
  # matrix = -----
  # 0 | 1
  #
  matrix = AffineTransform.GetConcatenatedTransform(0).GetMatrix()
  #print matrix
  RotationMatrix = [[matrix.GetElement(0,0),matrix.GetElement(0,1),matrix.GetElement(0,2)],
                    [matrix.GetElement(1,0),matrix.GetElement(1,1),matrix.GetElement(1,2)],
                    [matrix.GetElement(2,0),matrix.GetElement(2,1),matrix.GetElement(2,2)]]
  Translation = [matrix.GetElement(0,3),matrix.GetElement(1,3),matrix.GetElement(2,3)]
  #print RotationMatrix ,Translation
  

  #laserTip = AffineTransform.TransformPoint( laserTip )
  #laserOrientation = AffineTransform.TransformVector( laserOrientation )

  # read imaging data geometry that will be used to project FEM data onto
  #vtkReader = vtk.vtkXMLImageDataReader()
  vtkReader = vtk.vtkDataSetReader()
  #vtkReader.SetFileName('/data/cjmaclellan/mdacc/nano/spio/spioVTK/67_11/tmap_67_11.0000.vtk' )
  vtkReader.SetFileName('/data/cjmaclellan/mdacc/deltap_phantom_oct10/VTKtmaps/S695/S695.0000.vtk' )
  #vtkReader.SetFileName('/data/cjmaclellan/mdacc/nano/nrtmapsVTK/R695/R695.0000.vtk' ) 
  vtkReader.Update()
  templateImage = vtkReader.GetOutput()
  dimensions = templateImage.GetDimensions()
  spacing = templateImage.GetSpacing()
  origin = templateImage.GetOrigin()
  print spacing, origin, dimensions 
  #fem.SetImagingDimensions( dimensions ,origin,spacing)

  ## project imaging onto fem mesh
  #if (vtk != None):
  # vtkImageReader = vtk.vtkDataSetReader()
  # vtkImageReader.SetFileName('/data/fuentes/mdacc/uqModelStudy/dog1_980/temperature.%04d.vtk' % timeID )
  # vtkImageReader.Update()
  # image_cells = vtkImageReader.GetOutput().GetPointData()
  # data_array = vtkNumPy.vtk_to_numpy(image_cells.GetArray('scalars'))
  # v1 = PETSc.Vec().createWithArray(data_array, comm=PETSc.COMM_SELF)
  # fem.ProjectImagingToFEMMesh("MRTI", v1)
  # fem.StoreSystemTimeStep("MRTI",timeID )
  #
  # # extract voi for QOI
  # vtkVOIExtract = vtk.vtkExtractVOI()
  # vtkVOIExtract.SetInput( vtkImageReader.GetOutput() )
  # VOI = [10,100,100,150,0,0]
  # vtkVOIExtract.SetVOI( VOI )
  # vtkVOIExtract.Update()
  # mrti_point_data= vtkVOIExtract.GetOutput().GetPointData()
  # mrti_array = vtkNumPy.vtk_to_numpy(mrti_point_data.GetArray('scalars'))
  # #print mrti_array
  # #print type(mrti_array)

  # Interpolate FEM onto imaging data structures
  vtkExodusIIReader = vtk.vtkExodusIIReader()
  vtkExodusIIReader.SetFileName( fem_mesh_file )
  vtkExodusIIReader.SetPointResultArrayStatus("u0",1)
  vtkExodusIIReader.SetPointResultArrayStatus("u0*",1)
  vtkExodusIIReader.SetPointResultArrayStatus("u1",1)

  matsize = int(dimensions[1])#get matrix size
  #preallocate size of arrays
  u0_array_1 = scipy.zeros((matsize,matsize))
  u0_array_2 = scipy.zeros((matsize,matsize,ntime*nsubstep))
  u1_array_1 = scipy.zeros((matsize,matsize))
  u1_array_2 = scipy.zeros((matsize,matsize,ntime*nsubstep))
  u0star_array_1 = scipy.zeros((matsize,matsize))
  u0star_array_2 = scipy.zeros((matsize,matsize,ntime*nsubstep))

  #for timeID in range(1,2):
  for timeID in range(1,ntime*nsubstep):
    vtkExodusIIReader.SetTimeStep(timeID-1)
    vtkExodusIIReader.Update()
    
    # apply the transform
    TransformedFEMMesh = None
    if vtkExodusIIReader.GetOutput().IsA("vtkMultiBlockDataSet"):
      AppendBlocks = vtk.vtkAppendFilter()
      iter = vtkExodusIIReader.GetOutput().NewIterator()
      iter.UnRegister(None)
      iter.InitTraversal()
      # loop over blocks...
      while not iter.IsDoneWithTraversal():
          curInput = iter.GetCurrentDataObject()
          vtkTransformFEMMesh = vtk.vtkTransformFilter()
          vtkTransformFEMMesh.SetTransform( AffineTransform )
          vtkTransformFEMMesh.SetInput( curInput )
          vtkTransformFEMMesh.Update()
          AppendBlocks.AddInput( vtkTransformFEMMesh.GetOutput() )
          AppendBlocks.Update( )
          iter.GoToNextItem();
      TransformedFEMMesh = AppendBlocks.GetOutput()
    else:
      vtkTransformFEMMesh = vtk.vtkTransformFilter()
      vtkTransformFEMMesh.SetTransform( AffineTransform )
      vtkTransformFEMMesh.SetInput( vtkExodusIIReader.GetOutput() )
      vtkTransformFEMMesh.Update()
      TransformedFEMMesh = vtkTransformFEMMesh.GetOutput()

    # reflect
    #vtkReflectX = vtk.vtkReflectionFilter()
    #vtkReflectX.SetPlaneToXMin()
    #vtkReflectX.SetInput( TransformedFEMMesh )
    #vtkReflectX.Update()

    # reflect
    #vtkReflectZ = vtk.vtkReflectionFilter()
    #vtkReflectZ.SetPlaneToZMax()
    #vtkReflectZ.SetInput( vtkReflectX.GetOutput() )
    #vtkReflectZ.Update()

    # reuse ShiftScale Geometry
    vtkResample = vtk.vtkCompositeDataProbeFilter()
    vtkResample.SetInput( templateImage )
    vtkResample.SetSource( TransformedFEMMesh )
    #vtkResample.SetSource( vtkReflectZ.GetOutput() )
    vtkResample.Update()
    fem_point_data= vtkResample.GetOutput().GetPointData()
    u0_array = vtkNumPy.vtk_to_numpy(fem_point_data.GetArray('u0'))
    u0star_array = vtkNumPy.vtk_to_numpy(fem_point_data.GetArray('u0*'))
    u1_array = vtkNumPy.vtk_to_numpy(fem_point_data.GetArray('u1'))
 
    
    #go from 1x256^2 array to 256X256 array for each timestep
    for nn in range(0,matsize):
     u0_array_1[nn,:]=u0_array[nn*matsize:(nn+1)*matsize]
     u0star_array_1[nn,:]=u0star_array[nn*matsize:(nn+1)*matsize]
     u1_array_1[nn,:]=u1_array[nn*matsize:(nn+1)*matsize]
   
    #apply proper rotations/reflections and combine 2D arrays into 3D array 
    u0_array_2[:,:,timeID-1]=numpy.fliplr(numpy.rot90(u0_array_1,k=3))
    u0star_array_2[:,:,timeID-1]=numpy.fliplr(numpy.rot90(u0star_array_1,k=3))
    u1_array_2[:,:,timeID-1]=numpy.fliplr(numpy.rot90(u1_array_1,k=3))
    
    # write numpy to disk in matlab
    #scipyio.savemat("MS795.%04d.mat" % (timeID), {'u0':u1_array,'MRTI0':MRTI0_array })

    # write output
    print "writing ", timeID
    vtkStatsWriter = vtk.vtkDataSetWriter()
    vtkStatsWriter.SetFileTypeToBinary()
    vtkStatsWriter.SetFileName("test.%04d.vtk" % timeID )
    vtkStatsWriter.SetInput(vtkResample.GetOutput())
    vtkStatsWriter.Update()

  scipyio.savemat("S695.mat",{'ModelFluence':u1_array_2,'MRTI':u0star_array_2,'ModelTemp':u0_array_2})
Esempio n. 60
0
    def reset_camera(self):
        self.ren.ResetCamera()
        self.ren.ResetCameraClippingRange()

        if self.experiment is not None:
            calib = self.experiment.calibration_points
            focal_point = self.experiment.sphere_center
            view_up = calib["vertex"]-focal_point
            mid_point = (calib["nasion"]*0.7+calib["vertex"]*0.3)
            pos_vec = mid_point - focal_point
            pos = focal_point+pos_vec*15

            cam = self.ren.GetActiveCamera()
            cam.SetFocalPoint(focal_point)
            cam.SetPosition(pos)
            cam.SetViewUp(view_up)
            self.light.SetFocalPoint(focal_point)
            self.light2.SetFocalPoint(focal_point)
            self.light3.SetFocalPoint(focal_point)

            left_mid_point= (calib["vertex"]+calib["left"])/2
            right_mid_point= (calib["vertex"]+calib["right"])/2

            #top_left_pos = focal_point + (left_mid_point-focal_point)*5
            #top_right_pos = focal_point + (right_mid_point-focal_point)*5
            right_pos = focal_point + (calib["right"]-focal_point)*15

            top_pos = focal_point+(calib["vertex"]-focal_point)*15
            top_front_pos = focal_point+((calib["nasion"]+calib["vertex"])/2-focal_point)*15

            #self.light.SetPosition(top_left_pos)
            #self.light2.SetPosition(top_right_pos)

            trans = vtk.vtkTransform()
            view_up_uni = view_up/np.linalg.norm(view_up)

            n1 = calib["nasion"]-focal_point
            n1 = n1 - (np.dot(n1, view_up_uni) * view_up_uni)
            n1 /= np.linalg.norm(n1)
            n2 = np.array((0,0,1))
            n2 = n2 - (np.dot(n2, view_up_uni) * view_up_uni)
            n2 /= np.linalg.norm(n2)
            v2 = np.cross(n2,n1)
            angle2 = np.arcsin(np.linalg.norm(v2))
            angle2_deg = 180*angle2/np.pi

            v1 = np.cross((0,1,0),view_up_uni)
            angle1 = np.arcsin(np.linalg.norm(v1))
            angle1_deg = 180*angle1/np.pi

            trans.RotateWXYZ(angle2_deg,view_up_uni)
            trans.RotateWXYZ(angle1_deg,*v1)

            acs = vtk.vtkPropCollection()
            self.axes_actor.GetActors(acs)
            for i in xrange(acs.GetNumberOfItems()):
                ac = acs.GetItemAsObject(i)
                mapper = ac.GetMapper()
                source_con = mapper.GetInputConnection(0,0)
                source = source_con.GetProducer()
                if not isinstance(source,vtk.vtkTransformFilter):
                    trans_filter = vtk.vtkTransformFilter()
                    trans_filter.SetInputConnection(source.GetOutputPort())
                    trans_filter.SetTransform(trans)
                    mapper.SetInputConnection(trans_filter.GetOutputPort())
                else:
                    source.SetTransform(trans)

            #self.axes_actor.RotateY(180)

            self.light.SetPosition(top_pos)
            self.light2.SetPosition(top_front_pos)
            self.light3.SetPosition(right_pos)
            self.light3.SetIntensity(0.5)
            self.ren.ResetCameraClippingRange()