[Bf-python] update to Apply_def.py

Campbell Barton cbarton at metavr.com
Tue Jul 4 17:50:19 CEST 2006


Hi, just updated Apply_def.py to use Mesh over NMesh,
Changed it from a mesh script to an object script and it works with non 
mesh objects that have a display list.

Is it too late to update, Theeth what do you think?

#!BPY

"""
Name: 'Copy to Baked'
Blender: 234
Group: 'Object'
Tooltip: 'Make copys of all the selected objects with modifiers, 
softbodies and fluid baked into a mesh'
"""

__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 "_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: Apply_def.py,v 1.8 2006/01/29 19:17:52 ianwill Exp $
#
# --------------------------------------------------------------------------
# ***** BEGIN GPL LICENSE BLOCK *****
#
# Copyright (C) 2003: Martin Poirier, theeth at 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 apply_deform():
    scn= Blender.Scene.GetCurrent()
    ADD= Blender.Mesh.AssignModes.ADD
    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:
        name = ob.name
        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_me = BPyMesh.getMeshFromObject(ob, vgroups=False) # Do out 
own group copy later
        if not new_me:
            continue # Object has no dosplay list
           
        new_me.name= new_name
       
        new_ob= Blender.Object.New('Mesh', new_name)
        new_ob.link(new_me)
        scn.link(new_ob)
        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
    deformedList[0].sel = 1 # Keep the same object active.
   
    Blender.Window.RedrawAll()

if __name__=='__main__':
    apply_deform()



-- 
Campbell J Barton

133 Hope Street
Geelong West, Victoria 3218 Australia

URL:    http://www.metavr.com
e-mail: cbarton at metavr.com
phone: AU (03) 5229 0241



More information about the Bf-python mailing list