[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