[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3094] contrib/py/scripts/addons/ BProjection.py: Add BProjection.py

geo kgeo kgeogeo at hotmail.com
Tue Mar 13 08:36:15 CET 2012


Revision: 3094
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3094
Author:   kgeogeo
Date:     2012-03-13 07:35:58 +0000 (Tue, 13 Mar 2012)
Log Message:
-----------
Add BProjection.py

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

Added: contrib/py/scripts/addons/BProjection.py
===================================================================
--- contrib/py/scripts/addons/BProjection.py	                        (rev 0)
+++ contrib/py/scripts/addons/BProjection.py	2012-03-13 07:35:58 UTC (rev 3094)
@@ -0,0 +1,630 @@
+bl_info = {
+    "name": "Z Projection",
+    "description": "Help Clone tool",
+    "author": "kgeogeo",
+    "version": (1, 0),
+    "blender": (2, 6, 3),
+    "category": "Paint"}
+
+import bpy
+from bpy.types import Panel, Operator
+from bpy.props import IntProperty, FloatProperty, BoolProperty, IntVectorProperty, StringProperty
+from bpy_extras import view3d_utils
+from mathutils import *
+from math import * 
+import mathutils
+import math
+
+def align_to_view(context):
+    ob = context.object        
+    rotation = ob.custom_rotation
+    scale = ob.custom_scale
+    z = ob.custom_z
+    posx = ob.custom_location[0]
+    posy = ob.custom_location[1]
+
+    reg = bpy.context.area.regions[4]        
+    width = reg.width
+    height = reg.height 
+        
+    r3d =  context.space_data.region_3d        
+    r3d.update()
+    vl = r3d.view_location
+    vr = r3d.view_rotation
+    quat = mathutils.Quaternion((0.0, 0.0, 1.0), math.radians(float(rotation)))
+        
+    v = Vector((1,0,z))
+    v.rotate(vr)
+
+    pos = (posx,posy) 
+
+    em = bpy.data.objects['Empty for clone']
+    img = bpy.data.textures['Texture for clone'].image
+    if img and img.size[1] != 0:
+        prop = img.size[0]/img.size[1]
+        em.scale[0] = prop
+    else: prop = 1    
+        
+    em.scale =  Vector((prop*scale, scale, scale))
+    em.location = view3d_utils.region_2d_to_location_3d(context.area.regions[4], r3d, pos, v)        
+    em.rotation_euler = Quaternion.to_euler(vr*quat)
+
+class HelpClone(Panel):
+    bl_space_type = 'VIEW_3D'
+    bl_region_type = 'UI'
+    bl_label = "Help Clone"
+
+    @classmethod
+    def poll(cls, context):
+        return (context.image_paint_object)
+
+    def draw(self, context):        
+        layout = self.layout
+                
+        try: 
+            bpy.data.objects['Empty for clone']
+
+            col = layout.column(align =True)
+            col.operator("object.removecloneplane", text="Remove clone plane")
+        
+            tex = bpy.data.textures['Texture for clone']
+
+            layout.template_ID_preview(tex, "image", open="image.open", rows=3, cols=3)
+        
+            col = layout.column(align =True)
+            col.operator('object.applyimage', text = "Apply image")
+            col = layout.column(align =True)
+            ob = context.object
+            col.prop(ob, "custom_c3d",text="Capture Cursor3d")
+            col.prop(ob, "custom_rot",text="Rotate around selection")
+            col = layout.column(align =True)
+            col.prop(ob,'custom_rotation', slider = True)
+            col.prop(ob,'custom_scale', slider = True) 
+            col.prop(ob,'custom_z', slider = True) 
+            col.prop(ob,'custom_location')
+            col = layout.column(align =True)
+            col.prop(ob,'custom_scaleuv', slider = True)
+            col = layout.column(align =True)
+            col.prop(ob.material_slots['Material for clone'].material,'alpha', slider = True)
+
+        except:
+            col = layout.column(align =True)
+            col.operator("object.addcloneplane", text="Add clone plan")             
+                
+class ApplyImage(Operator):
+    bl_idname = "object.applyimage"
+    bl_label = "Apply image"
+
+    def execute(self, context):        
+        img = bpy.data.textures['Texture for clone'].image
+        em = bpy.data.objects['Empty for clone']
+        uvdata = bpy.context.object.data.uv_textures.active.data        
+        uvdata[len(uvdata)-1].image = img
+        if img and img.size[1] != 0:        
+            prop = img.size[0]/img.size[1]                
+            em.scale[0] = prop
+            
+        context.object.data.update()
+        align_to_view(context)
+        
+        return {'FINISHED'}
+
+class DrawLines(Operator):
+    bl_idname = "object.drawlines"
+    bl_label = "Draw lines"
+
+    def invoke(self, context, event):
+        
+        x = event.mouse_region_x
+        y = event.mouse_region_y                
+        if len(bpy.context.object.grease_pencil.layers.active.frames)==0: 
+            bpy.ops.gpencil.draw(mode='DRAW', stroke=[{"name":"", "pen_flip":False,
+                                                                "is_start":True, "location":(0, 0, 0),
+                                                                "mouse":(x,y), "pressure":1, "time":0}])
+        else:
+            if len(bpy.context.object.grease_pencil.layers.active.frames[0].strokes) < 4:
+                bpy.ops.gpencil.draw(mode='DRAW', stroke=[{"name":"", "pen_flip":False,
+                                                                    "is_start":True, "location":(0, 0, 0),
+                                                                    "mouse":(x,y), "pressure":1, "time":0}])
+            if len(bpy.context.object.grease_pencil.layers.active.frames[0].strokes) == 4:
+                s = bpy.context.object.grease_pencil.layers.active.frames[0]
+                v1 = s.strokes[1].points[0].co - s.strokes[0].points[0].co
+                v2 = s.strokes[3].points[0].co - s.strokes[2].points[0].co
+                prop = v1.x/v2.x
+                bpy.context.object.custom_scale *= abs(prop)
+                bpy.ops.gpencil.active_frame_delete()
+        
+        return {'FINISHED'}
+
+class AddClonePlane(Operator):
+    bl_idname = "object.addcloneplane"
+    bl_label = "Configure"
+    
+    def creatematerial(self, context):        
+        try:
+            matclone = bpy.data.materials['Material for clone']
+        except:            
+            bpy.data.textures.new(name='Texture for clone',type='IMAGE')
+    
+            bpy.data.materials.new(name='Material for clone')
+            
+            matclone = bpy.data.materials['Material for clone']
+            matclone.texture_slots.add()
+            matclone.use_shadeless = True
+            matclone.use_transparency = True
+            matclone.active_texture = bpy.data.textures['Texture for clone']
+        
+            index = matclone.active_texture_index
+            matclone.texture_slots[index].texture_coords = 'UV'
+     
+        old_index = context.object.active_material_index
+        bpy.ops.object.material_slot_add()
+        index = context.object.active_material_index
+        bpy.context.object.material_slots[index].material = bpy.data.materials['Material for clone']
+        bpy.ops.object.material_slot_assign()
+        context.object.active_material_index = old_index
+            
+    def execute(self, context):    
+        try:
+            bpy.data.objects['Empty for clone']
+
+        except:            
+            bpy.ops.paint.texture_paint_toggle()
+            
+            bpy.context.space_data.show_relationship_lines = False
+            
+            ob = bpy.context.object
+        
+            bpy.ops.object.add()
+            em = bpy.context.object
+            em.name = "Empty for clone"
+                        
+            bpy.data.scenes['Scene'].objects.active = ob
+            ob.select = True
+    
+            bpy.ops.object.editmode_toggle()
+    
+            bpy.ops.mesh.primitive_plane_add()
+            bpy.ops.object.vertex_group_assign(new = True)
+            ob.vertex_groups.active.name = 'texture plane'   
+            bpy.ops.uv.unwrap()
+            
+            bpy.ops.object.editmode_toggle()
+            for i in range(4):
+                ob.data.edges[len(ob.data.edges)-1-i].crease = 1
+            bpy.ops.object.editmode_toggle()
+    
+            em.select = True
+            bpy.ops.object.hook_add_selob()
+            
+            self.creatematerial(context)
+            
+            bpy.ops.gpencil.data_add()
+            bpy.context.object.grease_pencil.draw_mode = 'VIEW'
+            bpy.ops.gpencil.layer_add()
+            bpy.context.object.grease_pencil.layers.active.color = [1.0,0,0]
+
+            bpy.ops.mesh.hide()
+            
+            em.select = False
+            em.hide = True
+            
+            bpy.ops.object.editmode_toggle()
+                    
+            bpy.ops.object.applyimage()
+            km = bpy.data.window_managers['WinMan'].keyconfigs['Blender'].keymaps['3D View']
+            km.keymap_items[3-1].idname = 'view3d.rotate_view3d'
+            km.keymap_items[19-1].idname = 'view3d.zoom_view3d'
+            km.keymap_items[19-1].properties.delta = 1.0
+            km.keymap_items[20-1].idname = 'view3d.zoom_view3d'
+            km.keymap_items[20-1].properties.delta = -1.0
+            km.keymap_items[4-1].idname = 'view3d.pan_view3d'
+            km.keymap_items[26-1].idname = 'view3d.preset_view3d'
+            km.keymap_items[26-1].properties.view = 'FRONT'
+            km.keymap_items[28-1].idname = 'view3d.preset_view3d'
+            km.keymap_items[28-1].properties.view = 'RIGHT'            
+            km.keymap_items[32-1].idname = 'view3d.preset_view3d'
+            km.keymap_items[32-1].properties.view = 'TOP'
+            km.keymap_items[34-1].idname = 'view3d.preset_view3d'
+            km.keymap_items[34-1].properties.view = 'BACK'
+            km.keymap_items[35-1].idname = 'view3d.preset_view3d'
+            km.keymap_items[35-1].properties.view = 'LEFT'            
+            km.keymap_items[36-1].idname = 'view3d.preset_view3d'
+            km.keymap_items[36-1].properties.view = 'BOTTOM'                                   
+            km = bpy.context.window_manager.keyconfigs.default.keymaps['Image Paint']
+            kmi = km.keymap_items.new("object.drawlines", 'LEFTMOUSE', 'PRESS', shift=True)
+                        
+            align_to_view(context)
+            
+            bpy.ops.paint.texture_paint_toggle()
+            
+        return {'FINISHED'}
+    
+class RemoveClonePlane(Operator):
+    bl_idname = "object.removecloneplane"
+    bl_label = "Configure"
+
+    def removematerial(self, context):
+        i = 0
+        for ms in context.object.material_slots:
+            if ms.name == 'Material for clone':
+                index = i
+            i+=1
+                
+        context.object.active_material_index = index

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list