Python Blender alguien lo sabe hacer?
Hola, me han recomendado este foro, a ver qué tal. En uno de mis scripts tengo lo siguiente, lo que hace es pillar unos vértices del Blender y les aplica la típica formula de la velocidad a cada uno de los 4 vértices: x = x0 + v0 * tfor e in range (0,4):
Print e print he llegado index = me, vértices, index(me, Faces[0][e]) <<< peta aquí print paso por aquí me, vértices[index] = me, vértices[index] + vel[index]*inctemps print y por aquí también.
La cuestión es que, a la segunda vez que pasa por el loop peta, la respuesta en el monitor es esta:
0.
He llegado.
Paso por aquí.
Y por aquí también.
1.
He llegado.
Tracebak (most recent call last):
File aplanar_una_cara_test, line 123, in <module>.
Valueerror: the truth value of an array with more than one element is ambiguous.
Use a, any() or a, all().
He importado el numpy.
No veo muy claro lo de utilizar el any y el all, si alguien me puede echar un cable, gracias.
Adriá.
Python Blender alguien lo sabe hacer?
Hola, adria. ¿Puede ser que tengas sólo un vértice? Es la única razón que se me ocurre para que de un error ahí. (un error que, por cierto, no conocía) y otra cosa, si sólo quieres mover los vértices no necesitas pasar por las caras. De hecho, así pasas por cada vértice tantas veces como caras lo contienen, así que, se desplazara más si pertenece a más caras (.
Python Blender alguien lo sabe hacer?
Hola Klópes, gracias por contestar.
De hecho, tengo un Plano con 4 vértices, les aplico fuerzas a cada uno de ellos para qué se muevan de una forma qué me interesa. A lo mejor lo encuentras raro porque mi objetivo no es una animación sino una comprobación matematica.
He pegado solo un cacho del programa para intentar simplificar, pero a lo mejor no os he dado la información suficiente. Os paso el resto del script por si con esto lo conseguís, para qué el programa funcione tiene que haber en escena 1 solo plano de nombre Plane modificando sus vértices para qué no sea plano. El objetivo del script es que lo planificarlo poco a poco.
From Blender import *.
Import math.
Import pickle.
From numpy import *.
Import time.
Print ("\n\n\n-------start-------").
Kpla = 1 #constant de la molla daplanar.
Inctemps = 0.1.
Me = NMesh. GetRaw("Plane").
Cara = Object. Get("Plane").
Suport = NMesh. GetRaw().
NMesh. PutRaw(suport,"suport, 1).
Obsuport = Object. Get("Mesh").
Forces = [].
Acc = [].
Vel = [].
For i in range (0, len(me, verts)):
forces, append(array([0,0,0])) tacc, append(array([0,0,0])) tvel, append(array([0,0,0])) t.
Def centre(cara):
result = [] tnumverts = len(cara) t ti=0 tx=0 ty=0 tz=0 twhile i < numverts:
x = x + cara[i][0] t y = y + cara[i][1] t z = z + cara[i][2] t i = i+1 tresult = array([x/numverts, y/numverts, z/numverts]) treturn result.
Def vectornormal2(cara):
result = [] tv1 = array(array(cara[2])-array(cara[0])) tv2 = array(array(cara[3])-array(cara[1])) tresult = array(cross(v1, 2)) tresult = result / sqrt(result[0]**2+result[2]**2+result[2]**2) treturn result.
Def projectapuntapla(centrepla, vectornormal, punt):
k=(vectornormal[0]*(centrepla[0]-punt[0])+vectornormal[1]*(centrepla[1]-punt[1])+vectornormal[2]*(centrepla[2]-punt[2]))/(vectornormal[0]**2+vectornormal[1]**2+vectornormal[2]**2) tresult = punt + que * vectornormal treturn result.
Conta = 10.
while conta>0:
conta = conta-1 tprint conta t tcentrecara = centre(me, faces[0]) tposcara = array([cara, getLocation()[0], cara, getLocation()[1], cara, getLocation()[2]) tcentreabsolut = poscara + centrecara t t#dibuixar centre t tobsuport, setLocation(poscara) tobsuport. RotX = cara. RotX tobsuport. RotY = cara. RotY tobsuport. RotZ = cara. RotZ tv=NMesh. Vert(centrecara[0], centrecara[1], centrecara[2]) tsuport, verts, append(v) t t tvectornormal = vectornormal2(me, faces[0]) tsegonpunt = centrecara + vectornormal t tv=NMesh. Vert(segonpunt[0], segonpunt[1], segonpunt[2]) tsuport, verts, append(v) tf=NMesh. Face() tf, v, append(suport, verts[0]) tf, v, append(suport, verts[1]) tf, v, append(suport, verts[1]) tsuport, faces, append(f) tme, faces, append(f) tNMesh. PutRaw(suport,"suport, 1) tRedraw() t t tfor i in range (0,4):
puntprojectat=projectapuntapla(centrecara, ectornormal, me, faces[0][i]) t forsa = kpla*(puntprojectat - me, faces[0][i]) t index = me, verts, index(me, faces[0][i]) t forces[index]=forces[index]+forsa t v=NMesh. Vert(puntprojectat[0], puntprojectat[1], puntprojectat[2]) t suport, verts, append(v) t NMesh. PutRaw(suport,"suport, 1) t time, slep(inctemps) t t Redraw() t tfor e in range (0,4):
print e t print he llegado t index = me, verts, index(me, faces[0][e]) t print paso por aquí t me, verts[index] = me, verts[index] + vel[index]*inctemps t print y por aquí también t t.
#NMesh. PutRaw(me,Plane).
Print -------end-------".
Si alguien ha llegado hasta aquí. Muchas gracias.
Python Blender alguien lo sabe hacer?
No me he pegado mucho con este tipo de cosas, pero me da la sensación de que ese elemento no fuera un punto sino otro array. Puedes probar a ver de que tipo es haciendo un print dir(me, Faces[0][e]) justo antes del punto en el que casca y viendo que modificadores tienes para ese tipo. O quizá es me, vértices, index el que te devuelve un array y por eso index no sabe que hacer con él.
No sé, yo diría que alguno de los tipos no es el que crees que es.