[Bf-python] Poinalignment Version 0.2

Nathan Letwory jesterking at letwory.net
Tue Aug 17 14:57:06 CEST 2004


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

Maybe translate your script to english. Not all people know German, you
know ;) (for me no prob to read, though). Not only comments, but
preferrably also variable and function names.

If you give it the blender header you could have the script in the
menusystem. Check other scripts (ie. the ones bundled with Blender) how to
do that.

/Nathan

>
> 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)
>
> _______________________________________________
> Bf-python mailing list
> Bf-python at blender.org
> http://www.blender.org/mailman/listinfo/bf-python
>




More information about the Bf-python mailing list