SVN maintenance.
[blender-addons-contrib.git] / oscurart_futurism.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 bl_info = {
20     "name": "Futurism",
21     "author": "Oscurart",
22     "version": (1, 1),
23     "blender": (2, 5, 9),
24     "location": "Object > Futurism",
25     "description": "Adds a new Mesh Object",
26     "warning": "",
27     "wiki_url": "",
28     "tracker_url": "",
29     "category": "Add Mesh"}
30
31
32 import bpy
33
34 def object_osc_futurism (self, context,STEP, HOLD):
35     ACTOBJ=bpy.context.active_object # OBJETO ACTIVO
36     FS=bpy.context.scene.frame_start # FRAME START
37     FE=bpy.context.scene.frame_end # FRAME END
38     OBJLIST=[] # LISTA PARA OBJETOS ????
39     FC=FS # FRAME CURRENT
40     OBJNUMBER=1 # SUFIJO DE NUMERO PARA OBJETOS
41     STEPINC=0 # NUMERO PARA EVALUAR LOS PASOS    
42     # SETEO EL FRAME CURRENT
43     bpy.context.scene.frame_set(FS)  
44     
45     OBACT = bpy.context.active_object
46     
47     ## CREO EMPTY
48     bpy.ops.object.add()
49     bpy.context.active_object.name = "FuturismContainer"
50     EMPTY = bpy.context.active_object
51     
52     bpy.context.scene.objects.active = OBACT  
53     
54     for OBJETO in range((FE+1)-FS):
55         if STEPINC == STEP:
56             # CREO UN MESH A PARTIR DE OBJETO
57             MESH=ACTOBJ.to_mesh(bpy.context.scene, True, 'PREVIEW')
58             # CREO OBJETO
59             OBJECT=bpy.data.objects.new(ACTOBJ.name[:3]+str(FC), MESH)
60             # CONECTO A LA ESCENA
61             bpy.context.scene.objects.link(OBJECT)
62             # SETEO FRAME CURRENT
63             bpy.context.scene.frame_set(FC)
64             # MARCO EXPRESIONES PARA VIEW
65             OBJECT.driver_add("hide")
66             OBJECT.animation_data.drivers[0].driver.variables.new()
67             OBJECT.animation_data.drivers[0].driver.expression= "False if frame >= "+str(FC)+" and frame <= "+str(FC+HOLD)+" else True"
68             OBJECT.animation_data.drivers[0].driver.variables[0].targets[0].id_type = 'SCENE'
69             OBJECT.animation_data.drivers[0].driver.variables[0].targets[0].id= bpy.context.scene
70             OBJECT.animation_data.drivers[0].driver.variables[0].targets[0].data_path = "current_frame"
71             # MARCO EXPRESIONES PARA RENDER
72             OBJECT.driver_add("hide_render")
73             OBJECT.animation_data.drivers[1].driver.variables.new()
74             OBJECT.animation_data.drivers[1].driver.expression= "False if frame >= "+str(FC)+" and frame <= "+str(FC+HOLD)+" else True"
75             OBJECT.animation_data.drivers[1].driver.variables[0].targets[0].id_type = 'SCENE'
76             OBJECT.animation_data.drivers[1].driver.variables[0].targets[0].id= bpy.context.scene
77             OBJECT.animation_data.drivers[1].driver.variables[0].targets[0].data_path = "current_frame"            
78             # RESETEO STEPINC
79             STEPINC=0
80             # COPIAMOS S R T
81             OBJECT.matrix_world=ACTOBJ.matrix_world
82             #EMPARENTO
83             OBJECT.parent=EMPTY
84         # AVANZO STEP Y FRAME
85         FC+=1
86         STEPINC+=1
87         
88     
89
90 # CLASE PARA OPERADOR
91 class Oscurart_futurism (bpy.types.Operator):
92     bl_idname = "object.duplicate_futurism"
93     bl_label = "Duplicate Futurism"
94     bl_description = "Duplicate object per frame"
95     bl_options = {'REGISTER', 'UNDO'}
96
97     scale = bpy.props.IntProperty(name='Step',default=1, min=1, max=1000)
98     
99     hold = bpy.props.IntProperty(name='Hold', default=0, min=0)
100
101     def execute(self, context):
102         object_osc_futurism(self, context, self.scale, self.hold)
103
104         return {'FINISHED'}
105
106
107 # Registration
108
109 def add_osc_futurism_button(self, context):
110     self.layout.operator(
111         Oscurart_futurism.bl_idname,
112         text="Futurism",
113         icon="PLUGIN")
114
115
116 def register():
117     bpy.utils.register_class(Oscurart_futurism)
118     bpy.types.VIEW3D_MT_object.append(add_osc_futurism_button)
119
120
121 def unregister():
122     bpy.utils.unregister_class(Oscurart_futurism)
123     bpy.types.VIEW3D_MT_object.remove(add_osc_futurism_button)
124
125
126 if __name__ == '__main__':
127     register()