Skip to content
Snippets Groups Projects
Select Git revision
  • ea457d4ab516e0cfa0ea28c5b601c02a87805cf1
  • master default protected
  • blender-v3.6-release
  • main
  • blender-v4.1-release
  • blender-v4.0-release
  • blender-v3.3-release
  • asset-shelf
  • blender-v3.5-release
  • brush-assets-project
  • blender-v2.93-release
  • blender-v3.4-release
  • xr-dev
  • bholodeck-v3.3
  • blender-v3.2-release
  • temp-xr-tracker
  • blender-v3.1-release
  • screenshots-manual
  • gltf_vtree
  • blender-v2.83-release
  • blender-v3.0-release
  • v3.6.18
  • v3.6.19
  • v3.6.20
  • v3.6.21
  • v3.6.22
  • v3.6.23
  • v4.1.1
  • v4.1.0
  • v3.6.10
  • v3.6.11
  • v3.6.12
  • v3.6.13
  • v3.6.14
  • v3.6.15
  • v3.6.16
  • v3.6.17
  • v3.6.9
  • v3.3.16
  • v3.6.8
  • v3.3.15
41 results

import_fbx.py

Blame
  • object_particle_hair_lab.py 55.81 KiB
    # ##### 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 LICENSE BLOCK #####
    
    bl_info = {
        "name": "Grass Lab",
        "author": "Ondrej Raha(lokhorn), meta-androcto",
        "version": (0, 5),
        "blender": (2, 75, 0),
        "location": "View3D > ToolShelf > Create Tab",
        "description": "Creates particle grass with material",
        "warning": "",
        "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Object/Hair_Lab",
        "tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
        "category": "Object"}
    
    
    import bpy
    from bpy.props import *
    
    # Returns the action we want to take
    def getActionToDo(obj):
        if not obj or obj.type != 'MESH':
            return 'NOT_OBJ_DO_NOTHING'
        elif obj.type == 'MESH':
            return 'GENERATE'
        else:
            return "DO_NOTHING"
    
    # TO DO
    """
    class saveSelectionPanel(bpy.types.Panel):
        bl_space_type = 'VIEW_3D'
        bl_region_type = 'TOOLS'
    
        bl_label = "Selection Save"
        bl_options = {'DEFAULT_CLOSED'}
        bl_context = "particlemode"
    
    
        def draw(self, context):
            layout = self.layout
            col = layout.column(align=True)
    
            col.operator("save.selection", text="Save Selection 1")
    """
    ######GRASS########################
    class grassLabPanel(bpy.types.Panel):
        bl_space_type = 'VIEW_3D'
        bl_region_type = 'TOOLS'
        bl_label = "Grass Lab"
        bl_context = "objectmode"
        bl_options = {'DEFAULT_CLOSED'}
        bl_category = "Create"
    
        def draw(self, context):
            active_obj = bpy.context.active_object
            active_scn = bpy.context.scene.name
            layout = self.layout
            col = layout.column(align=True)
    
            WhatToDo = getActionToDo(active_obj)
    
    
            if WhatToDo == "GENERATE":
                col.operator("grass.generate_grass", text="Create grass")
    
                col.prop(context.scene, "grass_type")
            else:
                col.label(text="Select mesh object")
    
            if active_scn == "TestgrassScene":
                col.operator("grass.switch_back", text="Switch back to scene")
            else:
                col.operator("grass.test_scene", text="Create Test Scene")
    
    # TO DO
    """
    class saveSelection(bpy.types.Operator):
        bl_idname = "save.selection"
        bl_label = "Save Selection"
        bl_description = "Save selected particles"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
    
            return {'FINISHED'}
    """
    class testScene1(bpy.types.Operator):
        bl_idname = "grass.switch_back"
        bl_label = "Switch back to scene"
        bl_description = "If you want keep this scene, switch scene in info window"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
            scene = bpy.context.scene
            bpy.data.scenes.remove(scene)
    
            return {'FINISHED'}
    
    
    class testScene2(bpy.types.Operator):
        bl_idname = "grass.test_scene"
        bl_label = "Create test scene"
        bl_description = "You can switch scene in info panel"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
    # add new scene
            bpy.ops.scene.new(type="NEW")
            scene = bpy.context.scene
            scene.name = "TestgrassScene"
    # render settings
            render = scene.render
            render.resolution_x = 1920
            render.resolution_y = 1080
            render.resolution_percentage = 50
    # add new world
            world = bpy.data.worlds.new("grassWorld")
            scene.world = world
            world.use_sky_blend = True
            world.use_sky_paper = True
            world.horizon_color = (0.004393,0.02121,0.050)
            world.zenith_color = (0.03335,0.227,0.359)
    
    # add text
            bpy.ops.object.text_add(location=(-0.292,0,-0.152), rotation =(1.571,0,0))
            text = bpy.context.active_object
            text.scale = (0.05,0.05,0.05)
            text.data.body = "Grass Lab"
    
    # add material to text
            textMaterial = bpy.data.materials.new('textMaterial')
            text.data.materials.append(textMaterial)
            textMaterial.use_shadeless = True
    
    # add camera
            bpy.ops.object.camera_add(location = (0,-1,0),rotation = (1.571,0,0))
            cam = bpy.context.active_object.data
            cam.lens = 50
            cam.display_size = 0.1
    
    # add spot lamp
            bpy.ops.object.lamp_add(type="SPOT", location = (-0.7,-0.5,0.3), rotation =(1.223,0,-0.960))
            lamp1 = bpy.context.active_object.data
            lamp1.name = "Key Light"
            lamp1.energy = 1.5
            lamp1.distance = 1.5
            lamp1.shadow_buffer_soft = 5
            lamp1.shadow_buffer_size = 8192
            lamp1.shadow_buffer_clip_end = 1.5
            lamp1.spot_blend = 0.5
    
    # add spot lamp2
            bpy.ops.object.lamp_add(type="SPOT", location = (0.7,-0.6,0.1), rotation =(1.571,0,0.785))
            lamp2 = bpy.context.active_object.data
            lamp2.name = "Fill Light"
            lamp2.color = (0.874,0.874,1)
            lamp2.energy = 0.5
            lamp2.distance = 1.5
            lamp2.shadow_buffer_soft = 5
            lamp2.shadow_buffer_size = 4096
            lamp2.shadow_buffer_clip_end = 1.5
            lamp2.spot_blend = 0.5
    
    # light Rim
            """
            # add spot lamp3
            bpy.ops.object.lamp_add(type="SPOT", location = (0.191,0.714,0.689), rotation =(0.891,0,2.884))
            lamp3 = bpy.context.active_object.data
            lamp3.name = "Rim Light"
            lamp3.color = (0.194,0.477,1)
            lamp3.energy = 3
            lamp3.distance = 1.5
            lamp3.shadow_buffer_soft = 5
            lamp3.shadow_buffer_size = 4096
            lamp3.shadow_buffer_clip_end = 1.5
            lamp3.spot_blend = 0.5
            """
    # add sphere
    # add sphere
            bpy.ops.mesh.primitive_uv_sphere_add(size=0.1)
            bpy.ops.object.shade_smooth()
    
            return {'FINISHED'}
    
    
    class Generategrass(bpy.types.Operator):
        bl_idname = "grass.generate_grass"
        bl_label = "Generate grass"
        bl_description = "Create a grass"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
    # Make variable that is the current .blend file main data blocks
            blend_data = context.blend_data
            ob = bpy.context.active_object
            scene = context.scene
    
    ######################################################################
    ########################Test screen grass########################
            if scene.grass_type == '0':
    
    ###############Create New Material##################
    # add new material
                grassMaterial = bpy.data.materials.new('greengrassMat')
                ob.data.materials.append(grassMaterial)
    
    #Material settings
                grassMaterial.preview_render_type = "HAIR"
                grassMaterial.diffuse_color = (0.09710, 0.288, 0.01687)
                grassMaterial.specular_color = (0.604, 0.465, 0.136)
                grassMaterial.specular_intensity = 0.3
                grassMaterial.ambient = 0
                grassMaterial.use_cubic = True
                grassMaterial.use_transparency = True
                grassMaterial.alpha = 0
                grassMaterial.use_transparent_shadows = True
                #strand
                grassMaterial.strand.use_blender_units = True
                grassMaterial.strand.root_size = 0.00030
                grassMaterial.strand.tip_size = 0.00010
                grassMaterial.strand.size_min = 0.7
                grassMaterial.strand.width_fade = 0.1
                grassMaterial.strand.shape = 0.061
                grassMaterial.strand.blend_distance = 0.001
    
    
    # add texture
                grassTex = bpy.data.textures.new("greengrassTex", type='BLEND')
                grassTex.use_preview_alpha = True
                grassTex.use_color_ramp = True
                ramp = grassTex.color_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.114,0.375,0.004025,0.38]
                rampElements[1].position = 1
                rampElements[1].color = [0.267,0.155,0.02687,0]
                rampElement1 = rampElements.new(0.111)
                rampElement1.color = [0.281,0.598,0.03157,0.65]
                rampElement2 = rampElements.new(0.366)
                rampElement2.color = [0.119,0.528,0.136,0.87]
                rampElement3 = rampElements.new(0.608)
                rampElement3.color = [0.247,0.713,0.006472,0.8]
                rampElement4 = rampElements.new(0.828)
                rampElement4.color = [0.01943,0.163,0.01242,0.64]
    
    # add texture to material
                MTex = grassMaterial.texture_slots.add()
                MTex.texture = grassTex
                MTex.texture_coords = "STRAND"
                MTex.use_map_alpha = True
    
    
    
    ###############  Create Particles  ##################
    # Add new particle system
    
                NumberOfMaterials = 0
                for i in ob.data.materials:
                    NumberOfMaterials +=1
    
    
                bpy.ops.object.particle_system_add()
    #Particle settings setting it up!
                grassParticles = bpy.context.object.particle_systems.active
                grassParticles.name = "greengrassPar"
                grassParticles.settings.type = "HAIR"
                grassParticles.settings.use_advanced_hair = True
                grassParticles.settings.count = 500
                grassParticles.settings.normal_factor = 0.05
                grassParticles.settings.factor_random = 0.001
                grassParticles.settings.use_dynamic_rotation = True
    
                grassParticles.settings.material = NumberOfMaterials
    
                grassParticles.settings.use_strand_primitive = True
                grassParticles.settings.use_hair_bspline = True
                grassParticles.settings.render_step = 5
                grassParticles.settings.length_random = 0.5
                grassParticles.settings.display_step = 5
    # children
                grassParticles.settings.rendered_child_count = 50
                grassParticles.settings.child_type = "INTERPOLATED"
                grassParticles.settings.child_length = 0.250
                grassParticles.settings.create_long_hair_children = True
                grassParticles.settings.clump_shape = 0.074
                grassParticles.settings.clump_factor = 0.55
                grassParticles.settings.roughness_endpoint = 0.080
                grassParticles.settings.roughness_end_shape = 0.80
                grassParticles.settings.roughness_2 = 0.043
                grassParticles.settings.roughness_2_size = 0.230
    
    
    ######################################################################
    ######################  Field Grass  ########################
            if scene.grass_type == '1':
    ###############Create New Material##################
    # add new material
                grassMaterial = bpy.data.materials.new('fieldgrassMat')
                ob.data.materials.append(grassMaterial)
    
    #Material settings
                grassMaterial.preview_render_type = "HAIR"
                grassMaterial.diffuse_color = (0.229, 0.800, 0.010)
                grassMaterial.specular_color = (0.010, 0.06072, 0.000825)
                grassMaterial.specular_intensity = 0.3
                grassMaterial.specular_hardness = 100
                grassMaterial.use_specular_ramp = True
    
                ramp = grassMaterial.specular_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.0356,0.0652,0.009134,0]
                rampElements[1].position = 1
                rampElements[1].color = [0.352,0.750,0.231,1]
                rampElement1 = rampElements.new(0.255)
                rampElement1.color = [0.214,0.342,0.0578,0.31]
                rampElement2 = rampElements.new(0.594)
                rampElement2.color = [0.096,0.643,0.0861,0.72]
    
                grassMaterial.ambient = 0
                grassMaterial.use_cubic = True
                grassMaterial.use_transparency = True
                grassMaterial.alpha = 0
                grassMaterial.use_transparent_shadows = True
                #strand
                grassMaterial.strand.use_blender_units = True
                grassMaterial.strand.root_size = 0.00030
                grassMaterial.strand.tip_size = 0.00015
                grassMaterial.strand.size_min = 0.450
                grassMaterial.strand.width_fade = 0.1
                grassMaterial.strand.shape = 0.02
                grassMaterial.strand.blend_distance = 0.001
    
    
    # add texture
                grassTex = bpy.data.textures.new("feildgrassTex", type='BLEND')
                grassTex.name = "feildgrassTex"
                grassTex.use_preview_alpha = True
                grassTex.use_color_ramp = True
                ramp = grassTex.color_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.009721,0.006049,0.003677,0.38]
                rampElements[1].position = 1
                rampElements[1].color = [0.04231,0.02029,0.01444,0.16]
                rampElement1 = rampElements.new(0.111)
                rampElement1.color = [0.01467,0.005307,0.00316,0.65]
                rampElement2 = rampElements.new(0.366)
                rampElement2.color = [0.0272,0.01364,0.01013,0.87]
                rampElement3 = rampElements.new(0.608)
                rampElement3.color = [0.04445,0.02294,0.01729,0.8]
                rampElement4 = rampElements.new(0.828)
                rampElement4.color = [0.04092,0.0185,0.01161,0.64]
    
    # add texture to material
                MTex = grassMaterial.texture_slots.add()
                MTex.texture = grassTex
                MTex.texture_coords = "STRAND"
                MTex.use_map_alpha = True
    
    
    ###############Create Particles##################
    # Add new particle system
    
                NumberOfMaterials = 0
                for i in ob.data.materials:
                    NumberOfMaterials +=1
    
    
                bpy.ops.object.particle_system_add()
    #Particle settings setting it up!
                grassParticles = bpy.context.object.particle_systems.active
                grassParticles.name = "fieldgrassPar"
                grassParticles.settings.type = "HAIR"
                grassParticles.settings.use_emit_random = True
                grassParticles.settings.use_even_distribution = True
                grassParticles.settings.use_advanced_hair = True
                grassParticles.settings.count = 2000
    #Particle settings Velocity
                grassParticles.settings.normal_factor = 0.060
                grassParticles.settings.factor_random = 0.045
                grassParticles.settings.use_dynamic_rotation = False
                grassParticles.settings.brownian_factor = 0.070
                grassParticles.settings.damping = 0.160
                grassParticles.settings.material = NumberOfMaterials
     # strands
                grassParticles.settings.use_strand_primitive = True
                grassParticles.settings.use_hair_bspline = True
                grassParticles.settings.render_step = 7
                grassParticles.settings.length_random = 1.0
                grassParticles.settings.display_step = 2
    # children
                grassParticles.settings.child_type = "INTERPOLATED"
                grassParticles.settings.child_length = 0.160
                grassParticles.settings.create_long_hair_children = False
                grassParticles.settings.clump_factor = 0.000
                grassParticles.settings.clump_shape = 0.000
                grassParticles.settings.roughness_endpoint = 0.000
                grassParticles.settings.roughness_end_shape = 1
                grassParticles.settings.roughness_2 = 0.200
                grassParticles.settings.roughness_2_size = 0.230
    
    
    ######################################################################
    ########################Short Clumpped grass##########################
            elif scene.grass_type == '2':
    ###############Create New Material##################
    # add new material
                grassMaterial = bpy.data.materials.new('clumpygrassMat')
                ob.data.materials.append(grassMaterial)
    
    #Material settings
                grassMaterial.preview_render_type = "HAIR"
                grassMaterial.diffuse_color = (0.01504, 0.05222, 0.007724)
                grassMaterial.specular_color = (0.02610, 0.196, 0.04444)
                grassMaterial.specular_intensity = 0.5
                grassMaterial.specular_hardness = 100
                grassMaterial.ambient = 0
                grassMaterial.use_cubic = True
                grassMaterial.use_transparency = True
                grassMaterial.alpha = 0
                grassMaterial.use_transparent_shadows = True
    #strand
                grassMaterial.strand.use_blender_units = True
                grassMaterial.strand.root_size = 0.000315
                grassMaterial.strand.tip_size = 0.00020
                grassMaterial.strand.size_min = 0.2
                grassMaterial.strand.width_fade = 0.1
                grassMaterial.strand.shape = -0.900
                grassMaterial.strand.blend_distance = 0.001
    
    # add texture
                grassTex = bpy.data.textures.new("clumpygrasstex", type='BLEND')
                grassTex.use_preview_alpha = True
                grassTex.use_color_ramp = True
                ramp = grassTex.color_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.004025,0.002732,0.002428,0.38]
                rampElements[1].position = 1
                rampElements[1].color = [0.141,0.622,0.107,0.2]
                rampElement1 = rampElements.new(0.202)
                rampElement1.color = [0.01885,0.2177,0.01827,0.65]
                rampElement2 = rampElements.new(0.499)
                rampElement2.color = [0.114,0.309,0.09822,0.87]
                rampElement3 = rampElements.new(0.828)
                rampElement3.color = [0.141,0.427,0.117,0.64]
    
    # add texture to material
                MTex = grassMaterial.texture_slots.add()
                MTex.texture = grassTex
                MTex.texture_coords = "STRAND"
                MTex.use_map_alpha = True
    
    
    ###############Create Particles##################
    # Add new particle system
    
                NumberOfMaterials = 0
                for i in ob.data.materials:
                    NumberOfMaterials +=1
    
    
                bpy.ops.object.particle_system_add()
    #Particle settings setting it up!
                grassParticles = bpy.context.object.particle_systems.active
                grassParticles.name = "clumpygrass"
                grassParticles.settings.type = "HAIR"
                grassParticles.settings.use_advanced_hair = True
                grassParticles.settings.hair_step = 2
                grassParticles.settings.count = 250
                grassParticles.settings.normal_factor = 0.0082
                grassParticles.settings.tangent_factor = 0.001
                grassParticles.settings.tangent_phase = 0.250
                grassParticles.settings.factor_random = 0.001
                grassParticles.settings.use_dynamic_rotation = True
    
                grassParticles.settings.material = NumberOfMaterials
    
                grassParticles.settings.use_strand_primitive = True
                grassParticles.settings.use_hair_bspline = True
                grassParticles.settings.render_step = 3
                grassParticles.settings.length_random = 0.3
                grassParticles.settings.display_step = 3
    # children
                grassParticles.settings.child_type = "INTERPOLATED"
                grassParticles.settings.child_length = 0.667
                grassParticles.settings.child_length_threshold = 0.111
                grassParticles.settings.rendered_child_count = 200
                grassParticles.settings.virtual_parents = 1
                grassParticles.settings.clump_factor = 0.425
                grassParticles.settings.clump_shape = -0.999
                grassParticles.settings.roughness_endpoint = 0.003
                grassParticles.settings.roughness_end_shape = 5
    
    
    
            return {'FINISHED'}
    
    ####
    ######### HAIR LAB ##########
    ####
    class HairLabPanel(bpy.types.Panel):
        bl_space_type = 'VIEW_3D'
        bl_region_type = 'TOOLS'
        bl_label = "Hair Lab"
        bl_context = "objectmode"
        bl_options = {'DEFAULT_CLOSED'}
        bl_category = "Create"
    
        def draw(self, context):
            active_obj = bpy.context.active_object
            active_scn = bpy.context.scene.name
            layout = self.layout
            col = layout.column(align=True)
    
            WhatToDo = getActionToDo(active_obj)
    
    
            if WhatToDo == "GENERATE":
                col.operator("hair.generate_hair", text="Create Hair")
    
                col.prop(context.scene, "hair_type")
            else:
                col.label(text="Select mesh object")
    
            if active_scn == "TestHairScene":
                col.operator("hair.switch_back", text="Switch back to scene")
            else:
                col.operator("hair.test_scene", text="Create Test Scene")
    
    # TO DO
    """
    class saveSelection(bpy.types.Operator):
        bl_idname = "save.selection"
        bl_label = "Save Selection"
        bl_description = "Save selected particles"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
    
            return {'FINISHED'}
    """
    class testScene3(bpy.types.Operator):
        bl_idname = "hair.switch_back"
        bl_label = "Switch back to scene"
        bl_description = "If you want keep this scene, switch scene in info window"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
            scene = bpy.context.scene
            bpy.data.scenes.remove(scene)
    
            return {'FINISHED'}
    
    
    class testScene4(bpy.types.Operator):
        bl_idname = "hair.test_scene"
        bl_label = "Create test scene"
        bl_description = "You can switch scene in info panel"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
    # add new scene
            bpy.ops.scene.new(type="NEW")
            scene = bpy.context.scene
            scene.name = "TestHairScene"
    # render settings
            render = scene.render
            render.resolution_x = 1920
            render.resolution_y = 1080
            render.resolution_percentage = 50
    # add new world
            world = bpy.data.worlds.new("HairWorld")
            scene.world = world
            world.use_sky_blend = True
            world.use_sky_paper = True
            world.horizon_color = (0.004393,0.02121,0.050)
            world.zenith_color = (0.03335,0.227,0.359)
    
    # add text
            bpy.ops.object.text_add(location=(-0.292,0,-0.152), rotation =(1.571,0,0))
            text = bpy.context.active_object
            text.scale = (0.05,0.05,0.05)
            text.data.body = "Hair Lab"
    
    # add material to text
            textMaterial = bpy.data.materials.new('textMaterial')
            text.data.materials.append(textMaterial)
            textMaterial.use_shadeless = True
    
    # add camera
            bpy.ops.object.camera_add(location = (0,-1,0),rotation = (1.571,0,0))
            cam = bpy.context.active_object.data
            cam.lens = 50
            cam.display_size = 0.1
    
    # add spot lamp
            bpy.ops.object.lamp_add(type="SPOT", location = (-0.7,-0.5,0.3), rotation =(1.223,0,-0.960))
            lamp1 = bpy.context.active_object.data
            lamp1.name = "Key Light"
            lamp1.energy = 1.5
            lamp1.distance = 1.5
            lamp1.shadow_buffer_soft = 5
            lamp1.shadow_buffer_size = 8192
            lamp1.shadow_buffer_clip_end = 1.5
            lamp1.spot_blend = 0.5
    
    # add spot lamp2
            bpy.ops.object.lamp_add(type="SPOT", location = (0.7,-0.6,0.1), rotation =(1.571,0,0.785))
            lamp2 = bpy.context.active_object.data
            lamp2.name = "Fill Light"
            lamp2.color = (0.874,0.874,1)
            lamp2.energy = 0.5
            lamp2.distance = 1.5
            lamp2.shadow_buffer_soft = 5
            lamp2.shadow_buffer_size = 4096
            lamp2.shadow_buffer_clip_end = 1.5
            lamp2.spot_blend = 0.5
    
    # light Rim
            """
            # add spot lamp3
            bpy.ops.object.lamp_add(type="SPOT", location = (0.191,0.714,0.689), rotation =(0.891,0,2.884))
            lamp3 = bpy.context.active_object.data
            lamp3.name = "Rim Light"
            lamp3.color = (0.194,0.477,1)
            lamp3.energy = 3
            lamp3.distance = 1.5
            lamp3.shadow_buffer_soft = 5
            lamp3.shadow_buffer_size = 4096
            lamp3.shadow_buffer_clip_end = 1.5
            lamp3.spot_blend = 0.5
            """
    # add sphere
            bpy.ops.mesh.primitive_uv_sphere_add(size=0.1)
            bpy.ops.object.shade_smooth()
            return {'FINISHED'}
    
    
    class GenerateHair(bpy.types.Operator):
        bl_idname = "hair.generate_hair"
        bl_label = "Generate Hair"
        bl_description = "Create a Hair"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
    # Make variable that is the current .blend file main data blocks
            blend_data = context.blend_data
            ob = bpy.context.active_object
            scene = context.scene
    
    ######################################################################
    ########################Long Red Straight Hair########################
            if scene.hair_type == '0':
    
    ###############Create New Material##################
    # add new material
                hairMaterial = bpy.data.materials.new('LongRedStraightHairMat')
                ob.data.materials.append(hairMaterial)
    
    #Material settings
                hairMaterial.preview_render_type = "HAIR"
                hairMaterial.diffuse_color = (0.287, 0.216, 0.04667)
                hairMaterial.specular_color = (0.604, 0.465, 0.136)
                hairMaterial.specular_intensity = 0.3
                hairMaterial.ambient = 0
                hairMaterial.use_cubic = True
                hairMaterial.use_transparency = True
                hairMaterial.alpha = 0
                hairMaterial.use_transparent_shadows = True
    #strand
                hairMaterial.strand.use_blender_units = True
                hairMaterial.strand.root_size = 0.00030
                hairMaterial.strand.tip_size = 0.00010
                hairMaterial.strand.size_min = 0.7
                hairMaterial.strand.width_fade = 0.1
                hairMaterial.strand.shape = 0.061
                hairMaterial.strand.blend_distance = 0.001
    
    
    # add texture
                hairTex = bpy.data.textures.new("LongRedStraightHairTex", type='BLEND')
                hairTex.use_preview_alpha = True
                hairTex.use_color_ramp = True
                ramp = hairTex.color_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.114,0.05613,0.004025,0.38]
                rampElements[1].position = 1
                rampElements[1].color = [0.267,0.155,0.02687,0]
                rampElement1 = rampElements.new(0.111)
                rampElement1.color = [0.281,0.168,0.03157,0.65]
                rampElement2 = rampElements.new(0.366)
                rampElement2.color = [0.288,0.135,0.006242,0.87]
                rampElement3 = rampElements.new(0.608)
                rampElement3.color = [0.247,0.113,0.006472,0.8]
                rampElement4 = rampElements.new(0.828)
                rampElement4.color = [0.253,0.09919,0.01242,0.64]
    
    # add texture to material
                MTex = hairMaterial.texture_slots.add()
                MTex.texture = hairTex
                MTex.texture_coords = "STRAND"
                MTex.use_map_alpha = True
    
    
    
    ###############Create Particles##################
    # Add new particle system
    
                NumberOfMaterials = 0
                for i in ob.data.materials:
                    NumberOfMaterials +=1
    
    
                bpy.ops.object.particle_system_add()
    #Particle settings setting it up!
                hairParticles = bpy.context.object.particle_systems.active
                hairParticles.name = "LongRedStraightHairPar"
                hairParticles.settings.type = "HAIR"
                hairParticles.settings.use_advanced_hair = True
                hairParticles.settings.count = 500
                hairParticles.settings.normal_factor = 0.05
                hairParticles.settings.factor_random = 0.001
                hairParticles.settings.use_dynamic_rotation = True
    
                hairParticles.settings.material = NumberOfMaterials
    
                hairParticles.settings.use_strand_primitive = True
                hairParticles.settings.use_hair_bspline = True
                hairParticles.settings.render_step = 5
                hairParticles.settings.length_random = 0.5
                hairParticles.settings.display_step = 5
    # children
                hairParticles.settings.child_type = "INTERPOLATED"
                hairParticles.settings.create_long_hair_children = True
                hairParticles.settings.clump_factor = 0.55
                hairParticles.settings.roughness_endpoint = 0.005
                hairParticles.settings.roughness_end_shape = 5
                hairParticles.settings.roughness_2 = 0.003
                hairParticles.settings.roughness_2_size = 0.230
    
    
    ######################################################################
    ########################Long Brown Curl Hair##########################
            if scene.hair_type == '1':
    ###############Create New Material##################
    # add new material
                hairMaterial = bpy.data.materials.new('LongBrownCurlHairMat')
                ob.data.materials.append(hairMaterial)
    
    #Material settings
                hairMaterial.preview_render_type = "HAIR"
                hairMaterial.diffuse_color = (0.662, 0.518, 0.458)
                hairMaterial.specular_color = (0.351, 0.249, 0.230)
                hairMaterial.specular_intensity = 0.3
                hairMaterial.specular_hardness = 100
                hairMaterial.use_specular_ramp = True
    
                ramp = hairMaterial.specular_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.0356,0.0152,0.009134,0]
                rampElements[1].position = 1
                rampElements[1].color = [0.352,0.250,0.231,1]
                rampElement1 = rampElements.new(0.255)
                rampElement1.color = [0.214,0.08244,0.0578,0.31]
                rampElement2 = rampElements.new(0.594)
                rampElement2.color = [0.296,0.143,0.0861,0.72]
    
                hairMaterial.ambient = 0
                hairMaterial.use_cubic = True
                hairMaterial.use_transparency = True
                hairMaterial.alpha = 0
                hairMaterial.use_transparent_shadows = True
    #strand
                hairMaterial.strand.use_blender_units = True
                hairMaterial.strand.root_size = 0.00030
                hairMaterial.strand.tip_size = 0.00015
                hairMaterial.strand.size_min = 0.450
                hairMaterial.strand.width_fade = 0.1
                hairMaterial.strand.shape = 0.02
                hairMaterial.strand.blend_distance = 0.001
    
    
    # add texture
                hairTex = bpy.data.textures.new("HairTex", type='BLEND')
                hairTex.name = "LongBrownCurlHairTex"
                hairTex.use_preview_alpha = True
                hairTex.use_color_ramp = True
                ramp = hairTex.color_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.009721,0.006049,0.003677,0.38]
                rampElements[1].position = 1
                rampElements[1].color = [0.04231,0.02029,0.01444,0.16]
                rampElement1 = rampElements.new(0.111)
                rampElement1.color = [0.01467,0.005307,0.00316,0.65]
                rampElement2 = rampElements.new(0.366)
                rampElement2.color = [0.0272,0.01364,0.01013,0.87]
                rampElement3 = rampElements.new(0.608)
                rampElement3.color = [0.04445,0.02294,0.01729,0.8]
                rampElement4 = rampElements.new(0.828)
                rampElement4.color = [0.04092,0.0185,0.01161,0.64]
    
    # add texture to material
                MTex = hairMaterial.texture_slots.add()
                MTex.texture = hairTex
                MTex.texture_coords = "STRAND"
                MTex.use_map_alpha = True
    
    
    ###############Create Particles##################
    # Add new particle system
    
                NumberOfMaterials = 0
                for i in ob.data.materials:
                    NumberOfMaterials +=1
    
    
                bpy.ops.object.particle_system_add()
    #Particle settings setting it up!
                hairParticles = bpy.context.object.particle_systems.active
                hairParticles.name = "LongBrownCurlHairPar"
                hairParticles.settings.type = "HAIR"
                hairParticles.settings.use_advanced_hair = True
                hairParticles.settings.count = 500
                hairParticles.settings.normal_factor = 0.05
                hairParticles.settings.factor_random = 0.001
                hairParticles.settings.use_dynamic_rotation = True
    
                hairParticles.settings.material = NumberOfMaterials
    
                hairParticles.settings.use_strand_primitive = True
                hairParticles.settings.use_hair_bspline = True
                hairParticles.settings.render_step = 7
                hairParticles.settings.length_random = 0.5
                hairParticles.settings.display_step = 5
    # children
                hairParticles.settings.child_type = "INTERPOLATED"
                hairParticles.settings.create_long_hair_children = True
                hairParticles.settings.clump_factor = 0.523
                hairParticles.settings.clump_shape = 0.383
                hairParticles.settings.roughness_endpoint = 0.002
                hairParticles.settings.roughness_end_shape = 5
                hairParticles.settings.roughness_2 = 0.003
                hairParticles.settings.roughness_2_size = 2
    
                hairParticles.settings.kink = "CURL"
                hairParticles.settings.kink_amplitude = 0.007597
                hairParticles.settings.kink_frequency = 6
                hairParticles.settings.kink_shape = 0.4
                hairParticles.settings.kink_flat = 0.8
    
    
    ######################################################################
    ########################Short Dark Hair##########################
            elif scene.hair_type == '2':
    ###############Create New Material##################
    # add new material
                hairMaterial = bpy.data.materials.new('ShortDarkHairMat')
                ob.data.materials.append(hairMaterial)
    
    #Material settings
                hairMaterial.preview_render_type = "HAIR"
                hairMaterial.diffuse_color = (0.560, 0.536, 0.506)
                hairMaterial.specular_color = (0.196, 0.177, 0.162)
                hairMaterial.specular_intensity = 0.5
                hairMaterial.specular_hardness = 100
                hairMaterial.ambient = 0
                hairMaterial.use_cubic = True
                hairMaterial.use_transparency = True
                hairMaterial.alpha = 0
                hairMaterial.use_transparent_shadows = True
    #strand
                hairMaterial.strand.use_blender_units = True
                hairMaterial.strand.root_size = 0.0002
                hairMaterial.strand.tip_size = 0.0001
                hairMaterial.strand.size_min = 0.3
                hairMaterial.strand.width_fade = 0.1
                hairMaterial.strand.shape = 0
                hairMaterial.strand.blend_distance = 0.001
    
    # add texture
                hairTex = bpy.data.textures.new("ShortDarkHair", type='BLEND')
                hairTex.use_preview_alpha = True
                hairTex.use_color_ramp = True
                ramp = hairTex.color_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.004025,0.002732,0.002428,0.38]
                rampElements[1].position = 1
                rampElements[1].color = [0.141,0.122,0.107,0.2]
                rampElement1 = rampElements.new(0.202)
                rampElement1.color = [0.01885,0.0177,0.01827,0.65]
                rampElement2 = rampElements.new(0.499)
                rampElement2.color = [0.114,0.109,0.09822,0.87]
                rampElement3 = rampElements.new(0.828)
                rampElement3.color = [0.141,0.127,0.117,0.64]
    
    # add texture to material
                MTex = hairMaterial.texture_slots.add()
                MTex.texture = hairTex
                MTex.texture_coords = "STRAND"
                MTex.use_map_alpha = True
    
    
    ###############Create Particles##################
    # Add new particle system
    
                NumberOfMaterials = 0
                for i in ob.data.materials:
                    NumberOfMaterials +=1
    
    
                bpy.ops.object.particle_system_add()
    #Particle settings setting it up!
                hairParticles = bpy.context.object.particle_systems.active
                hairParticles.name = "ShortDarkHair"
                hairParticles.settings.type = "HAIR"
                hairParticles.settings.use_advanced_hair = True
                hairParticles.settings.hair_step = 2
                hairParticles.settings.count = 450
                hairParticles.settings.normal_factor = 0.007
                hairParticles.settings.factor_random = 0.001
                hairParticles.settings.use_dynamic_rotation = True
    
                hairParticles.settings.material = NumberOfMaterials
    
                hairParticles.settings.use_strand_primitive = True
                hairParticles.settings.use_hair_bspline = True
                hairParticles.settings.render_step = 3
                hairParticles.settings.length_random = 0.3
                hairParticles.settings.display_step = 3
    # children
                hairParticles.settings.child_type = "INTERPOLATED"
                hairParticles.settings.rendered_child_count = 200
                hairParticles.settings.virtual_parents = 1
                hairParticles.settings.clump_factor = 0.425
                hairParticles.settings.clump_shape = 0.1
                hairParticles.settings.roughness_endpoint = 0.003
                hairParticles.settings.roughness_end_shape = 5
    
    
    
            return {'FINISHED'}
    ####
    ######## FUR LAB ########
    ####
    
    class FurLabPanel(bpy.types.Panel):
        bl_space_type = 'VIEW_3D'
        bl_region_type = 'TOOLS'
        bl_label = "Fur Lab"
        bl_context = "objectmode"
        bl_options = {'DEFAULT_CLOSED'}
        bl_category = "Create"
    
        def draw(self, context):
            active_obj = bpy.context.active_object
            active_scn = bpy.context.scene.name
            layout = self.layout
            col = layout.column(align=True)
    
            WhatToDo = getActionToDo(active_obj)
    
    
            if WhatToDo == "GENERATE":
                col.operator("fur.generate_fur", text="Create Fur")
    
                col.prop(context.scene, "fur_type")
            else:
                col.label(text="Select mesh object")
    
            if active_scn == "TestFurScene":
                col.operator("hair.switch_back", text="Switch back to scene")
            else:
                col.operator("fur.test_scene", text="Create Test Scene")
    
    # TO DO
    """
    class saveSelection(bpy.types.Operator):
        bl_idname = "save.selection"
        bl_label = "Save Selection"
        bl_description = "Save selected particles"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
    
            return {'FINISHED'}
    """
    class testScene5(bpy.types.Operator):
        bl_idname = "fur.switch_back"
        bl_label = "Switch back to scene"
        bl_description = "If you want keep this scene, switch scene in info window"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
            scene = bpy.context.scene
            bpy.data.scenes.remove(scene)
    
            return {'FINISHED'}
    
    
    class testScene6(bpy.types.Operator):
        bl_idname = "fur.test_scene"
        bl_label = "Create test scene"
        bl_description = "You can switch scene in info panel"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
    # add new scene
            bpy.ops.scene.new(type="NEW")
            scene = bpy.context.scene
            scene.name = "TestFurScene"
    # render settings
            render = scene.render
            render.resolution_x = 1920
            render.resolution_y = 1080
            render.resolution_percentage = 50
    # add new world
            world = bpy.data.worlds.new("FurWorld")
            scene.world = world
            world.use_sky_blend = True
            world.use_sky_paper = True
            world.horizon_color = (0.004393,0.02121,0.050)
            world.zenith_color = (0.03335,0.227,0.359)
    
    # add text
            bpy.ops.object.text_add(location=(-0.292,0,-0.152), rotation =(1.571,0,0))
            text = bpy.context.active_object
            text.scale = (0.05,0.05,0.05)
            text.data.body = "Fur Lab"
    
    # add material to text
            textMaterial = bpy.data.materials.new('textMaterial')
            text.data.materials.append(textMaterial)
            textMaterial.use_shadeless = True
    
    # add camera
            bpy.ops.object.camera_add(location = (0,-1,0),rotation = (1.571,0,0))
            cam = bpy.context.active_object.data
            cam.lens = 50
            cam.display_size = 0.1
    
    # add spot lamp
            bpy.ops.object.lamp_add(type="SPOT", location = (-0.7,-0.5,0.3), rotation =(1.223,0,-0.960))
            lamp1 = bpy.context.active_object.data
            lamp1.name = "Key Light"
            lamp1.energy = 1.5
            lamp1.distance = 1.5
            lamp1.shadow_buffer_soft = 5
            lamp1.shadow_buffer_size = 8192
            lamp1.shadow_buffer_clip_end = 1.5
            lamp1.spot_blend = 0.5
    
    # add spot lamp2
            bpy.ops.object.lamp_add(type="SPOT", location = (0.7,-0.6,0.1), rotation =(1.571,0,0.785))
            lamp2 = bpy.context.active_object.data
            lamp2.name = "Fill Light"
            lamp2.color = (0.874,0.874,1)
            lamp2.energy = 0.5
            lamp2.distance = 1.5
            lamp2.shadow_buffer_soft = 5
            lamp2.shadow_buffer_size = 4096
            lamp2.shadow_buffer_clip_end = 1.5
            lamp2.spot_blend = 0.5
    
    # light Rim
            """
            # add spot lamp3
            bpy.ops.object.lamp_add(type="SPOT", location = (0.191,0.714,0.689), rotation =(0.891,0,2.884))
            lamp3 = bpy.context.active_object.data
            lamp3.name = "Rim Light"
            lamp3.color = (0.194,0.477,1)
            lamp3.energy = 3
            lamp3.distance = 1.5
            lamp3.shadow_buffer_soft = 5
            lamp3.shadow_buffer_size = 4096
            lamp3.shadow_buffer_clip_end = 1.5
            lamp3.spot_blend = 0.5
            """
    # add sphere
            bpy.ops.mesh.primitive_uv_sphere_add(size=0.1)
            bpy.ops.object.shade_smooth()
            return {'FINISHED'}
    
    
    class GenerateFur(bpy.types.Operator):
        bl_idname = "fur.generate_fur"
        bl_label = "Generate Fur"
        bl_description = "Create a Fur"
        bl_register = True
        bl_undo = True
    
        def execute(self, context):
    # Make variable that is the current .blend file main data blocks
            blend_data = context.blend_data
            ob = bpy.context.active_object
            scene = context.scene
    
    ######################################################################
    ########################Short Fur########################
            if scene.fur_type == '0':
    
    ###############Create New Material##################
    # add new material
                furMaterial = bpy.data.materials.new('Fur 1')
                ob.data.materials.append(furMaterial)
    
    #Material settings
                furMaterial.preview_render_type = "HAIR"
                furMaterial.diffuse_color = (0.287, 0.216, 0.04667)
                furMaterial.specular_color = (0.604, 0.465, 0.136)
                furMaterial.specular_intensity = 0.3
                furMaterial.ambient = 0
                furMaterial.use_cubic = True
                furMaterial.use_transparency = True
                furMaterial.alpha = 0
                furMaterial.use_transparent_shadows = True
    #strand
                furMaterial.strand.use_blender_units = True
                furMaterial.strand.root_size = 0.00030
                furMaterial.strand.tip_size = 0.00010
                furMaterial.strand.size_min = 0.7
                furMaterial.strand.width_fade = 0.1
                furMaterial.strand.shape = 0.061
                furMaterial.strand.blend_distance = 0.001
    
    
    # add texture
                furTex = bpy.data.textures.new("Fur1Tex", type='BLEND')
                furTex.use_preview_alpha = True
                furTex.use_color_ramp = True
                ramp = furTex.color_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.114,0.05613,0.004025,0.38]
                rampElements[1].position = 1
                rampElements[1].color = [0.267,0.155,0.02687,0]
                rampElement1 = rampElements.new(0.111)
                rampElement1.color = [0.281,0.168,0.03157,0.65]
                rampElement2 = rampElements.new(0.366)
                rampElement2.color = [0.288,0.135,0.006242,0.87]
                rampElement3 = rampElements.new(0.608)
                rampElement3.color = [0.247,0.113,0.006472,0.8]
                rampElement4 = rampElements.new(0.828)
                rampElement4.color = [0.253,0.09919,0.01242,0.64]
    
    # add texture to material
                MTex = furMaterial.texture_slots.add()
                MTex.texture = furTex
                MTex.texture_coords = "STRAND"
                MTex.use_map_alpha = True
    
    
    ###############Create Particles##################
    # Add new particle system
    
                NumberOfMaterials = 0
                for i in ob.data.materials:
                    NumberOfMaterials +=1
    
    
                bpy.ops.object.particle_system_add()
    #Particle settings setting it up!
                furParticles = bpy.context.object.particle_systems.active
                furParticles.name = "Fur1Par"
                furParticles.settings.type = "HAIR"
                furParticles.settings.use_advanced_hair = True
                furParticles.settings.count = 500
                furParticles.settings.normal_factor = 0.05
                furParticles.settings.factor_random = 0.001
                furParticles.settings.use_dynamic_rotation = True
    
                furParticles.settings.material = NumberOfMaterials
    
                furParticles.settings.use_strand_primitive = True
                furParticles.settings.use_hair_bspline = True
                furParticles.settings.render_step = 5
                furParticles.settings.length_random = 0.5
                furParticles.settings.display_step = 5
    # children
                furParticles.settings.child_type = "INTERPOLATED"
                furParticles.settings.child_length = 0.134
                furParticles.settings.create_long_hair_children = True
                furParticles.settings.clump_factor = 0.55
                furParticles.settings.roughness_endpoint = 0.005
                furParticles.settings.roughness_end_shape = 5
                furParticles.settings.roughness_2 = 0.003
                furParticles.settings.roughness_2_size = 0.230
    
    
    ######################################################################
    ########################Dalmation Fur##########################
            if scene.fur_type == '1':
    ###############Create New Material##################
    # add new material
                furMaterial = bpy.data.materials.new('Fur2Mat')
                ob.data.materials.append(furMaterial)
    
    #Material settings
                furMaterial.preview_render_type = "HAIR"
                furMaterial.diffuse_color = (0.300, 0.280, 0.280)
                furMaterial.specular_color = (1.0, 1.0, 1.0)
                furMaterial.specular_intensity = 0.500
                furMaterial.specular_hardness = 50
    
                furMaterial.ambient = 0
                furMaterial.use_cubic = True
                furMaterial.use_transparency = True
                furMaterial.alpha = 0
                furMaterial.use_transparent_shadows = True
    #strand
                furMaterial.strand.use_blender_units = True
                furMaterial.strand.root_size = 0.00030
                furMaterial.strand.tip_size = 0.00010
                furMaterial.strand.size_min = 0.7
                furMaterial.strand.width_fade = 0.1
                furMaterial.strand.shape = 0.061
                furMaterial.strand.blend_distance = 0.001
    
    
    # add texture
                furTex = bpy.data.textures.new("Fur2Tex", type='BLEND')
                furTex.name = "Fur2"
                furTex.use_preview_alpha = True
                furTex.use_color_ramp = True
                ramp = furTex.color_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [1.0,1.0,1.0,1.0]
                rampElements[1].position = 1
                rampElements[1].color = [1.0,1.0,1.0,0.0]
                rampElement1 = rampElements.new(0.116)
                rampElement1.color = [1.0,1.0,1.0,1.0]
    
    
    # add texture to material
                MTex = furMaterial.texture_slots.add()
                MTex.texture = furTex
                MTex.texture_coords = "STRAND"
                MTex.use_map_alpha = True
    
    # add texture 2
                furTex = bpy.data.textures.new("Fur2bTex", type='CLOUDS')
                furTex.name = "Fur2b"
                furTex.use_preview_alpha = False
                furTex.cloud_type = "COLOR"
                furTex.noise_type = "HARD_NOISE"
                furTex.noise_scale = 0.06410
                furTex.use_color_ramp = True
                ramp = furTex.color_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [1.0,1.0,1.0, 1.0]
                rampElements[1].position = 1
                rampElements[1].color = [0.0,0.0,0.0,1.0]
                rampElement1 = rampElements.new(0.317)
                rampElement1.color = [1.0,1.0,1.0,1.0]
                rampElement2 = rampElements.new(0.347)
                rampElement2.color = [0.0,0.0,0.0,1.0]
    
    # add texture 2 to material
                MTex = furMaterial.texture_slots.add()
                MTex.texture = furTex
                MTex.texture_coords = "GLOBAL"
                MTex.use_map_alpha = True
    
    ###############Create Particles##################
    # Add new particle system
    
                NumberOfMaterials = 0
                for i in ob.data.materials:
                    NumberOfMaterials +=1
    
    
                bpy.ops.object.particle_system_add()
    #Particle settings setting it up!
                furParticles = bpy.context.object.particle_systems.active
                furParticles.name = "Fur2Par"
                furParticles.settings.type = "HAIR"
                furParticles.settings.use_advanced_hair = True
                furParticles.settings.count = 500
                furParticles.settings.normal_factor = 0.05
                furParticles.settings.factor_random = 0.001
                furParticles.settings.use_dynamic_rotation = True
    
                furParticles.settings.material = NumberOfMaterials
    
                furParticles.settings.use_strand_primitive = True
                furParticles.settings.use_hair_bspline = True
                furParticles.settings.render_step = 5
                furParticles.settings.length_random = 0.5
                furParticles.settings.display_step = 5
    # children
                furParticles.settings.child_type = "INTERPOLATED"
                furParticles.settings.child_length = 0.07227
                furParticles.settings.create_long_hair_children = True
                furParticles.settings.clump_factor = 0.55
                furParticles.settings.roughness_endpoint = 0.005
                furParticles.settings.roughness_end_shape = 5
                furParticles.settings.roughness_2 = 0.003
                furParticles.settings.roughness_2_size = 0.230
    
    ######################################################################
    ########################Spotted_fur##########################
            elif scene.fur_type == '2':
    
    ###############Create New Material##################
    # add new material
                furMaterial = bpy.data.materials.new('Fur3Mat')
                ob.data.materials.append(furMaterial)
    
    #Material settings
                furMaterial.preview_render_type = "HAIR"
                furMaterial.diffuse_color = (0.300, 0.280, 0.280)
                furMaterial.specular_color = (1.0, 1.0, 1.0)
                furMaterial.specular_intensity = 0.500
                furMaterial.specular_hardness = 50
                furMaterial.use_specular_ramp = True
    
                ramp = furMaterial.specular_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.0356,0.0152,0.009134,0]
                rampElements[1].position = 1
                rampElements[1].color = [0.352,0.250,0.231,1]
                rampElement1 = rampElements.new(0.255)
                rampElement1.color = [0.214,0.08244,0.0578,0.31]
                rampElement2 = rampElements.new(0.594)
                rampElement2.color = [0.296,0.143,0.0861,0.72]
    
                furMaterial.ambient = 0
                furMaterial.use_cubic = True
                furMaterial.use_transparency = True
                furMaterial.alpha = 0
                furMaterial.use_transparent_shadows = True
    #strand
                furMaterial.strand.use_blender_units = True
                furMaterial.strand.root_size = 0.00030
                furMaterial.strand.tip_size = 0.00015
                furMaterial.strand.size_min = 0.450
                furMaterial.strand.width_fade = 0.1
                furMaterial.strand.shape = 0.02
                furMaterial.strand.blend_distance = 0.001
    
    
    # add texture
                furTex = bpy.data.textures.new("Fur3Tex", type='BLEND')
                furTex.name = "Fur3"
                furTex.use_preview_alpha = True
                furTex.use_color_ramp = True
                ramp = furTex.color_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.009721,0.006049,0.003677,0.38]
                rampElements[1].position = 1
                rampElements[1].color = [0.04231,0.02029,0.01444,0.16]
                rampElement1 = rampElements.new(0.111)
                rampElement1.color = [0.01467,0.005307,0.00316,0.65]
                rampElement2 = rampElements.new(0.366)
                rampElement2.color = [0.0272,0.01364,0.01013,0.87]
                rampElement3 = rampElements.new(0.608)
                rampElement3.color = [0.04445,0.02294,0.01729,0.8]
                rampElement4 = rampElements.new(0.828)
                rampElement4.color = [0.04092,0.0185,0.01161,0.64]
    
    # add texture to material
                MTex = furMaterial.texture_slots.add()
                MTex.texture = furTex
                MTex.texture_coords = "STRAND"
                MTex.use_map_alpha = True
    
    # add texture 2
                furTex = bpy.data.textures.new("Fur3bTex", type='CLOUDS')
                furTex.name = "Fur3b"
                furTex.use_preview_alpha = True
                furTex.cloud_type = "COLOR"
                furTex.use_color_ramp = True
                ramp = furTex.color_ramp
                rampElements = ramp.elements
                rampElements[0].position = 0
                rampElements[0].color = [0.009721,0.006049,0.003677,0.38]
                rampElements[1].position = 1
                rampElements[1].color = [0.04231,0.02029,0.01444,0.16]
                rampElement1 = rampElements.new(0.111)
                rampElement1.color = [0.01467,0.005307,0.00316,0.65]
                rampElement2 = rampElements.new(0.366)
                rampElement2.color = [0.0272,0.01364,0.01013,0.87]
                rampElement3 = rampElements.new(0.608)
                rampElement3.color = [0.04445,0.02294,0.01729,0.8]
                rampElement4 = rampElements.new(0.828)
                rampElement4.color = [0.04092,0.0185,0.01161,0.64]
    
    # add texture 2 to material
                MTex = furMaterial.texture_slots.add()
                MTex.texture = furTex
                MTex.texture_coords = "GLOBAL"
                MTex.use_map_alpha = False
    
    ###############Create Particles##################
    # Add new particle system
    
                NumberOfMaterials = 0
                for i in ob.data.materials:
                    NumberOfMaterials +=1
    
    
                bpy.ops.object.particle_system_add()
    #Particle settings setting it up!
                furParticles = bpy.context.object.particle_systems.active
                furParticles.name = "Fur3Par"
                furParticles.settings.type = "HAIR"
                furParticles.settings.use_advanced_hair = True
                furParticles.settings.count = 500
                furParticles.settings.normal_factor = 0.05
                furParticles.settings.factor_random = 0.001
                furParticles.settings.use_dynamic_rotation = True
    
                furParticles.settings.material = NumberOfMaterials
    
                furParticles.settings.use_strand_primitive = True
                furParticles.settings.use_hair_bspline = True
                furParticles.settings.render_step = 5
                furParticles.settings.length_random = 0.5
                furParticles.settings.display_step = 5
    # children
                furParticles.settings.child_type = "INTERPOLATED"
                furParticles.settings.child_length = 0.134
                furParticles.settings.create_long_hair_children = True
                furParticles.settings.clump_factor = 0.55
                furParticles.settings.roughness_endpoint = 0.005
                furParticles.settings.roughness_end_shape = 5
                furParticles.settings.roughness_2 = 0.003
                furParticles.settings.roughness_2_size = 0.230
    
            return {'FINISHED'}
    def register():
        bpy.utils.register_module(__name__)
        bpy.types.Scene.grass_type = EnumProperty(
            name="Type",
            description="Select the type of grass",
            items=[("0","Green Grass","Generate particle grass"),
                   ("1","Grassy Field","Generate particle grass"),
                   ("2","Clumpy Grass","Generate particle grass"),
    
                  ],
            default='0')
        bpy.types.Scene.hair_type = EnumProperty(
            name="Type",
            description="Select the type of hair",
            items=[("0","Long Red Straight Hair","Generate particle Hair"),
                   ("1","Long Brown Curl Hair","Generate particle Hair"),
                   ("2","Short Dark Hair","Generate particle Hair"),
    
                  ],
            default='0')
        bpy.types.Scene.fur_type = EnumProperty(
            name="Type",
            description="Select the type of fur",
            items=[("0","Short Fur","Generate particle Fur"),
                   ("1","Dalmation","Generate particle Fur"),
                   ("2","Fur3","Generate particle Fur"),
    
                  ],
            default='0')
    
    def unregister():
        bpy.utils.unregister_module(__name__)
        del bpy.types.Scene.hair_type
    
    if __name__ == "__main__":
        register()