vv / graph2mesh.py
paufeldman's picture
init
8ca85a6
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()