Blender (jusqu'à 2.49)
|
Python
Constituer
une liste de segments
à
partir des faces d'un mesh
|
|
Les données prises en compte
par l'API python contiennent une liste d'edges ou segments correspondants
aux limites d'une face . Cependant les valeurs contenues dans ces variables
n'ont pas de rapport direct avec les sommets correspondant . En fait,
il s'agit de groupes de variables à virgule flottante différentes
des sommets eux-même ce qui ne permet pas de faire un travail de
comparaison satisfaisant car deux valeurs flottantes peuvent être
très proches mais jamais complètement identiques. Il serait
plus judicieux de créer une liste de segment constituée par
des valeurs qui correspondent très préciément aux
sommets donc un indice dans la liste Mesh.verts .
segment = [[1, 0], [0, 3], [1, 3], [3, 2], [1, 2], [5, 0], [5, 1],
[1, 4], [5, 4]] |
Au même titre une face pourrait être décrite par
la liste des segments qui la composent :
faceseg = [[0, 1, 2], [2, 3, 4], [5, 0, 6], [6, 7, 8]] |
def doc_segments(me):
segment=[]
faceseg=[]
linkseg=[]
reverses=[]
for f in me.faces:
face=[]
for n in range(len(f.v)-1):
s0=[me.verts.index(f.v[n]),
me.verts.index(f.v[n+1])]
if s0 not in segment:
segment.append(s0)
face.append(segment.index(s0))
s2=[me.verts.index(f.v[n+1]),me.verts.index(f.v[0])]
if s2 not in segment:
segment.append(s2)
face.append(segment.index(s2))
faceseg.append(face[:])
for n in range(len(segment)):
linkseg.append([])
for r in segment:
t=[r[1],r[0]]
ok=0
for n
in range(len(segment)):
if segment[n]==t:
ok=1
reverses.append([segment.index(r),n])
if ok==0:
reverses.append([r])
return segment,faceseg,linkseg,reverses |
Les questions concernant cette page
peuvent être posées sur :
news://news.zoo-logique.org/3D.Blender
|