Type prüfen...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
TS1234
User
Beiträge: 16
Registriert: Freitag 8. Juni 2007, 19:11

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ü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?
TS1234
User
Beiträge: 16
Registriert: Freitag 8. Juni 2007, 19:11

ich habe jetzt was gefunden:

if type(xyz)==Blender.Types.ObjectType: ....
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ja, aber verwende troztdem besser "isinstance", damit wird auch Vererbung erkannt.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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
TS1234
User
Beiträge: 16
Registriert: Freitag 8. Juni 2007, 19:11

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"
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Vielleicht

Code: Alles auswählen

isinstance(obj, Blender.Types.ObjectType)
Du meintest in einem Post vorher doch, dass "Blender.Types.ObjectType" der gesuchte Typ sei.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

TS1234 hat geschrieben:das hier geht aber nicht:
Was meinst du mit "Geht nicht"
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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:

Code: Alles auswählen

if obj.getType() == "Mesh": ...
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...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Antworten