def get_iso_mesh(distobj, bounds): # for RPC from skimage.measure import marching_cubes_lewiner import numpy as np from compas_vol.primitives import VolBox from compas.geometry import Box bx = bounds[0] by = bounds[1] bz = bounds[2] x, y, z = np.ogrid[bx[0]:bx[1]:bx[2] * 1j, by[0]:by[1]:by[2] * 1j, bz[0]:bz[1]:bz[2] * 1j] #x, y, z = np.ogrid[-30:30:60j, -30:30:60j, -30:30:60j] # spacing: (max-min)/num (or num-1?) sx = (bx[1] - bx[0]) / (bx[2] - 1) sy = (by[1] - by[0]) / (by[2] - 1) sz = (bz[1] - bz[0]) / (bz[2] - 1) b = Box.from_data(distobj['box']) vb = VolBox(b, distobj['radius']) vb.data = distobj dm = vb.get_distance_numpy(x, y, z) verts, faces, norms, vals = marching_cubes_lewiner(dm, 0.0, spacing=(sx, sy, sz)) mesh = get_compas_mesh(verts, faces) #return str(mesh.number_of_vertices()) return str(mesh.to_data())
def from_data(cls, data): """Construct a volumetric box from its data representation. Parameters ---------- data : :obj:`dict` The data dictionary. Returns ------- VolBox The constructed box. Examples -------- >>> """ box = Box.from_data(data['box']) vbox = cls(box, data['radius']) return vbox
def data(self, data): self.box = Box.from_data(data['box']) self.radius = data['radius']