Necesito ayuda para comenzar en Python (que casi no sé) para voxelizar una malla 3D generada desde Rhino. La entrada de datos será un archivo .OBJ y también la salida. El objetivo final de este uso es encontrar la distancia más corta entre dos puntos dentro de un edificio. Pero eso es para más tarde. Por el momento, primero necesito voxelizar una malla 3D. La primitiva de voxelización puede ser simplemente un cubo simple.En Python, ¿cómo hago una malla en 3D?
hasta ahora puedo leer desde un analizador de archivos OBJ y fuera del obj analizado con los prefijos V, VT, VN, F despojados, y usando esas coordenadas para encontrar el cuadro delimitador del objeto 3D. ¿Cuál debería ser la forma correcta de voxelize la malla?
import objParser
import math
inputFile = 'test.obj'
vList = []; vtList = []; vnList = []; fList = []
def parseOBJ(inputFile):
list = []
vList, vtList, vnList, fList = objParser.getObj(inputFile)
print 'in parseOBJ'
#print vList, vtList, vnList, fList
return vList, vtList, vnList, fList
def findBBox(vList):
i = 0; j=0; x_min = float('inf'); x_max = float('-inf'); y_min = float('inf');
y_max = float('-inf'); z_min = float('inf'); z_max = float('-inf');
xWidth = 0; yWidth = 0; zWidth =0
print 'in findBBox'
while i < len(vList):
#find min and max x value
if vList[i][j] < x_min:
x_min = float(vList[i][j])
elif vList[i][j] > x_max:
x_max = float(vList[i][j])
#find min and max y value
if vList[i][j + 1] < y_min:
y_min = float(vList[i][j + 1])
elif vList[i][j + 1] > y_max:
y_max = float(vList[i][j + 1])
#find min and max x value
if vList[i][j + 2] < z_min:
z_min = vList[i][j + 2]
elif vList[i][j + 2] > z_max:
z_max = vList[i][j + 2]
#incriment the counter int by 3 to go to the next set of (x, y, z)
i += 3; j=0
xWidth = x_max - x_min
yWidth = y_max - y_min
zWidth = z_max - z_min
length = xWidth, yWidth, zWidth
volume = xWidth* yWidth* zWidth
print 'x_min, y_min, z_min : ', x_min, y_min, z_min
print 'x_max, y_max, z_max : ', x_max, y_max, z_max
print 'xWidth, yWidth, zWidth : ', xWidth, yWidth, zWidth
return length, volume
def init():
list = parseOBJ(inputFile)
findBBox(list[0])
print init()
Binvox se ha mudado a [esta ubicación] (http://www.patrickmin.com/binvox/) –
Gracias por la información @A_A, he actualizado el enlace . – kolenda