如何使用pyvista/或其他模块创建随机3d对象?

如何使用pyvista/或其他模块创建随机3d对象?,3d,trimesh,pyvista,3d,Trimesh,Pyvista,我正在尝试使用pyvista创建随机3d blob对象。首先,我编写了如下代码: import os import sys import numpy as np import cv2 import pyvista as pv import trimesh as tm import math import random as rnd smooth_iter = rnd.randint(50,200) num_blob = rnd.randint(5,20) xyz_list = [] rad_l

我正在尝试使用pyvista创建随机3d blob对象。首先,我编写了如下代码:

import os
import sys
import numpy as np
import cv2
import pyvista as pv
import trimesh as tm
import math
import random as rnd

smooth_iter = rnd.randint(50,200)
num_blob = rnd.randint(5,20)
xyz_list = []
rad_list=[]
rad_list2=[]
p = pv.Plotter(shape=(1,1))
g = pv.PolyData()
pi = 3.141592
for i in range(num_blob):
    x= rnd.uniform(-1.5,1.5)
    y= rnd.uniform(-1.5,1.5)
    z= rnd.uniform(-1.5,1.5)
    r1= rnd.uniform(0.3,2.5)
    r2= rnd.uniform(r1-0.2,r1+0.2)
    r3= rnd.uniform(r1-0.2,r1+0.2)
    th= rnd.uniform(-pi,pi)
    ps= rnd.uniform(-pi,pi)
    py= rnd.uniform(-pi,pi)
    xyz_list.append((x,y,z))
    rad_list.append((r1,r2,r3))
    ell = pv.PolyData(pv.ParametricEllipsoid(r1, r2, r3))
    ell.translate([x,y,z])
    ell.rotate_x(th)
    ell.rotate_y(ps)
    ell.rotate_z(py)
    p.add_mesh(ell)
print(xyz_list)
print(rad_list)
p.show()  

这段代码显示了重叠随机椭球体的打印结果。但由于生成的p是pv.Plotter,而不是pv.Polydata,因此我无法保存/平滑/编辑结果。我还没有找到如何在pv.Polydata中生成定制的edittable 3d对象。我应该使用哪个函数,或者是否有其他方法来实现我的目标,例如使用trimesh?

作为表面解决方案,您可以使用
g=pv.UnstructuredGrid
和在循环中执行
g.merge(ell,inplace=True)
,它将在单个网格中收集椭球
g
,您可以在循环后将其添加到绘图仪中。然而,这不会给你一个漂亮的表面,只是重叠的椭球,这可能不是你要找的。我不知道如何用vtk将其转化为一个漂亮的封闭曲面网格,所以我只留下这条评论。@AndrasDeak谢谢。我会试试你的,再试试