Seite 1 von 1
Type prüfen...
Verfasst: Sonntag 11. Mai 2008, 21:58
von TS1234
Ich mache was mit Python in Blender
jetzt wollte ich gerne Objekttyp prüfen... nur wie?
xyz=Blender.Object.Get(name)
foo(xyz)
xyz=Blender.Material.Get(name)
foo(xyz)
def foo(xyz):
if type(xyz)==???
in der Funtion foo() möchte ich die 2 Objekte unterscheiden können:
z.B. type(xyz) bei Objekt liefert mir <type 'Blender Object'> zurück
ich könnte ja mit anderen Objekten vergleichen - aber ich habe keine andere und es wäre ja doof erstmal welche zu erzeugen und später zu löschen...
help
Verfasst: Sonntag 11. Mai 2008, 22:15
von EyDu
Überprüfen, ob eine Objekt einen Bestimmten Typ hat kannst du mit "isinstance". Und die Typen, gegen die du testen willst, liegen sicherlich irgendwo in den Blender-Modulen (Oder ist es eventuelle schon "Blender.Object"?).
Typenvergleiche sind in Python aber eigentlich nicht üblich und Blender wird doch sicherlich irgend etwas zur Unterscheidung bereitstellen. Was genau möchtest du denn machen, vielleicht gehst du das Problem auch nur falsch an?
Verfasst: Sonntag 11. Mai 2008, 22:51
von TS1234
ich habe jetzt was gefunden:
if type(xyz)==Blender.Types.ObjectType: ....
Verfasst: Sonntag 11. Mai 2008, 23:03
von EyDu
Ja, aber verwende troztdem besser "isinstance", damit wird auch Vererbung erkannt.
Verfasst: Sonntag 11. Mai 2008, 23:16
von BlackVivi
Code: Alles auswählen
In [1]: class A(object):
...: pass
...:
In [2]: class B(A):
...: pass
...:
In [3]: obj1 = A()
In [4]: obj2 = B()
In [6]: type(obj1) == A
Out[6]: True
In [7]: type(obj1) == B
Out[7]: False
In [8]: isinstance(obj1, A)
Out[8]: True
In [9]: isinstance(obj1, B)
Out[9]: False
In [10]: type(obj2) == A
Out[10]: False
In [11]: type(obj2) == B
Out[11]: True
In [12]: isinstance(obj2, A)
Out[12]: True
In [13]: isinstance(obj2, B)
Out[13]: True
Verfasst: Montag 12. Mai 2008, 12:17
von TS1234
das ist nicht so einfach... Laut API verstehe ich das so:
http://www.blender.org/documentation/24 ... class.html
das hier geht aber nicht:
if type(obj)==Blender.Object.Object: print "XXX"
und das auch nicht
if isinstance(obj, Blender.Object.Object): print "XXX"
das liefert kein true zurück
if type(obj)==Blender.Object: print "XXX"
Verfasst: Montag 12. Mai 2008, 13:25
von EyDu
Vielleicht
Du meintest in einem Post vorher doch, dass "Blender.Types.ObjectType" der gesuchte Typ sei.
Verfasst: Montag 12. Mai 2008, 14:30
von Darii
TS1234 hat geschrieben:das hier geht aber nicht:
Was meinst du mit "Geht nicht"
Verfasst: Dienstag 13. Mai 2008, 11:59
von Rebecca
Wenn du pruefen willst war fuer ein Typ ein Blender-Objekt ist (also ob es ein Mesh, eine Camera, etc ist), dann geht das so:
Das Problem mit Blender ist, das nicht eindeutig ist, von was fuer Objekten man redet: Den Objekten in der Blender-Welt oder den Python-Objekten der Blender-API...