From cf60bf576b741f031450886c5dc4f0a11bbd4d06 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 19 Nov 2007 10:17:55 +0000 Subject: simple weight invert script for the weightpaint menu, removed a print from weightpaint_average.py --- release/scripts/weightpaint_average.py | 1 - release/scripts/weightpaint_invert.py | 93 ++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 release/scripts/weightpaint_invert.py (limited to 'release') diff --git a/release/scripts/weightpaint_average.py b/release/scripts/weightpaint_average.py index 57c27605da5..4e8830256b2 100644 --- a/release/scripts/weightpaint_average.py +++ b/release/scripts/weightpaint_average.py @@ -103,7 +103,6 @@ def main(): if PREF_ALL_VGROUPS==-1: return - print "sd", PREF_ALL_VGROUPS Window.WaitCursor(1) me = ob_act.getData(mesh=1) # old NMesh api is default t = sys.time() diff --git a/release/scripts/weightpaint_invert.py b/release/scripts/weightpaint_invert.py new file mode 100644 index 00000000000..87aec77ad8d --- /dev/null +++ b/release/scripts/weightpaint_invert.py @@ -0,0 +1,93 @@ +#!BPY +""" +Name: 'Vertex Group Invert' +Blender: 245 +Group: 'WeightPaint' +Tooltip: 'Invert the active vertex group' +""" + +# -------------------------------------------------------------------------- +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# 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 +from Blender import Scene, Mesh, Window, sys + +import BPyMessages +import bpy + +def vgroup_invert(ob_orig, me): + if not me.getVertGroupNames(): + return + group_act = me.activeGroup + if group_act == None: + return + + group_data = me.getVertsFromGroup(group_act, 1) + + weights= [1.0] * len(me.verts) # 1.0 - initialize inverted + + group_data = me.getVertsFromGroup(group_act, 1) # (i,w) tuples. + + me.removeVertGroup(group_act) # messes up the active group. + for i,w in group_data: + weights[i] = 1.0-w + + me.addVertGroup(group_act) + rep = Blender.Mesh.AssignModes.REPLACE + vertList= [None] + for i,weight in enumerate(weights): + vertList[0] = i + if weight != 0.0: + me.assignVertsToGroup(group_act, vertList, weight, rep) + me.update() + +def main(): + + # Gets the current scene, there can be many scenes in 1 blend file. + sce = bpy.data.scenes.active + + # Get the active object, there can only ever be 1 + # and the active object is always the editmode object. + ob_act = sce.objects.active + + if not ob_act or ob_act.type != 'Mesh': + BPyMessages.Error_NoMeshActive() + return + + # Saves the editmode state and go's out of + # editmode if its enabled, we cant make + # changes to the mesh data while in editmode. + is_editmode = Window.EditMode() + Window.EditMode(0) + + Window.WaitCursor(1) + me = ob_act.getData(mesh=1) # old NMesh api is default + t = sys.time() + + # Run the mesh editing function + vgroup_invert(ob_act, me) + + # Timing the script is a good way to be aware on any speed hits when scripting + print 'Invert VGroup in %.2f seconds' % (sys.time()-t) + Window.WaitCursor(0) + if is_editmode: Window.EditMode(1) + +# This lets you can import the script without running it +if __name__ == '__main__': + main() \ No newline at end of file -- cgit v1.2.3