Ich glaube ich explodiere gleich vor Wut .
Ich als C++ Coder bin ein Maschinennahes Programmieren gewohnt und irgendwie verwirren mich die Eigenheiten von Python immer mehr "^^
Vielleicht kennen einige von euch ja das 3D-Modelierungs Programm Blender 3D. Das Programm hat ein Scriptinginterface via Python.
Nun, ich schreibe hier grad ein Script, um mein 3D-Modell in dem gewünschten Format zu exportieren. Aber das ist eigentlich nicht so wichtig, da mein Problem wohl eher in den Grundlagen von Python liegt.
Und zwar wird eine Liste in einer Schleife mit Objekten gefüllt, und zwar so:
Code: Alles auswählen
VTris = []
print "---------------------"
for f in me.faces:
print "face"
Tring = ALMTriangle2()
for i,v in enumerate(f):
VVerts[v.index].ca = f.col[i].a
VVerts[v.index].cr = f.col[i].r
VVerts[v.index].cg = f.col[i].g
VVerts[v.index].cb = f.col[i].b
VVerts[v.index].tu = f.uv[i].x
VVerts[v.index].tv = f.uv[i].y
Tring.ve[i] = VVerts[v.index]
VTris.append(Tring)
indlist = [Tring.ve[2].index,\
Tring.ve[1].index,\
Tring.ve[0].index]
print indlist
print "---------------------"
Code: Alles auswählen
class ALMVert:
x = 0.0
y = 0.0
z = 0.0
index = 0
ca = 0
cr = 0
cg = 0
cb = 0
nx = 0.0
ny = 0.0
nz = 0.0
tu = 0.0
tv = 0.0
def __init__(self,_x,_y,_z,_index):
self.x = _x
self.y = _y
self.z = _z
self.index = _index
class ALMTriangle:
ve = [ALMVert(0,0,0,0),ALMVert(0,0,0,0),ALMVert(0,0,0,0)]
def __init__(self,v1,v2,v3):
self.ve[0] = v1
self.ve[1] = v2
self.ve[2] = v3
class ALMTriangle2(ALMTriangle):
def __init__(self):
pass
nun, der Code scheint an dieser Stelle bestens zu funktionieren. Ich kriege in der Blender konsole so etwas zu sehen:
face 0 :
[3,0,4]
face 1 :
[7,3,4]
face 2 :
[7,6,2]
...
face 11:
[3,2,0]
Da denk ich mir: "super, die liste ist mit richtigen Daten gefüllt, gucken wir nochmal, ob alles stimmt"
Code: Alles auswählen
for f in me.faces:
print "face",f.index,":"
indlist = [VTris[f.index].ve[2].index,\
VTris[f.index].ve[1].index,\
VTris[f.index].ve[0].index]
print indlist
print "---------------------"
face 0 :
[3,2,0]
face 1 :
[3,2,0]
face 2 :
[3,2,0]
...
face 11:
[3,2,0]
Alle Daten wurden mit dem letzten Wert überschrieben. ARGH!!!
Für mich als C++ programmierer ist das absolut unlogisch. ich vermute aber, ich habe irgendein Konzept von Python nicht verstanden :/
Also die Frage: Warum fügt append() nicht ein Element hinzu, sondern überschreibt alle Elemente der Liste?