On 21/02/2013 at 06:31, xxxxxxxx wrote:
Hi all,
I try to reduce data in a C4D File by combining Polygon-objects with the same material following in the structure dirctly after another.
I have some code that Works well but now I have a Problem.
Is there anybody who could help me? (for cash)
In my code:
Running thrue the structure works!
Finding materials works.
But when I find two objekts with equal material the plugin stops.
It seams to lose the actual objekt ?!?
Here is my code:
def walk(obj) :
if not obj: return
elif obj.GetDown() :
return obj.GetDown()
while obj.GetUp() and not obj.GetNext() :
obj = obj.GetUp()
print 'klick'
return obj.GetNext()
def walk_thrue_projekt(doc) :
print 'walk_thrue_projekt START'
obj = doc.GetFirstObject()
zaehler = 0
c4d.CallCommand(13324) # Alles deselektieren
material1 = 'Leer'
print material1
gui.MessageDialog('Stop1')
while obj:
zaehler = zaehler + 1
print zaehler
print c4d.BaseObject.GetName(obj) # Objektname lesen und ausgeben
obj.SetBit(c4d.BIT_ACTIVE)
textureTag = obj.GetTag(c4d.Ttexture) # Lesen TextureTag des aktuellen Objektes
if not textureTag: # wenn Material nicht vorhanden dann
print 'Kein Material-Tag gefunden' # nix tun
obj.DelBit(c4d.BIT_ACTIVE) # Wenn kein Material vorhanden dann deaktivieren
else: # wenn Material vorhanden dann
material2 = textureTag.GetMaterial() # Materialnamen auslesen
print material2 # Materialnamen ausgeben
print material1 # Materialnamen ausgeben
obj.SetBit(c4d.BIT_ACTIVE) # Objekt aktivieren
gui.MessageDialog('Stop2')
if material1 == material2: # Wenn material1 = maderial 2 dann:
gui.MessageDialog('zwei gleiche gefunden')
c4d.CallCommand(16768) # Objekte verbinden + Löschen
#return
else: # Wenn material1 != maderial 2 dann:
# c4d.CallCommand(13324) # Alles deselektieren
gui.MessageDialog('zwei ungleiche hintereinander gefunden')
obj.DelBit(c4d.BIT_ACTIVE) # aktuelles Objekt aktivieren
material1 = material2
obj = walk(obj)
To test the Plugin here is a testfile:
http://www.vision4d.de/downloads/001 Testscene klein.c4d
Thanks a lot