diff options
author | Campbell Barton <ideasman42@gmail.com> | 2006-07-06 15:09:44 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2006-07-06 15:09:44 +0400 |
commit | 02bb354cbecadf7096f13eb51a6f93a8fbcd04ae (patch) | |
tree | 85c0ed115c17f79ece3757932ce6af0422e4e850 /release | |
parent | d82ec08331b95604dc89500c01f793da77516433 (diff) |
merged the functionality of both these scripts into 1 new script,
Both had small problems,
This script works with soft bodies (as fixfromarmature does) and works on multiple objects at once as Apply_def does.
Made them use Mesh over NMesh unless soft bodies are involved- in that case is uses NMesh because Mesh cant get soft body info at the moment.
This script also works with non mesh objects - mballs, text, nurbs etc.
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/Apply_def.py | 108 | ||||
-rw-r--r-- | release/scripts/fixfromarmature.py | 111 | ||||
-rw-r--r-- | release/scripts/object_apply_def.py | 176 |
3 files changed, 176 insertions, 219 deletions
diff --git a/release/scripts/Apply_def.py b/release/scripts/Apply_def.py deleted file mode 100644 index f0e3c029b50..00000000000 --- a/release/scripts/Apply_def.py +++ /dev/null @@ -1,108 +0,0 @@ -#!BPY - -""" -Name: 'Apply Deformation' -Blender: 234 -Group: 'Mesh' -Tooltip: 'Create fixed copies of deformed meshes' -""" - -__author__ = "Martin 'theeth' Poirier" -__url__ = ("http://www.blender.org", "http://www.elysiun.com") -__version__ = "1.5 09/21/04" - -__bpydoc__ = """\ -This script creates "raw" copies of deformed meshes. - -Usage: - -Select the mesh(es) and run this script. A fixed copy of each selected mesh -will be created, with the word "_deformed" appended to its name. If an object with -the same name already exists, it appends a number at the end as Blender itself does. - -Meshes in Blender can be deformed by armatures, lattices, curve objects and subdivision, but this will only change its appearance on screen and rendered -images -- the actual mesh data is still simpler, with vertices in an original -"rest" position and less vertices than the subdivided version. - -Use this script if you want a "real" version of the deformed mesh, so you can -directly manipulate or export its data. -""" - - -# $Id$ -# -# -------------------------------------------------------------------------- -# ***** BEGIN GPL LICENSE BLOCK ***** -# -# Copyright (C) 2003: Martin Poirier, theeth@yahoo.com -# -# Thanks to Jonathan Hudson for help with the vertex groups part -# -# 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 - -Blender.Window.EditMode(0) - -NAME_LENGTH = 19 -PREFIX = "_def" -PREFIX_LENGTH = len(PREFIX) - -ob_list = Blender.Object.GetSelected() - -for ob in ob_list: - ob.sel = 0 - -used_names = [ob.name for ob in Blender.Object.Get()] -used_names.extend(Blender.NMesh.GetNames()) - -deformedList = [] -for ob in ob_list: - if ob.getType() == "Mesh": - name = ob.getName() - new_name = "%s_def" % name[:NAME_LENGTH-PREFIX_LENGTH] - num = 0 - new_mesh = Blender.NMesh.GetRawFromObject(name) - while new_name in used_names: - new_name = "%s_def.%.3i" % (name[:NAME_LENGTH-(PREFIX_LENGTH+PREFIX_LENGTH)], num) - num += 1 - - used_names.append(new_name) - - new_ob = Blender.NMesh.PutRaw(new_mesh, new_name) - new_ob.setMatrix(ob.getMatrix()) - new_ob.setName(new_name) - deformedList.append(new_ob) - - # Vert groups. - ob_mesh = ob.getData() - new_ob_mesh = new_ob.getData() - - for vgroupname in ob_mesh.getVertGroupNames(): - new_ob_mesh.addVertGroup(vgroupname) - if len(ob_mesh.verts) == len(new_ob_mesh.verts): - vlist = ob_mesh.getVertsFromGroup(vgroupname, True) - try: - for vpair in vlist: - new_ob_mesh.assignVertsToGroup(vgroupname, [vpair[0]], vpair[1], 'add') - except: - pass - -for ob in deformedList: - ob.sel = 1 -deformedList[0].sel = 1 # Keep the same object active.
\ No newline at end of file diff --git a/release/scripts/fixfromarmature.py b/release/scripts/fixfromarmature.py deleted file mode 100644 index 0dceb8287dd..00000000000 --- a/release/scripts/fixfromarmature.py +++ /dev/null @@ -1,111 +0,0 @@ -#!BPY - -""" Registration info for Blender menus: <- these words are ignored -Name: 'Fix From Armature' -Blender: 240 -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/didacticiel/blender/tutor/cpl_rawfromobject_en.htm#softbodiesveretxgroups", -"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender") -__version__ = "04/2006" - -__bpydoc__ = """\ -This script creates a copy of the active mesh -with armature, lattice, shape key or curve deformation -fixed in the modified state . It can also create a mesh -copy of any other object, curve, surface nurbs, text, -deformed, or not, by a shape key or an absolute key . - -Usage: - -Select the mesh, or anything else (take care of selecting -the main metaball if you try the script on blobby object), -and run this script. - -""" - -# $Id$ -# -#---------------------------------------------- -# jm soler 05/2004-->04/2006 : 'FixfromArmature' -#---------------------------------------------- -# Official Page : -# http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_rawfromobject_en.htm#softbodiesveretxgroups -# 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 metaball or no object selected ")
\ No newline at end of file diff --git a/release/scripts/object_apply_def.py b/release/scripts/object_apply_def.py new file mode 100644 index 00000000000..901ee8aceaf --- /dev/null +++ b/release/scripts/object_apply_def.py @@ -0,0 +1,176 @@ +#!BPY + +""" +Name: 'Apply Deformation' +Blender: 241 +Group: 'Object' +Tooltip: 'Make copys of all the selected objects with modifiers, softbodies and fluid baked into a mesh' +""" + +__author__ = "Martin 'theeth' Poirier, Campbell 'ideasman' Barton" +__url__ = ("http://www.blender.org", "http://www.elysiun.com") +__version__ = "1.5 09/21/04" + +__bpydoc__ = """\ +This script creates "raw" copies of deformed meshes. + +Usage: + +Select the mesh(es) and run this script. A fixed copy of each selected mesh +will be created, with the word "_def" appended to its name. If an object with +the same name already exists, it appends a number at the end as Blender itself does. + +Meshes in Blender can be deformed by armatures, lattices, curve objects and subdivision, but this will only change its appearance on screen and rendered +images -- the actual mesh data is still simpler, with vertices in an original +"rest" position and less vertices than the subdivided version. + +Use this script if you want a "real" version of the deformed mesh, so you can +directly manipulate or export its data. +""" + + +# $Id$ +# +# -------------------------------------------------------------------------- +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# Copyright (C) 2003: Martin Poirier, theeth@yahoo.com +# +# Thanks to Jonathan Hudson for help with the vertex groups part +# +# 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 +import BPyMesh + + +def mesh_from_ob(ob): + ''' + This wraps + BPyMesh.getMeshFromObject + and NMesh.GetRawFromObject() + + Because BPyMesh.getMeshFromObject dosent do softbody meshes at the moment - a problem with Mesh + + WARNING Returns a Mesh or NMesh, should be ok- but take care + ''' + if ob.isSB(): + # NMesh for softbody + try: + return Blender.NMesh.GetRawFromObject(ob.name) + except: + return None + else: + # Mesh for no softbody + return BPyMesh.getMeshFromObject(ob, vgroups=False) + + + +def apply_deform(): + scn= Blender.Scene.GetCurrent() + ADD= Blender.Mesh.AssignModes.ADD + #Blender.Window.EditMode(0) + + NAME_LENGTH = 19 + PREFIX = "_def" + PREFIX_LENGTH = len(PREFIX) + # Get all object and mesh names + + + ob_list = Blender.Object.GetSelected() + if not ob_list: + Blender.Draw.PupMenu('No objects selected, nothing to do.') + return + + # Deselect and test for softbody + has_sb= False + for ob in ob_list: + ob.sel = 0 + + # Test for a softbody + if not has_sb and ob.isSB(): + has_sb= True + + + if has_sb: + curframe=Blender.Get('curframe') + for f in xrange(curframe): + Blender.Set('curframe',f+1) + Blender.Window.RedrawAll() + + used_names = [ob.name for ob in Blender.Object.Get()] + used_names.extend(Blender.NMesh.GetNames()) + + + deformedList = [] + for ob in ob_list: + + # Get the mesh data + new_me= mesh_from_ob(ob) + if not new_me: + continue # Object has no display list + + + name = ob.name + new_name = "%s_def" % name[:NAME_LENGTH-PREFIX_LENGTH] + num = 0 + + while new_name in used_names: + new_name = "%s_def.%.3i" % (name[:NAME_LENGTH-(PREFIX_LENGTH+PREFIX_LENGTH)], num) + num += 1 + used_names.append(new_name) + + + + new_me.name= new_name + + new_ob= Blender.Object.New('Mesh', new_name) + new_ob.link(new_me) + scn.link(new_ob) + new_ob.setMatrix(ob.matrixWorld) + new_ob.Layers= ob.Layers + + deformedList.append(new_ob) + + # Original object was a mesh? see if we can copy any vert groups. + if ob.getType()=='Mesh': + orig_me= ob.getData(mesh=1) + + vgroups= orig_me.getVertGroupNames() + if vgroups: + new_me= new_ob.getData(mesh=1) # Do this so we can de vgroup stuff + for vgroupname in vgroups: + new_me.addVertGroup(vgroupname) + if len(new_me.verts) == len(orig_me.verts): + vlist = orig_me.getVertsFromGroup(vgroupname, True) + try: + for vpair in vlist: + new_me.assignVertsToGroup(vgroupname, [vpair[0]], vpair[1], ADD) + except: + pass + + for ob in deformedList: + ob.sel = 1 + + if deformedList: + deformedList[0].sel = 1 # Keep the same object active. + + Blender.Window.RedrawAll() + +if __name__=='__main__': + apply_deform()
\ No newline at end of file |