diff options
Diffstat (limited to 'release/scripts/startup/bl_operators/object_quick_effects.py')
-rw-r--r-- | release/scripts/startup/bl_operators/object_quick_effects.py | 233 |
1 files changed, 0 insertions, 233 deletions
diff --git a/release/scripts/startup/bl_operators/object_quick_effects.py b/release/scripts/startup/bl_operators/object_quick_effects.py index 414855c7e35..39a0ad31625 100644 --- a/release/scripts/startup/bl_operators/object_quick_effects.py +++ b/release/scripts/startup/bl_operators/object_quick_effects.py @@ -47,239 +47,6 @@ def object_ensure_material(obj, mat_name): return mat -class QuickFur(Operator): - bl_idname = "object.quick_fur" - bl_label = "Quick Fur" - bl_options = {'REGISTER', 'UNDO'} - - density = EnumProperty( - name="Fur Density", - items=(('LIGHT', "Light", ""), - ('MEDIUM', "Medium", ""), - ('HEAVY', "Heavy", "")), - default='MEDIUM', - ) - view_percentage = IntProperty( - name="View %", - min=1, max=100, - soft_min=1, soft_max=100, - default=10, - ) - length = FloatProperty( - name="Length", - min=0.001, max=100, - soft_min=0.01, soft_max=10, - default=0.1, - ) - - def execute(self, context): - fake_context = context.copy() - mesh_objects = [obj for obj in context.selected_objects - if obj.type == 'MESH' and obj.mode == 'OBJECT'] - - if not mesh_objects: - self.report({'ERROR'}, "Select at least one mesh object") - return {'CANCELLED'} - - mat = bpy.data.materials.new("Fur Material") - mat.strand.tip_size = 0.25 - mat.strand.blend_distance = 0.5 - - for obj in mesh_objects: - fake_context["object"] = obj - bpy.ops.object.particle_system_add(fake_context) - - psys = obj.particle_systems[-1] - psys.settings.type = 'HAIR' - - if self.density == 'LIGHT': - psys.settings.count = 100 - elif self.density == 'MEDIUM': - psys.settings.count = 1000 - elif self.density == 'HEAVY': - psys.settings.count = 10000 - - psys.settings.child_nbr = self.view_percentage - psys.settings.hair_length = self.length - psys.settings.use_strand_primitive = True - psys.settings.use_hair_bspline = True - psys.settings.child_type = 'INTERPOLATED' - - obj.data.materials.append(mat) - psys.settings.material = len(obj.data.materials) - - return {'FINISHED'} - - -class QuickExplode(Operator): - bl_idname = "object.quick_explode" - bl_label = "Quick Explode" - bl_options = {'REGISTER', 'UNDO'} - - style = EnumProperty( - name="Explode Style", - items=(('EXPLODE', "Explode", ""), - ('BLEND', "Blend", "")), - default='EXPLODE', - ) - amount = IntProperty( - name="Amount of pieces", - min=2, max=10000, - soft_min=2, soft_max=10000, - default=100, - ) - frame_duration = IntProperty( - name="Duration", - min=1, max=300000, - soft_min=1, soft_max=10000, - default=50, - ) - - frame_start = IntProperty( - name="Start Frame", - min=1, max=300000, - soft_min=1, soft_max=10000, - default=1, - ) - frame_end = IntProperty( - name="End Frame", - min=1, max=300000, - soft_min=1, soft_max=10000, - default=10, - ) - - velocity = FloatProperty( - name="Outwards Velocity", - min=0, max=300000, - soft_min=0, soft_max=10, - default=1, - ) - - fade = BoolProperty( - name="Fade", - description="Fade the pieces over time", - default=True, - ) - - def execute(self, context): - fake_context = context.copy() - obj_act = context.active_object - - if obj_act is None or obj_act.type != 'MESH': - self.report({'ERROR'}, "Active object is not a mesh") - return {'CANCELLED'} - - mesh_objects = [obj for obj in context.selected_objects - if obj.type == 'MESH' and obj != obj_act] - mesh_objects.insert(0, obj_act) - - if self.style == 'BLEND' and len(mesh_objects) != 2: - self.report({'ERROR'}, "Select two mesh objects") - self.style = 'EXPLODE' - return {'CANCELLED'} - elif not mesh_objects: - self.report({'ERROR'}, "Select at least one mesh object") - return {'CANCELLED'} - - for obj in mesh_objects: - if obj.particle_systems: - self.report({'ERROR'}, - "Object %r already has a " - "particle system" % obj.name) - - return {'CANCELLED'} - - if self.fade: - tex = bpy.data.textures.new("Explode fade", 'BLEND') - tex.use_color_ramp = True - - if self.style == 'BLEND': - tex.color_ramp.elements[0].position = 0.333 - tex.color_ramp.elements[1].position = 0.666 - - tex.color_ramp.elements[0].color[3] = 1.0 - tex.color_ramp.elements[1].color[3] = 0.0 - - if self.style == 'BLEND': - from_obj = mesh_objects[1] - to_obj = mesh_objects[0] - - for obj in mesh_objects: - fake_context["object"] = obj - bpy.ops.object.particle_system_add(fake_context) - - settings = obj.particle_systems[-1].settings - settings.count = self.amount - settings.frame_start = self.frame_start - settings.frame_end = self.frame_end - self.frame_duration - settings.lifetime = self.frame_duration - settings.normal_factor = self.velocity - settings.render_type = 'NONE' - - explode = obj.modifiers.new(name='Explode', type='EXPLODE') - explode.use_edge_cut = True - - if self.fade: - explode.show_dead = False - uv = obj.data.uv_textures.new("Explode fade") - explode.particle_uv = uv.name - - mat = object_ensure_material(obj, "Explode Fade") - - mat.use_transparency = True - mat.use_transparent_shadows = True - mat.alpha = 0.0 - mat.specular_alpha = 0.0 - - tex_slot = mat.texture_slots.add() - - tex_slot.texture = tex - tex_slot.texture_coords = 'UV' - tex_slot.uv_layer = uv.name - - tex_slot.use_map_alpha = True - - if self.style == 'BLEND': - if obj == to_obj: - tex_slot.alpha_factor = -1.0 - elem = tex.color_ramp.elements[1] - else: - elem = tex.color_ramp.elements[0] - # Keep already defined alpha! - elem.color[:3] = mat.diffuse_color - else: - tex_slot.use_map_color_diffuse = False - - if self.style == 'BLEND': - settings.physics_type = 'KEYED' - settings.use_emit_random = False - settings.rotation_mode = 'NOR' - - psys = obj.particle_systems[-1] - - fake_context["particle_system"] = obj.particle_systems[-1] - bpy.ops.particle.new_target(fake_context) - bpy.ops.particle.new_target(fake_context) - - if obj == from_obj: - psys.targets[1].object = to_obj - else: - psys.targets[0].object = from_obj - settings.normal_factor = -self.velocity - explode.show_unborn = False - explode.show_dead = True - else: - settings.factor_random = self.velocity - settings.angular_velocity_factor = self.velocity / 10.0 - - return {'FINISHED'} - - def invoke(self, context, event): - self.frame_start = context.scene.frame_current - self.frame_end = self.frame_start + self.frame_duration - return self.execute(context) - - def obj_bb_minmax(obj, min_co, max_co): for i in range(0, 8): bb_vec = obj.matrix_world * Vector(obj.bound_box[i]) |