Wie mit Python bestimme Objekte deaktivieren ?

NanoBot

Mitglied
Ich möchte "Würfel4" bei Frame 120 auf inaktiv setzen.
(Das ginge einfacher, aber es werden später sehr viele Würfel, daher möchte/muss ich scripten)

Ich habe mal folgenden Pseudocode zusammen gebastelt:

Code:
import c4d
from c4d import *

#Welcome to the world of Python

def main():
    obj = FindObject("Würfel4")
    t = doc.GetFrame()

    if t==120:
        obj.Activate(0)

Aber ich habe den Dreh noch nicht raus, was stimmt nicht ?
 
Von Python habe ich keine Ahnung.
Was du erreichen willst, wäre allerdings auch mit XPresso (in einer Iteration) zu realisieren.

Grüße, CUBE
 
In den Py4D Docs steht das doch drin.
Code:
BaseObject.GetEditorMode()
BaseObject.GetRenderMode()
entsprechende Set-methoden sind natürlich auch vorhanden.

Setz den Objekten die du ausblenden willst doch einfach n Tag 'uff.
Code:
import c4d

def main():
  cFrame = doc.GetTime().GetFrame(doc.GetFps())
  dFrame = op[c4d.ID_USERDATA, 0]

  if dFrame >= cFrame:
    op.SetRenderMode(1)
 
Geht nicht: AttributeError: 'c4d.BaseTag' object has no attribute 'SetRenderMode' ?
Es scheinen aber viele Scripts die ich gefunden habe, auch nicht zu laufen, gibt es da so grundsätzlich verschiedene Versionen ?


Leider wäre es auch zu viel aufwand, bei jedem der vielen Würfeln ein Userdata hinzuzufügen.
 
Oh ja, entschuldige. Mein Fehler !
op ist das Tag, nicht das Objekt selbst.
Code:
import c4d

MODE_NORMAL = 2
MODE_INVISIBLE = 1
MODE_ALWAYS = 0
 
def main():
  cFrame = doc.GetTime().GetFrame(doc.GetFps())
  dFrame = op[c4d.ID_USERDATA, 1]  # Benutzerdatum 1 aus Tag
 
  if cFrame >= dFrame:
    mode = MODE_INVISIBLE
  else:
    mode = MODE_NORMAL
  op.GetOrigin().SetRenderMode(mode)

Tut mir leid, hab das auf meinem iPod geschrieben und vorher nicht getestet. Wobei ein bisschen selbstinitiative auch nicht schlecht wäre. Kann man sich ja n bisschen denken, nicht ?

"Leider wäre es auch zu viel aufwand, bei jedem der vielen Würfeln ein Userdata hinzuzufügen. " - CopyPaste das Tag !
 
Du meine Güte das knarzt und harzt:
USERDATA "AttributeError: Parameter access failed."
Egal ob Int, Time,... was gefällt ihm nicht ?
 
Schau nach der ID des Benutzerdatums. Steht unter dem Name wenn du es bearbeitest. Und trage sie als Integer Wert bei [c4d.ID_USERDATA, X] ein.
 
Jetzt gehts: op bezieht sich auf das Tag und nicht auf das Objekt !
(print op.GetName() = "Python")
Die Userdata müssen dem Python-Tag hinzugefügt werden und nicht dem Objekt.
Das war jetzt ein laaaanger Lernprozess.

Die USERDATA vom Objekt holt man mit:
ori=op.GetOrigin()
print ori[c4d.ID_USERDATA,1]

Vielen Dank nux95 !

Aber was ich nicht rausgefunden habe, wie man Objekte referenziert, also direkt "Würfel236" ansteuern kann ?
 
Zuletzt bearbeitet:
"op bezieht sich auf das Tag und nicht auf das Objekt !" - Wie oben schon gesagt. ;-)

"Aber was ich nicht rausgefunden habe, wie man Objekte referenziert, also direkt "Würfel236" ansteuern kann ?" - Da musst du nach dem Objekt suchen. Kann man manuell, oder aber doc.FindObject() benutzen.

Wenn du weitere Fragen hast, solltest du mal im Plugincafe vorbeischauen, da bin ich und noch andere die dir helfen können.
Hast du dir die Beispiele in der Documentation schon angeseh'n?
Ist zwar noch laaange nicht fertig, aber das koennte fuer dich interessant sein: http://forums.cgsociety.org/showthread.php?t=1005134

Cheers !
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück