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

Type prüfen...

Beitragvon TS1234 » Sonntag 11. Mai 2008, 21:58

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: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Sonntag 11. Mai 2008, 22:15

Ü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

Beitragvon TS1234 » Sonntag 11. Mai 2008, 22:51

ich habe jetzt was gefunden:

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

Beitragvon EyDu » Sonntag 11. Mai 2008, 23:03

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:

Beitragvon BlackVivi » Sonntag 11. Mai 2008, 23:16

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

Beitragvon TS1234 » Montag 12. Mai 2008, 12:17

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: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Montag 12. Mai 2008, 13:25

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

Beitragvon Darii » Montag 12. Mai 2008, 14:30

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:

Beitragvon Rebecca » Dienstag 13. Mai 2008, 11:59

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder