Blender (jusqu'à 2.49)
Python 
Fonctions : GetRawFromObjet
et getFromObject
    Début   Index
précédent  Python: Fonction New
Python:Object clone Suivant

 
  1. Pour Blender 2.23
  2. Pour Blender 2.25/2.26
  3. Pour les menus de Blender 2.3 et suivants
  4. Vertex Groups et SoftBodies (Blender version  pour 2.4x et suivants)
  5. Test sur les Fonts et autres courbes accessibles à partir de 2.39
  6. Surface et Curve ainsi que les metaballs peuvent être traitées
  7. Mise a jour pour l'api 2.49 et bpy


Description: Utiliser la fonction GetRawFromObject,  ajoutée à B2.23, pour dupliquer/figer un objet modifié par  une armature ( une légère adaptation est nécessaire pour un rvk ou un lattice ou un effet spécial d'animation. Ce sera l'objet d'une prochaine page).
 

               import Blender 
               from Blender import * 

               # On suppose que l'animation 
               #  est au moins de 11 frames .
               #  Pour passer à la 11ieme: 

               Set('curframe',11) 
               me=NMesh.GetRawFromObject('Plane') 
               NMesh.PutRaw(me,'test',1) 

               # Dans l'etat actuel, c'est au point 0,0,0 
               # du monde 3d, il faut recuperer quelques infos 
               # a droite et a gauche: 

               O=Object.GetSelected() 
               P=Object.Get('Plane') 
               A=Object.Get('Armature') 

               O[0].loc[0]=A.loc[0] 
               O[0].loc[1]=A.loc[1] 
               O[0].loc[2]=A.loc[2] 

               O[0].rot[0]=P.rot[0] 
               O[0].rot[1]=P.rot[1] 
               O[0].rot[2]=P.rot[2] 

               #reste plus qu'a reafficher: 
               Redraw() 

            # ATTENTION a Redraw()
        # Dans blender 2.25 utilisez plutot:
               # Window.RedrawAll()
               #
               #
               #
               #
               #bingo!!


Dans Blender 2.25 (et suivant jusqu'à la version 2.27) utilisez plutot:
 

import Blender
from Blender import * 

# Ce qui suit est conseillé dans la doc 
# mais ne fonctionne pas car buggé
# from Blender import Scene
# S=Scene.getCurrent()
# S.currentFrame(frame=11)
# mais, par contre:

Blender._Blender.Set('curframe',11)

# On suppose que l'animation 
# est au moins de 11 frames 
# pour passer à la 11ieme.

# Constaté sur les denières modifications
# du script Povanim pour blender2.25/26
# les coordonnées modifiées par armature ne sont pas
# mises à jour, il faut forcer l'actuallisation
# du tampon qui gère les Meshes déformés
# en redessinant toutes les fenêtres:

Blender.Window.RedrawAll()

me=NMesh.GetRawFromObject('Plane') 
NMesh.PutRaw(me,'test',1) 

# Dans l'etat actuel, c'est au point 0,0,0 
# du monde 3d, il faut recuperer quelques infos 
# a droite et a gauche: 

O=Object.GetSelected() 
P=Object.Get('Plane') 
A=Object.Get('Armature') 

O[0].loc[0]=A.loc[0] 
O[0].loc[1]=A.loc[1] 
O[0].loc[2]=A.loc[2] 

O[0].rot[0]=P.rot[0] 
O[0].rot[1]=P.rot[1] 
O[0].rot[2]=P.rot[2] 

#reste plus qu'a reafficher:
Blender.Window.RedrawAll()
 

Version ultra courte prévue pour les menus de Blender 2. 3 et suivants.
Télécharger le script
 

#!BPY

""" Registration info for Blender menus: <- these words are ignored
Name: 'FixfromArmature'
Blender: 232
Group: 'Misc'
Tip: 'Fix armature deformation.'
"""
#----------------------------------------------
# Page officielle :
#   http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_rawfromobject.htm
# Communiquer les problemes et erreurs sur:
#   http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
#--------------------------------------------- 
# ce script est proposé sous licence GPL pour etre associe
# a la distribution de Blender 2.33 et suivant
#----------------------------------------------

import Blender
try:
  Ozero=Blender.Object.GetSelected()[0]
  nomdelobjet=Ozero.getName()
  Mesh=Blender.NMesh.GetRawFromObject(nomdelobjet)
  Obis = Blender.Object.New ('Mesh')
  Obis.link(Mesh)
  Obis.setSize(Ozero.getSize())
  Obis.setEuler(Ozero.getEuler())
  Obis.setLocation(Ozero.getMatrix()[3][0:3])
  scene = Blender.Scene.getCurrent()
  scene.link (Obis)
except:
  print "not a mesh or no object selected" 

Version pour copier les vertex groups et les softbodies, et à peu près tout les objets  (si on excepte  les Metaballs qui ont une structure particulière nécessitant le choix de la sphère principale)  .
Prévue pour les menus de Blender 2. 4 et suivants .
Télécharger le script
 
 

#!BPY

""" Registration info for Blender menus: <- these words are ignored
Name: 'Fix From Armature'
Blender: 232
Group: 'Mesh'
Tip: 'Fix armature/lattice/RVK/curve deform and taper/softBodies deformation (without bake) or anything else .''
"""

__author__ = "Jean-Michel Soler (jms)"
__url__ = ("blender", "elysiun",
"Script's homepage, http://jmsoler.free.fr/util/blenderfile/py/fixfromarmature.py",
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
__version__ = "10/2004"

__bpydoc__ = """\
This script creates a copy of the active mesh with armature deformation fixed.

Usage:

Select the mesh, or any thing else (take care of selecting the main Metaball if you try the script on blobby object),  and run this script.  A fixed mesh copy  will be created.
"""

# $Id: fixfromarmature.py,v 1.5 2004/11/07 16:31:13 ianwill Exp $
#
#----------------------------------------------
# jm soler  05/2004-->04/2006 :   'FixfromArmature'
#----------------------------------------------
# Official Page :
#   http://jmsoler.free.fr/util/blenderfile/py/fixfromarmature.py
# Communicate problems and errors on:
#   http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
#---------------------------------------------
# Page officielle :
#   http://jmsoler.free.fr/util/blenderfile/py/fixfromarmature.py
# Communiquer les problemes et erreurs sur:
#   http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
#---------------------------------------------
# ce script est proposé sous licence GPL pour etre associe
# a la distribution de Blender 2.33 et suivant
# --------------------------------------------------------------------------
# this script is released under GPL licence
# for the Blender 2.33 scripts package
# --------------------------------------------------------------------------
# ***** BEGIN GPL LICENSE BLOCK *****
#
# Script copyright (C) 2003, 2004: Jean-Michel Soler 
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------

import Blender
try:
 softbodies=0 
 softbodies=Blender.Draw.PupMenu("Is this mesh a soft bodies ?%t|Not %x1|Yes %x2")
 if softbodies==2:
     softbodies=Blender.Draw.PupMenu("Softbodies can be fixed but we need to play anim upto the current frame ?%t|Not %x1 |Yes %x2")
     if softbodies==2:
        curframe=Blender.Get('curframe')
        for f in range(curframe):
               Blender.Set('curframe',f+1)
               Blender.Window.RedrawAll()
 

 Ozero=Blender.Object.GetSelected()[0]
 nomdelobjet=Ozero.getName()
 Mesh=Blender.NMesh.GetRawFromObject(nomdelobjet)
 Obis = Blender.Object.New ('Mesh')
 Obis.link(Mesh)
 Obis.setMatrix(Ozero.getMatrix())
 scene = Blender.Scene.getCurrent()
 scene.link (Obis)

 Mesh2=Obis.getData()
 Mesh1=Ozero.getData()

 if Ozero.getType()=='Mesh' :
    if len(Mesh2.verts)==len(Mesh1.verts): 
       for VertGroupName in Mesh1.getVertGroupNames():
         VertexList = Mesh1.getVertsFromGroup(VertGroupName, True)
         Mesh2.addVertGroup(VertGroupName)
         for Vertex in VertexList:
             Mesh2.assignVertsToGroup(VertGroupName, [Vertex[0]], Vertex[1], 'add')
    else:
      for vgroupname in Mesh1.getVertGroupNames():
        Mesh2.addVertGroup(vgroupname)
 Mesh2.update()

except:
 Blender.Draw.PupMenu("Error%t|Not the main metabal or no object selected ")

Test sur les Fonts et autres courbes  accessibles à partir de 2.39 :

Le script  suivant transforme  un objet Text en Mesh 
 
import Blender
MESH=Blender.NMesh.GetRawFromObject('Font')
Blender.NMesh.PutRaw(MESH,'test') 

L'image ci-dessous présente le même objet Text et sa transcription en mesh en utilisant les propriétés index des sommets attachés à chaque face:


import Blender
MESH=Blender.NMesh.GetRawFromObject('Font')
MESH2=Blender.NMesh.GetRaw()
MESH2.verts=MESH.verts[:]
for f in  MESH.faces:
 f0=Blender.NMesh.Face()
 for v in f.v:
  f0.v.append(MESH2.verts[v.index])
 MESH2.faces.append(f0)
Blender.NMesh.PutRaw(MESH2,'test')
Variation, dont les auteurs de scripts 'export saisiront tous l'intérêt, donnant le résultat attendu :
import Blender
MESH=Blender.NMesh.GetRawFromObject('Font')
MESH2=Blender.NMesh.GetRaw()
MESH2.verts=MESH.verts[:]
for f in  MESH.faces:
 f0=Blender.NMesh.Face()
 for v in f.v:
  f0.v.append(MESH2.verts[MESH2.verts.index(v)])
 MESH2.faces.append(f0) 
Blender.NMesh.PutRaw(MESH2,'test')

Surface et Curve ainsi que les metaballs peuvent être traitées

Mise a jour pour l'api 2.49
 

#-------------------------- 
#  jmsoler 03/2009
#--------------------------

from Blender import Object, Mesh, Mathutils
import bpy

sce = bpy.data.scenes.active
objet = sce.objects.active   

def resetrotsize(obj): 
    mat = obj.matrix
    me = bpy.data.meshes.new('myMesh')
    me.getFromObject(obj)
    for v in me.verts: 
       v.co=(v.co * mat) - mat.translationPart()
    
    ob = sce.objects.new(me)
    ob.setLocation(mat.translationPart())

if objet and objet.getType()=="Mesh":
     resetrotsize(objet) 


 
précédent  Python: Fonction New
 Python:Object clone Suivant
Vers le  Haut de page

Les questions concernant cette page  peuvent être posées sur  :
 news://www.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