Blender (jusqu'à 2.49)
Python 
Module Window : imiter un raccourci clavier

06/08/2006
    Début   Index
précédentScript  diviser un segment
Script  distance  point 2 line Suivant

Module Window : imiter un raccourci clavier

Equivalent de  Maj-S, 4 Cursor to selection, suivi  de  Ckey,   recentrer la fenêtre 3D 
Variation : PADPERIOD (point du pavé numérique)
Variation : mode Edit, Curseur vers un ou plusieurs sommets sélectionnés 
Variation :  pour raccourci ctrl-t et menu Space Handler Scripts 
Note au sujet de l'utilisation du module Mathutils
Equivalent de  Maj-S, 4 suivi  de Ckey
# =================
# Similar to Shift-S, 4 followed by Ckey 
#  =================
# Equivalent de  Maj-S, 4 suivi  de Ckey
# =================
import Blender
try:
   [x,y,z,w]=Blender.Object.GetSelected()[0].getMatrix()[3] # update 30/04
   Blender.Window.SetCursorPos([x,y,z]) 
   Blender.Window.RedrawAll()

   winid =   Blender.Window.GetScreenInfo(Blender.Window.Types.VIEW3D)[0]['id']
   Blender.Window.SetKeyQualifiers(Blender.Window.Qual.SHIFT)
   Blender.Window.SetKeyQualifiers(0)
   Blender.Window.RedrawAll()

   Blender.Window.QAdd(winid, Blender.Draw.CKEY,1)
   Blender.Window.QHandle(winid)
except :
   pass

Variation avec PADPERIOD (point du pavé numérique) 

# =================
#  Variation
# =================
# Similar to Shift-S, 4 followed  by PADPERIOD
# =================
# Equivalent de 
# Shift-S, 4 suivi de PADPERIOD (centrer la vue sur objet selectionne pas curseur 3d)
#
# =================
import Blender
try:
    [x,y,z,w]=Blender.Object.GetSelected()[0].getMatrix()[3] # update 30/04
   Blender.Window.SetCursorPos([x,y,z]) 
   Blender.Window.RedrawAll()

   winid =   Blender.Window.GetScreenInfo(Blender.Window.Types.VIEW3D)[0]['id']
   Blender.Window.SetKeyQualifiers(Blender.Window.Qual.SHIFT)
   Blender.Window.SetKeyQualifiers(0)
   Blender.Window.RedrawAll()

   Blender.Window.QAdd(winid, Blender.Draw.PADPERIOD,1)
   Blender.Window.QHandle(winid)
except :
   pass

Variation en mode Edit, curseur vers un ou plusieurs sommets selctionnés 
Voir aussi :
     Imiter le bouton Center New
      et
       imiter le bouton Center Cursor
(Lien Elysiun)

# =================
# Similar to Shift-S, 4 followed  by Ckey in edit mode 
# =================
# Equivalent de  Shift-S, 4 suivi de Ckey en mode edit
# =================
# #
# Mise a jour / Update  : 30/04
#
# fonctionne aussi sur un sommet ou un groupe de sommets
# se'lectionne' en mode edit . Dans le cas d'un groupe de sommets
# le curseur 3D sera place' sur les coordonne'es moyennes des sommets .
#
# Now take the location of a selected vertex or a  group of vertice . 
# In the case of a vertice group, the cursor 3d will be placed on the 
#  average co-ordinates .
# =================

import Blender
def multmat(M,v): 
      x = v.co [0];  y=v.co[1]; z=v.co[2] 
      x1 = (x * M[0][0]) + (y * M[1][0]) + (z * M[2][0]) 
      y1 = (x * M[0][1]) + (y * M[1][1]) + (z * M[2][1])
      z1 = (x * M[0][2]) + (y * M[1][2]) + (z * M[2][2]) 
      v.co[0]=x1+M[3][0]; v.co[1]=y1+M[3][1]; v.co[2]=z1+M[3][2] 
      return  v 
try :
 MATRIX=Blender.Object.GetSelected()[0].matrix
 editmode=0
 if Blender.Window.EditMode() :
  editmode=1
  Blender.Window.EditMode(0)
  VERTS=Blender.Object.GetSelected()[0].getData().verts
  SELV=[v for v in VERTS if v.sel==1]
  if len(SELV)>0:
   coord=[0.0,0.0,0.0]
   for v in SELV :
    print v.co
    v=multmat(MATRIX,v)
    print v.co
    for n in [0,1,2]:
     coord[n]+=v.co[n]
     print coord 
   for n in [0,1,2]:
    coord[n]/=len(SELV)

   x=coord[0]
   y=coord[1]
   z=coord[2]
   print x,y,z
 else:
  x,y,z,w=MATRIX[3]

 Blender.Window.SetCursorPos([x,y,z]) 

 Blender.Window.RedrawAll()
 winid =   Blender.Window.GetScreenInfo(Blender.Window.Types.VIEW3D)[0]['id']
 Blender.Window.SetKeyQualifiers(Blender.Window.Qual.SHIFT)
 Blender.Window.SetKeyQualifiers(0)
 Blender.Window.RedrawAll()
 Blender.Window.QAdd(winid, Blender.Draw.CKEY,1)
 Blender.Window.QHandle(winid)
 if editmode :
  Blender.Window.EditMode(1)
except :
 pass

Variation pour utilisation à partir d'un raccourci, Maj-t, dans la fenêtre 3D.

 
Le script doit être chargé une première fois dans la fenêtre texte . L'en-tête :
# SPACEHANDLER.VIEW3D.EVENT
le rend immédiatement visible dans le menu View/ Space Handler Scripts de la fenêtre 3D . Il suffit de le cocher pour le rendre disponible .
# SPACEHANDLER.VIEW3D.EVENT

import Blender
from Blender import Draw
from Blender import Window
evt = Blender.event

print Window.GetKeyQualifiers()

if evt == Draw.TKEY and Window.GetKeyQualifiers() == 3:
  def multmat(M,v): 
      x = v.co [0];  y=v.co[1]; z=v.co[2] 
      x1 = (x * M[0][0]) + (y * M[1][0]) + (z * M[2][0]) 
      y1 = (x * M[0][1]) + (y * M[1][1]) + (z * M[2][1])
      z1 = (x * M[0][2]) + (y * M[1][2]) + (z * M[2][2]) 
      v.co[0]=x1+M[3][0]; v.co[1]=y1+M[3][1]; v.co[2]=z1+M[3][2] 
      return  v
  try :
     MATRIX=Blender.Object.GetSelected()[0].matrix
     editmode=0
     if Blender.Window.EditMode() :
        editmode=1
        Blender.Window.EditMode(0)
     VERTS=Blender.Object.GetSelected()[0].getData().verts
     SELV=[v for v in VERTS if v.sel==1]
     if len(SELV)>0:
        coord=[0.0,0.0,0.0]
        for v in SELV :
            print v.co
            v=multmat(MATRIX,v)
            print v.co
            for n in [0,1,2]:
               coord[n]+=v.co[n]
            print coord 
        for n in [0,1,2]:
            coord[n]/=len(SELV)
        x=coord[0]
        y=coord[1]
        z=coord[2]
        print x,y,z
     else:
        x,y,z,w=MATRIX[3]
     Blender.Window.SetCursorPos([x,y,z]) 
     Blender.Window.RedrawAll()
     winid =   Blender.Window.GetScreenInfo(Blender.Window.Types.VIEW3D)[0]['id']
     Blender.Window.SetKeyQualifiers(Blender.Window.Qual.SHIFT)
     Blender.Window.SetKeyQualifiers(0)
     Blender.Window.RedrawAll()
     Blender.Window.QAdd(winid, Blender.Draw.CKEY,1)
     Blender.Window.QHandle(winid)
     if editmode :
        Blender.Window.EditMode(1)
  except :
     pass
  Blender.event = None

Note au sujet de l'utilisation de mathutils

 
Certains utilisateurs ont eu l'occasion de trouver, et de me faire savoir publiquement,  que ces scripts étaient ou dépassés ou manquaient leur but puisque , à leur avis, ils ne présentaient pas l'API python de Blender sous sont meilleur angle, c'est-à-dire :  le plus récent et le plus "moderne" en utilisant les dernières inovations incluses dans le module Mathutils . Au moment où cette page est mise à jour le module Mathutils reste encore souvent source d'erreurs par manque de clarté et, comme finalement, il ne fait que remplacer les fonctions qui sont clairement visibles dans notre travail, il ne semble vraiment pas nécessaire, ni prudent, de passer par son intermédiaire . 
précédentScript  diviser un segment
Script  distance  point 2 line Suivant
Vers le  Haut de page

Les questions concernant cette page  peuvent être posées sur  :
 news://news.zoo-logique.org/3D.Blender


 

 

Livre en français
Blender : apprenez, pratiquez, Créez, livre, Ed. Campus Press, coll. Starter Kit
Blender Starter Kit

Forum
FAQ
Lexique
Didacticiels
Compilations
Blender2KT
Débuter
Modelage
Blender python
Materiaux
Lumière
Animation
API python (eng)
Archives nzn
Statistiques
Doc flash Sculptris
Galerie Sculptris

mon site de démos sur youtube