Ejemplo n.º 1
0
def test_mesh_to_geometry():
    # 3D
    Dimension = 3
    PixelType = itk.ctype('double')
    MeshType = itk.Mesh[PixelType, Dimension]
    mesh = MeshType.New()
    PointType = itk.Point[itk.F, Dimension]
    point0 = PointType()
    point0[0] = -1
    point0[1] = -1
    point0[2] = 0
    mesh.SetPoint(0, point0)
    mesh.SetPointData(0, 8.0)
    point1 = PointType()
    point1[0] = 1
    point1[1] = -1
    point1[2] = 0
    mesh.SetPointData(1, 9.0)
    mesh.SetPoint(1, point1)
    point2 = PointType()
    point2[0] = 1
    point2[1] = 1
    point2[2] = 0
    mesh.SetPoint(2, point2)
    mesh.SetPointData(2, 19.0)
    point3 = PointType()
    point3[0] = 1
    point3[1] = 1
    point3[2] = 0
    mesh.SetPoint(3, point3)
    mesh.SetPointData(3, 24.0)

    geometry = to_geometry(mesh)

    points = mesh.GetPoints()
    point_template = itk.template(points)
    identifier_type = point_template[1][0]
    element_type = point_template[1][1]

    point_values = itk.array_from_vector_container(points)

    assert (geometry['vtkClass'] == 'vtkPolyData')
    assert (geometry['points']['vtkClass'] == 'vtkPoints')
    assert (geometry['points']['numberOfComponents'] == 3)
    assert (geometry['points']['dataType'] == 'Float32Array')
    assert (geometry['points']['size'] == 4 * 3)
    assert (np.array_equal(geometry['points']['values'],
                           point_values.astype(np.float32)))
    assert (geometry['pointData']['vtkClass'] == 'vtkDataSetAttributes')
    assert (geometry['pointData']['arrays'][0]['data']['vtkClass'] ==
            'vtkDataArray')
    assert (geometry['pointData']['arrays'][0]['data']['name'] == 'Point Data')
    assert (
        geometry['pointData']['arrays'][0]['data']['numberOfComponents'] == 1)
    assert (geometry['pointData']['arrays'][0]['data']['size'] == 4)
    assert (geometry['pointData']['arrays'][0]['data']['dataType'] ==
            'Float64Array')
    assert (np.array_equal(
        geometry['pointData']['arrays'][0]['data']['values'],
        np.array([8.0, 9.0, 19.0, 24.0], dtype=np.float64)))
Ejemplo n.º 2
0
def test_itkpolylineparametricpath_to_geometry():
    Dimension = 2
    polyline = itk.PolyLineParametricPath[Dimension].New()
    polyline.AddVertex([3.0, 3.0])
    polyline.AddVertex([4.0, 7.0])
    polyline.AddVertex([5.0, 5.0])

    geometry = to_geometry(polyline)

    assert (geometry['vtkClass'] == 'vtkPolyData')
    assert (geometry['points']['vtkClass'] == 'vtkPoints')
    assert (geometry['points']['numberOfComponents'] == 3)
    assert (geometry['points']['dataType'] == 'Float32Array')
    assert (geometry['points']['size'] == 3 * 3)
    assert (np.array_equal(
        geometry['points']['values'],
        np.array([3.0, 3.0, -5.0e-6, 4.0, 7.0, -5e-6, 5.0, 5.0,
                  -5e-6]).astype(np.float32)))

    assert (geometry['verts']['vtkClass'] == 'vtkCellArray')
    assert (geometry['verts']['numberOfComponents'] == 1)
    assert (geometry['verts']['dataType'] == 'Uint32Array')
    assert (geometry['verts']['size'] == 6)
    assert (np.array_equal(geometry['verts']['values'], [1, 0, 1, 1, 1, 2]))
    assert (geometry['lines']['vtkClass'] == 'vtkCellArray')
    assert (geometry['lines']['numberOfComponents'] == 1)
    assert (geometry['lines']['dataType'] == 'Uint32Array')
    assert (geometry['lines']['size'] == 6)
    assert (np.array_equal(geometry['lines']['values'], [2, 0, 1, 2, 1, 2]))
def test_vtkpolydata_to_geometry():
    vtk = pytest.importorskip("vtk")
    from vtk.util.numpy_support import vtk_to_numpy

    cone_source = vtk.vtkConeSource()
    cone_source.Update()
    cone = cone_source.GetOutput()

    geometry = to_geometry(cone)

    assert (geometry['vtkClass'] == 'vtkPolyData')

    points = cone.GetPoints()
    assert (geometry['points']['vtkClass'] == 'vtkPoints')
    assert (geometry['points']['numberOfComponents'] == 3)
    assert (geometry['points']['dataType'] == 'Float32Array')
    assert (geometry['points']['size'] == points.GetNumberOfPoints() * 3)
    assert (np.array_equal(
        geometry['points']['values'],
        vtk_to_numpy(points.GetData()).astype(np.float32).ravel()))

    polys = cone.GetPolys()
    assert (geometry['polys']['vtkClass'] == 'vtkCellArray')
    assert (geometry['polys']['numberOfComponents'] == 1)
    assert (geometry['polys']['dataType'] == 'Uint32Array')
    assert (geometry['polys']['size'] == polys.GetData().GetNumberOfValues())
    assert (np.array_equal(
        geometry['polys']['values'],
        vtk_to_numpy(polys.GetData()).astype(np.uint32).ravel()))
Ejemplo n.º 4
0
    def add_mesh(self, mesh, color=None, scalars=None, clim=None,
                 opacity=1.0, n_colors=256, cmap='Viridis (matplotlib)',
                 **kwargs):
        """Add mesh to the scene."""
        if not pv.is_pyvista_dataset(mesh):
            mesh = pv.wrap(mesh)
        mesh = mesh.copy()
        if scalars is None and color is None:
            scalars = mesh.active_scalars_name

        if scalars is not None:
            array = mesh[scalars].copy()
            mesh.clear_arrays()
            mesh[scalars] = array
            mesh.active_scalars_name = scalars
        elif color is not None:
            mesh.clear_arrays()


        mesh = to_geometry(mesh)
        self._geometries.append(mesh)
        self._geometry_colors.append(pv.parse_color(color))
        self._geometry_opacities.append(opacity)
        self._cmap = cmap

        return
def test_mesh_to_geometry():
    # 3D
    Dimension = 3
    PixelType = itk.ctype('double')
    MeshType = itk.Mesh[PixelType, Dimension]
    mesh = MeshType.New()
    PointType = itk.Point[itk.F, Dimension]
    point0 = PointType()
    point0[0] = -1
    point0[1] = -1
    point0[2] = 0
    mesh.SetPoint(0, point0)
    point1 = PointType()
    point1[0] = 1
    point1[1] = -1
    point1[2] = 0
    mesh.SetPoint(1, point1)
    point2 = PointType()
    point2[0] = 1
    point2[1] = 1
    point2[2] = 0
    mesh.SetPoint(2, point2)
    point3 = PointType()
    point3[0] = 1
    point3[1] = 1
    point3[2] = 0
    mesh.SetPoint(3, point3)

    geometry = to_geometry(mesh)

    points = mesh.GetPoints()
    point_template = itk.template(points)
    element_type = point_template[1][1]
    point_values = itk.PyVectorContainer[
        element_type].array_from_vector_container(points)

    assert (geometry['vtkClass'] == 'vtkPolyData')
    assert (geometry['points']['vtkClass'] == 'vtkPoints')
    assert (geometry['points']['numberOfComponents'] == 3)
    assert (geometry['points']['dataType'] == 'Float32Array')
    assert (geometry['points']['size'] == 4 * 3)
    assert (np.array_equal(geometry['points']['values'],
                           point_values.astype(np.float32)))
Ejemplo n.º 6
0
    def add_mesh(self,
                 mesh,
                 color=None,
                 scalars=None,
                 opacity=1.0,
                 smooth_shading=False):
        """Add a PyVista/VTK mesh or dataset.

        Adds any PyVista/VTK mesh that itkwidgets can wrap to the
        scene.

        Parameters
        ----------
        mesh : pyvista.DataSet or pyvista.MultiBlock
            Any PyVista or VTK mesh is supported. Also, any dataset
            that :func:`pyvista.wrap` can handle including NumPy arrays of XYZ
            points.

        color : string or 3 item list, optional, defaults to white
            Use to make the entire mesh have a single solid color.
            Either a string, RGB list, or hex color string.  For example:
            ``color='white'``, ``color='w'``, ``color=[1, 1, 1]``, or
            ``color='#FFFFFF'``. Color will be overridden if scalars are
            specified.

        scalars : str or numpy.ndarray, optional
            Scalars used to "color" the mesh.  Accepts a string name of an
            array that is present on the mesh or an array equal
            to the number of cells or the number of points in the
            mesh.  Array should be sized as a single vector. If both
            ``color`` and ``scalars`` are ``None``, then the active scalars are
            used.

        opacity : float, optional
            Opacity of the mesh. If a single float value is given, it will be
            the global opacity of the mesh and uniformly applied everywhere -
            should be between 0 and 1.  Default 1.0

        smooth_shading : bool, optional
            Smooth mesh surface mesh by taking into account surface
            normals.  Surface will appear smoother while sharp edges
            will still look sharp.  Default False.

        """
        if not pv.is_pyvista_dataset(mesh):
            mesh = pv.wrap(mesh)

        # smooth shading requires point normals to be freshly computed
        if smooth_shading:
            # extract surface if mesh is exterior
            if not isinstance(mesh, pv.PolyData):
                grid = mesh
                mesh = grid.extract_surface()
                ind = mesh.point_arrays['vtkOriginalPointIds']
                # remap scalars
                if isinstance(scalars, np.ndarray):
                    scalars = scalars[ind]

            mesh.compute_normals(cell_normals=False, inplace=True)
        elif 'Normals' in mesh.point_arrays:
            # if 'normals' in mesh.point_arrays:
            mesh.point_arrays.pop('Normals')

        # make the scalars active
        if isinstance(scalars, str):
            if scalars in mesh.point_arrays or scalars in mesh.cell_arrays:
                array = mesh[scalars].copy()
            else:
                raise ValueError(f'Scalars ({scalars}) not in mesh')
            mesh[scalars] = array
            mesh.active_scalars_name = scalars
        elif isinstance(scalars, np.ndarray):
            array = scalars
            scalar_name = '_scalars'
            mesh[scalar_name] = array
            mesh.active_scalars_name = scalar_name
        elif color is not None:
            mesh.active_scalars_name = None

        # itkwidgets does not support VTK_ID_TYPE
        if 'vtkOriginalPointIds' in mesh.point_arrays:
            mesh.point_arrays.pop('vtkOriginalPointIds')

        if 'vtkOriginalCellIds' in mesh.cell_arrays:
            mesh.cell_arrays.pop('vtkOriginalCellIds')

        from itkwidgets._transform_types import to_geometry
        mesh = to_geometry(mesh)
        self._geometries.append(mesh)
        self._geometry_colors.append(pv.parse_color(color))
        self._geometry_opacities.append(opacity)
