Spaces:
Runtime error
Runtime error
import vtk | |
from mayavi import mlab | |
import numpy as np | |
def create_disk(x, y, z, radius): | |
# Create a disk (circle) in the xy-plane | |
disk_source = vtk.vtkDiskSource() | |
disk_source.SetInnerRadius(0) | |
disk_source.SetOuterRadius(radius) | |
disk_source.SetCircumferentialResolution(30) | |
disk_source.SetRadialResolution(1) | |
disk_source.Update() | |
# Move the disk to the specified position in 3D space | |
transform = vtk.vtkTransform() | |
transform.Translate(x, y, z) | |
transform_filter = vtk.vtkTransformPolyDataFilter() | |
transform_filter.SetInputData(disk_source.GetOutput()) | |
transform_filter.SetTransform(transform) | |
transform_filter.Update() | |
return transform_filter.GetOutput() | |
def create_tube_from_disks(disks): | |
# Combine multiple disks to form the tube mesh | |
points = vtk.vtkPoints() | |
lines = vtk.vtkCellArray() | |
point_id = 0 | |
for disk in disks: | |
num_points = disk.GetNumberOfPoints() | |
for i in range(num_points): | |
point = disk.GetPoint(i) | |
points.InsertNextPoint(point) | |
line = vtk.vtkLine() | |
line.GetPointIds().SetId(0, point_id) | |
line.GetPointIds().SetId(1, point_id + num_points - 1) | |
lines.InsertNextCell(line) | |
point_id += num_points | |
tube_mesh = vtk.vtkPolyData() | |
tube_mesh.SetPoints(points) | |
tube_mesh.SetLines(lines) | |
return tube_mesh | |
# Create three disks at different positions | |
disk1 = create_disk(0, 0, 0, 0.1) | |
disk2 = create_disk(0, 0, 1, 0.1) | |
disk3 = create_disk(0, 0, 2, 0.1) | |
# Combine the disks and create the tube mesh | |
disks = [disk1, disk2, disk3] | |
tube_mesh = create_tube_from_disks(disks) | |
# Extract vertices from the tube mesh | |
vertices = np.array(tube_mesh.GetPoints().GetData()) | |
# Extract lines from the tube mesh | |
cell_array = tube_mesh.GetLines() | |
cell_array.InitTraversal() | |
ids = vtk.vtkIdList() | |
lines = [] | |
while cell_array.GetNextCell(ids): | |
line = [ids.GetId(i) for i in range(ids.GetNumberOfIds())] | |
lines.append(line) | |
# Plot the tube mesh using Mayavi | |
mlab.figure(bgcolor=(1, 1, 1)) | |
for line in lines: | |
x = vertices[line, 0] | |
y = vertices[line, 1] | |
z = vertices[line, 2] | |
mlab.plot3d(x, y, z, tube_radius=0.05, color=(0, 0, 1)) | |
mlab.show() |