コード例 #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
コード例 #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)
コード例 #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()
コード例 #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()
コード例 #5
0
ファイル: gen_vtk_tree.py プロジェクト: Trineon/lisa
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()
コード例 #6
0
ファイル: Griutis2.py プロジェクト: wincrash/PythonScripts
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()
コード例 #7
0
ファイル: Griutis.py プロジェクト: wincrash/PythonScripts
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()
コード例 #8
0
ファイル: vmtkimagewriter.py プロジェクト: Clemson-MSE/vmtk
 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()
コード例 #9
0
ファイル: visualize.py プロジェクト: Andrew-AbiMansour/PyDEM
    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)
コード例 #10
0
ファイル: slice_module.py プロジェクト: connectthefuture/emc
    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
コード例 #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
コード例 #12
0
ファイル: RapidPrototype.py プロジェクト: njneeteson/Bonelab
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() )
コード例 #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()
コード例 #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
コード例 #15
0
ファイル: VelocityVector.py プロジェクト: sldion/DNACC
 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 ()
コード例 #16
0
 def __init__(self, module_manager):
     SimpleVTKClassModuleBase.__init__(
         self, module_manager,
         vtk.vtkTransformFilter(), 'Processing.',
         ('vtkPointSet',), ('vtkPointSet',),
         replaceDoc=True,
         inputFunctions=None, outputFunctions=None)
コード例 #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)
コード例 #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)
コード例 #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()
コード例 #20
0
ファイル: vmtkmeshtransform.py プロジェクト: samsmu/vmtk
    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()
コード例 #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
コード例 #22
0
 def wrapOpImp(self):
     transformFilter = vtk.vtkTransformFilter();
     transformFilter.SetTransform(self.getTransform());
     transformFilter.SetInputData(self.data);
     transformFilter.Update();
     result = transformFilter.GetOutput();
     return result;
コード例 #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()
コード例 #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()
コード例 #25
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()
コード例 #26
0
ファイル: vmtkimagewriter.py プロジェクト: vmtk/vmtk
 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()
コード例 #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()
コード例 #28
0
ファイル: xmlReader.py プロジェクト: mfassler/jaivis
 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
コード例 #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()
コード例 #30
0
ファイル: Tori.py プロジェクト: SCIInstitute/ShapeWorks
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
コード例 #31
0
ファイル: slice_module.py プロジェクト: FilipeMaia/emc
    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
コード例 #32
0
ファイル: Helpers.py プロジェクト: oblakr24/simvis-masters
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()
コード例 #33
0
ファイル: mesh.py プロジェクト: yuanyuan29/vesseg
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()
コード例 #34
0
ファイル: geometric_objects.py プロジェクト: nickvazz/pyvista
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())
コード例 #35
0
ファイル: GeoGraticle.py プロジェクト: zwlshine/VTKExamples
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()
コード例 #36
0
ファイル: vtklib.py プロジェクト: ajgeers/utils
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()
コード例 #37
0
 def __init__(self, module_manager):
     SimpleVTKClassModuleBase.__init__(self,
                                       module_manager,
                                       vtk.vtkTransformFilter(),
                                       'Processing.', ('vtkPointSet', ),
                                       ('vtkPointSet', ),
                                       replaceDoc=True,
                                       inputFunctions=None,
                                       outputFunctions=None)
コード例 #38
0
ファイル: vtklib.py プロジェクト: ajgeers/utils
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()
コード例 #39
0
ファイル: vtklib.py プロジェクト: sheep-z/utils
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()
コード例 #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()
コード例 #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()
コード例 #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
コード例 #43
0
ファイル: vtklib.py プロジェクト: sheep-z/utils
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()
コード例 #44
0
ファイル: vmtkmeshscaling.py プロジェクト: vmtk/vmtk
    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()
コード例 #45
0
ファイル: testing.py プロジェクト: zenotech/SMTK
 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)
コード例 #46
0
ファイル: vmtkmeshscaling.py プロジェクト: ChaliZhg/vmtk
    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()
コード例 #47
0
ファイル: VoxelizerModule.py プロジェクト: imclab/vistrails
 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)
コード例 #48
0
ファイル: OutputGeneration.py プロジェクト: UCL/hemelb
    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
コード例 #49
0
 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))
コード例 #50
0
ファイル: Streamlines.py プロジェクト: sldion/DNACC
    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)
コード例 #51
0
ファイル: vmtkmeshtransformtoras.py プロジェクト: samsmu/vmtk
    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()
コード例 #52
0
ファイル: vtkPipeline.py プロジェクト: fvpolpeta/devide
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()
コード例 #53
0
ファイル: basefunctions.py プロジェクト: catactg/SUM
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()
コード例 #54
0
ファイル: slice_plotter.py プロジェクト: ekeberg/Python-tools
    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
コード例 #55
0
  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()
コード例 #56
0
ファイル: vtkextract.py プロジェクト: pawelaw/phd
    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
コード例 #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)
コード例 #58
0
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")
コード例 #59
0
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})
コード例 #60
0
ファイル: vtk_tms_widget.py プロジェクト: deherinu/TmsViewer
    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()