[Bf-python] Poinalignment Version 0.2

Thomas thomas at buschhardt.de
Tue Aug 17 14:19:03 CEST 2004


Hallo I improved some functions - please send my your ideas :-)

Here is the script:

#############
# Name: PunktAngleich
#
# Version: 0.2
#
# Autor: Ishtar (thomas at buschhardt.org ! org<->de)
#
# Beschreibung: Das Script gleicht die ausgewählten Punkten an die 
3D-Cursorposition an.
#
# Description: The script align selected vertexes to the 3D-Cursor.
#
# System: Blender 2.3.4
#
# Versionsgeschichte:
# 0.2    Schalter 'Anwenden' entfernt / Button 'Anwenden' deleted
#         Hilfe geaendert / Help changed
#        Angleich funktioniert jetzt unmittelbar / Alignment starts 
immediately
#
# 0.1    erste oeffentliche Version / First public version
##########################

##
# Hauptmodule einladen
##
import Blender

##
# globale Variablen
##
EREIGNIS_ZEICHNEN = 2
EREIGNIS_BEENDEN = 3
EREIGNIS_HILFE_DEUTSCH = 4
EREIGNIS_HILFE_ENGLISCH = 5
AENDERE_X = Blender.Draw.Create(0)
AENDERE_Y = Blender.Draw.Create(0)
AENDERE_Z = Blender.Draw.Create(0)
ORIGINALWERTE=[]
ORIGINALOBJEKT=0
ORIGINALINDEX=[]

##
# Originalwerte fuellen
##
def original():
    global ORIGINALWERTE
    global ORIGINALOBJEKT
    global ORIGINALINDEX
    ORIGINALWERTE=[]
    ORIGINALINDEX=[]
    Ausgangszustand = Blender.Window.EditMode()
    if Ausgangszustand==1:Blender.Window.EditMode(0)
    Objekt = Blender.Object.GetSelected()[0]
    ORIGINALOBJEKT=Objekt
    if Objekt.getType()=="Mesh":#Vorpruefung auf Mesh-Objekt
        Gitter = Objekt.getData()
        for i in Gitter.verts:
            if i.sel:ORIGINALWERTE.append([i.co[0],i.co[1],i.co[2]])
            if i.sel:ORIGINALINDEX.append(i.index)
    ORIGINALINDEX.sort()
    Blender.Window.EditMode(Ausgangszustand)

original()

##
# Testet ob gespeichertes Objekt noch aktuell ist
##
def oritest():
    global ORIGINALWERTE
    global ORIGINALOBJEKT
    global ORIGINALINDEX
    anzahlPunkte=0
    indexliste=[]
    Ausgangszustand = Blender.Window.EditMode()
    if Ausgangszustand==1:Blender.Window.EditMode(0)
    Objekt = Blender.Object.GetSelected()[0]
    if Objekt.getType()=="Mesh":#Vorpruefung auf Mesh-Objekt
        Gitter = Objekt.getData()
        for i in Gitter.verts:
            if i.sel:
                indexliste.append(i.index)
                anzahlPunkte+=1
    indexliste.sort()
    if len(ORIGINALWERTE)!=anzahlPunkte or indexliste!=ORIGINALINDEX or 
ORIGINALOBJEKT!=Objekt:original()
    Blender.Window.EditMode(Ausgangszustand)

##
# grafische Oberflaeche
##
def fenster():
    global 
EREIGNIS_KEIN,EREIGNIS_ZEICHNEN,EREIGNIS_BEENDEN,AENDERE_X,AENDERE_Y,AENDERE_Z,EREIGNIS_HILFE_DEUTSCH
    Blender.BGL.glColor3f(1,1,1)
    Blender.BGL.glRasterPos2i(20,110)
    Blender.Draw.Text("PunktAngleich")
    Blender.BGL.glRasterPos2i(20,95)
    Blender.Draw.Text("Version 0.2")
    Blender.BGL.glRasterPos2i(20,80)
    Blender.Draw.Text("erstellt von Ishtar")

    
AENDERE_X=Blender.Draw.Toggle("X",EREIGNIS_ZEICHNEN,20,50,50,15,AENDERE_X.val,"an 
X-Achse angleichen")
    
AENDERE_Y=Blender.Draw.Toggle("Y",EREIGNIS_ZEICHNEN,20,30,50,15,AENDERE_Y.val,"an 
Y-Achse angleichen")
    
AENDERE_Z=Blender.Draw.Toggle("Z",EREIGNIS_ZEICHNEN,20,10,50,15,AENDERE_Z.val,"an 
Z-Achse angleichen")
    Blender.Draw.Button("Hilfe",EREIGNIS_HILFE_DEUTSCH,120,95,40,15)
    Blender.Draw.Button("Help",EREIGNIS_HILFE_ENGLISCH,120,75,40,15)
    Blender.Draw.Button("Beenden",EREIGNIS_BEENDEN,80,10,80,25)
    Blender.Draw.Redraw(1)

##
# Auswerten von allgemeinen Ereignissen
##
def allg_ereignis(erg,wert):
    if erg==Blender.Draw.ESCKEY or 
erg==Blender.Draw.QKEY:Blender.Draw.Exit()

##
# Auswerten von Schalter-Ereignissen
##
def schalter_ereignis(erg):
    if erg==EREIGNIS_BEENDEN:Blender.Draw.Exit()
    elif erg==EREIGNIS_HILFE_DEUTSCH:
        a=Blender.Draw.PupMenu("Funktionsweise%t|1.Cursor 
positionieren|2.Auswaehlen der Punkte|3.Angleichrichtung waehlen")
    elif erg==EREIGNIS_HILFE_ENGLISCH:
        b=Blender.Draw.PupMenu("Function%t|1.Set Cursorposition|2.Select 
Vertexes|3.Select Align-direction")
    elif erg==EREIGNIS_ZEICHNEN:
        oritest()
        Ausgangszustand = Blender.Window.EditMode()
        if Ausgangszustand==1:Blender.Window.EditMode(0)
         Objekt = Blender.Object.GetSelected()[0]
        if Objekt.getType()=="Mesh":#Vorpruefung auf Mesh-Objekt
            Gitter = Objekt.getData()
            Zaehler = 0
            for i in Gitter.verts:
                if i.sel:
                    if 
AENDERE_X.val==1:i.co[0]=Blender.Window.GetCursorPos()[0]-Objekt.getLocation()[0] 
#Aendere nach X hin
                    else:i.co[0]=ORIGINALWERTE[Zaehler][0]
                    if 
AENDERE_Y.val==1:i.co[2]=(Blender.Window.GetCursorPos()[1]-Objekt.getLocation()[1])*-1.0 
#Aendere nach Y hin
                    else:i.co[2]=ORIGINALWERTE[Zaehler][2]
                    if 
AENDERE_Z.val==1:i.co[1]=Blender.Window.GetCursorPos()[2]-Objekt.getLocation()[2] 
#Aendere nach Z hin
                    else:i.co[1]=ORIGINALWERTE[Zaehler][1]
                    Zaehler+=1
                Gitter.update()
            Blender.Redraw()
        Blender.Window.EditMode(Ausgangszustand)

Blender.Draw.Register(fenster,allg_ereignis,schalter_ereignis)




More information about the Bf-python mailing list