[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3216] contrib/py/scripts/addons/ object_mangle_tools.py: adding mangle tools to contrib

Brendon Murphy meta.androcto1 at gmail.com
Thu Apr 5 06:37:09 CEST 2012


Revision: 3216
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3216
Author:   meta-androcto
Date:     2012-04-05 04:37:08 +0000 (Thu, 05 Apr 2012)
Log Message:
-----------
adding mangle tools to contrib

Added Paths:
-----------
    contrib/py/scripts/addons/object_mangle_tools.py

Added: contrib/py/scripts/addons/object_mangle_tools.py
===================================================================
--- contrib/py/scripts/addons/object_mangle_tools.py	                        (rev 0)
+++ contrib/py/scripts/addons/object_mangle_tools.py	2012-04-05 04:37:08 UTC (rev 3216)
@@ -0,0 +1,199 @@
+# mangle_tools.py (c) 2011 Phil Cote (cotejrp1)
+#
+# ***** 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENCE BLOCK *****
+
+bl_info = {
+    'name': 'Mangle Tools',
+    'author': 'Phil Cote, cotejrp1, (http://www.blenderaddons.com)',
+    'version': (0, 2),
+    "blender": (2, 6, 3),
+    'location': 'VIEW 3D -> TOOLS',
+    'description': 'Set of tools to mangle curves, meshes, and shape keys',
+    'warning': '',
+    'category': 'Object'}
+
+
+import bpy
+import random
+import time
+from math import pi
+from pdb import set_trace
+
+def move_coordinate(context, co, is_curve=False):
+    xyz_const = context.scene.constraint_vector
+    random.seed(time.time())
+    multiplier = 1
+
+    # For curves, we base the multiplier on the circumference formula.
+    # This helps make curve changes more noticable.
+    if is_curve:
+        multiplier = 2 * pi
+    random_mag = context.scene.random_magnitude
+    if xyz_const[0]:    
+        co.x += .01 * random.randrange( -random_mag, random_mag ) * multiplier
+    if xyz_const[1]:
+        co.y += .01 * random.randrange( -random_mag, random_mag )  * multiplier
+    if xyz_const[2]:
+        co.z += .01 * random.randrange( -random_mag, random_mag ) * multiplier
+
+
+class MeshManglerOperator(bpy.types.Operator):
+    '''push vertices on the selected object around in random directions to 
+    create a crumpled look'''
+    bl_idname = "ba.mesh_mangler"
+    bl_label = "Mangle Mesh"
+    bl_options = { "REGISTER", "UNDO" }
+
+    @classmethod
+    def poll(cls, context):
+        ob = context.active_object
+        return ob != None and ob.type == 'MESH'
+
+    def execute(self, context):
+        mesh = context.active_object.data
+        verts, faces = mesh.vertices, mesh.polygons
+        randomMag = context.scene.random_magnitude
+        random.seed( time.time() )
+
+        if mesh.shape_keys != None:
+            self.report( {"INFO"}, "Cannot mangle mesh: Shape keys present" )
+            return {'CANCELLED'}
+        
+        for vert in verts:
+            xVal = .01 * random.randrange( -randomMag, randomMag )
+            yVal = .01 * random.randrange( -randomMag, randomMag)
+            zVal = .01 * random.randrange( -randomMag, randomMag )
+            vert.co.x = vert.co.x + xVal
+            vert.co.y = vert.co.y + yVal
+            vert.co.z = vert.co.z + zVal    
+            
+        return {'FINISHED'}
+
+
+class AnimanglerOperator(bpy.types.Operator):
+    '''makes a shape key and pushes the verts around on it to set up for random pulsating animation'''
+    bl_idname = "ba.ani_mangler"
+    bl_label = "Mangle Shape Key"
+
+
+    @classmethod
+    def poll(cls, context):
+        ob = context.active_object
+        return ob != None and ob.type in [ 'MESH', 'CURVE' ]
+
+    def execute(self, context):
+        scn = context.scene
+        mangleName = scn.mangle_name
+        ob = context.object
+        shapeKey = ob.shape_key_add( name=mangleName )
+        verts = shapeKey.data
+        
+        for vert in verts:
+            move_coordinate(context, vert.co, is_curve=ob.type=='CURVE')
+            
+        return {'FINISHED'}
+
+
+class CurveManglerOp(bpy.types.Operator):
+    '''Mangles a curve to the degree the user specifies'''
+    bl_idname = "ba.curve_mangler"
+    bl_label = "Mangle Curve"
+    bl_options = { 'REGISTER', 'UNDO' }
+
+    @classmethod
+    def poll(cls, context):
+        ob = context.active_object
+        return ob != None and ob.type == "CURVE"
+
+
+    def execute(self, context):
+
+        ob = context.active_object
+        if ob.data.shape_keys != None:
+            self.report({"INFO"}, "Cannot mangle curve.  Shape keys present")
+            return {'CANCELLED'}
+        splines = context.object.data.splines
+        
+        for spline in splines:
+            if spline.type == 'BEZIER':
+                points = spline.bezier_points
+            elif spline.type in ('POLY', 'NURBS'):
+                points = spline.points
+
+            for point in points:
+                move_coordinate(context, point.co, is_curve=True)
+
+        return {'FINISHED'}
+
+
+class MangleToolsPanel(bpy.types.Panel):
+    bl_label = "Mangle Tools"
+    bl_space_type = "VIEW_3D"
+    bl_region_type="TOOLS"
+    bl_context = "objectmode"
+    bl_options = {'DEFAULT_CLOSED'}
+
+    def draw(self, context):
+        scn = context.scene
+        layout = self.layout
+        col = layout.column()
+        col.prop(scn, "constraint_vector")
+        col.prop(scn, "random_magnitude")
+
+        col.operator("ba.curve_mangler")
+        col.operator("ba.mesh_mangler")
+        col.separator()
+        col.prop(scn, "mangle_name")
+        col.operator("ba.ani_mangler")
+
+
+IntProperty = bpy.props.IntProperty
+StringProperty = bpy.props.StringProperty
+BoolVectorProperty = bpy.props.BoolVectorProperty
+
+def register():
+    bpy.utils.register_class(AnimanglerOperator)
+    bpy.utils.register_class(MeshManglerOperator)
+    bpy.utils.register_class(CurveManglerOp)
+    bpy.utils.register_class(MangleToolsPanel)
+    scnType = bpy.types.Scene
+    
+                                    
+    scnType.constraint_vector = BoolVectorProperty(name="Mangle Constraint", 
+                                default=(True,True,True),
+                                subtype='XYZ',
+                                description="Constrains Mangle Direction")
+                                
+    scnType.random_magnitude = IntProperty( name = "Mangle Severity", 
+                              default = 10, min = 1, max = 30, 
+                              description = "Severity of mangling")
+    
+    scnType.mangle_name = StringProperty(name="Shape Key Name",
+                             default="mangle",
+                             description="Name given for mangled shape keys")
+def unregister():
+    bpy.utils.unregister_class(AnimanglerOperator)
+    bpy.utils.unregister_class(MeshManglerOperator)
+    bpy.utils.unregister_class(MangleToolsPanel)
+    bpy.utils.unregister_class(CurveManglerOp)
+
+
+if __name__ == "__main__":
+    register()



More information about the Bf-extensions-cvs mailing list