Blender (jusqu'à 2.49)
Python 
Function : "GetRawFromObjet"
    Beginning   Index
previous  Python: New Function
Python:Clone object Next

 
  1. In Blender 2.23
  2. In Blender 2.25/2.26
  3. In Blender 2.3 menus and the followings
  4. Vertex Groups et SoftBodies and quite any thing else : text, curves, surface, metaball . For Blender version 2.4


Description: Using the GetRawFromObject function,  added in B2.23, to duplicate/freeze an object modified by  an armature ( a light adaptation is necessary for a rvk or a lattice or a special effect of animation. It will be the object of a forthcoming page).
 
 

               import Blender 
               from Blender import * 

               # We suppose that the animation 
               #  has at least 11 frames . 
               #  To pass to the 11th: 

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

               # In the present state, it is to the 0,0,0  point 
               # of the 3d world, that we must collect a few information 
               # to the right and to the left: 

               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] 

               # it only remains to re-display: 
               Redraw() 

            # CAUTION a Redraw()
          # In blender 2.25 we must prefer the following  :
               # Window.RedrawAll()
               #
               #
               #
               #
               #Hurra!!


In Blender 2.25 (and the following until  the 2.27 version) we must prefer:
 
 

import Blender
from Blender import * 

# What follows is advised in the documentation
# but it doesn't work because it's bugged
# from Blender import Scene
# S=Scene.getCurrent()
# S.currentFrame(frame=11)
# You should better use this instead:

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

# We suppose that the animation 
# has at least 11 frames 
# to pass to the 11th.

# Noted on the last modifications
# of the Povanim script dedicated to blender 2.25/26
# the "by armature" modified coordinates are not updated
# , actualization of the buffer that manages
# the modified Meshes must be forced
# by redrawing all the windows :

Blender.Window.RedrawAll()

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

# In the present state, it is to the 0,0,0 point 
# of the 3d world, that we must collect a few information 
# to the right and to the left : 

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] 

# It only remains to re-display :
Blender.Window.RedrawAll()
 

Very short version planned for the Blender  2.3  menus and following.
Download the script
 
 

#!BPY 

""" Registration info for Blender menus: <- these words are ignored 
Name: 'FixfromArmature' 
Blender: 232 
Group: 'Misc' 
Tip: 'Fix armature deformation.' 
""" 
#---------------------------------------------- 
# Official page : 
#   http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_rawfromobject.htm 
# To communicate the problems and errors on : 
#   http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender 
#--------------------------------------------- 
# This script is proposed under GPL licence to be associated 
# with the Blender 2.33 distribution and following 
#---------------------------------------------- 

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 to copy the vertex groups and the softbodies  planned for Blender 2.3  menus and following.
Download the script
The softbodies are active only in the CVS version of Blender 2.36
 
 

#!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)'
"""

__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/2005 :   '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 ")


 
previous  Python:  New Function
 Python: Clone object Next
To the  Top of the page

Questions concerning this page can be asked on  :
 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