Ejemplo n.º 7
0
def test_vtkpolydata_to_geometry():
    vtk = pytest.importorskip("vtk")
    from vtk.util.numpy_support import vtk_to_numpy

    cone_source = vtk.vtkConeSource()
    cone_source.Update()
    cone = cone_source.GetOutput()

    points = cone.GetPoints()
    point_scalars = vtk.vtkFloatArray()
    for ii in range(points.GetNumberOfPoints()):
        point_scalars.InsertTuple1(ii, ii)
    cone.GetPointData().SetScalars(point_scalars)

    cell_scalars = vtk.vtkFloatArray()
    for ii in range(cone.GetNumberOfCells()):
        cell_scalars.InsertTuple1(ii, ii)
    cone.GetCellData().SetScalars(cell_scalars)

    geometry = to_geometry(cone)

    assert (geometry['vtkClass'] == 'vtkPolyData')

    assert (geometry['points']['vtkClass'] == 'vtkPoints')
    assert (geometry['points']['numberOfComponents'] == 3)
    assert (geometry['points']['dataType'] == 'Float32Array')
    assert (geometry['points']['size'] == points.GetNumberOfPoints() * 3)
    assert (np.array_equal(
        geometry['points']['values'],
        vtk_to_numpy(points.GetData()).astype(np.float32).ravel()))

    polys = cone.GetPolys()
    assert (geometry['polys']['vtkClass'] == 'vtkCellArray')
    assert (geometry['polys']['numberOfComponents'] == 1)
    assert (geometry['polys']['dataType'] == 'Uint32Array')
    assert (geometry['polys']['size'] == polys.GetData().GetNumberOfValues())
    assert (np.array_equal(
        geometry['polys']['values'],
        vtk_to_numpy(polys.GetData()).astype(np.uint32).ravel()))

    assert (geometry['pointData']['vtkClass'] == 'vtkDataSetAttributes')
    assert (geometry['pointData']['arrays'][0]['data']['vtkClass'] ==
            'vtkDataArray')
    assert (
        geometry['pointData']['arrays'][0]['data']['numberOfComponents'] == 1)
    assert (geometry['pointData']['arrays'][0]['data']['size'] == 7)
    assert (geometry['pointData']['arrays'][0]['data']['dataType'] ==
            'Float32Array')
    assert (np.array_equal(
        geometry['pointData']['arrays'][0]['data']['values'],
        np.arange(points.GetNumberOfPoints(), dtype=np.float32)))

    assert (geometry['cellData']['vtkClass'] == 'vtkDataSetAttributes')
    assert (geometry['cellData']['arrays'][0]['data']['vtkClass'] ==
            'vtkDataArray')
    assert (
        geometry['cellData']['arrays'][0]['data']['numberOfComponents'] == 1)
    assert (geometry['cellData']['arrays'][0]['data']['size'] == 7)
    assert (geometry['cellData']['arrays'][0]['data']['dataType'] ==
            'Float32Array')
    assert (np.array_equal(
        geometry['cellData']['arrays'][0]['data']['values'],
        np.arange(cone.GetNumberOfCells(), dtype=np.float32)))