(1) 2 »


Addon Shape Keys Driver désaxé
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351
Bonsoir tout l'monde

j'ai une question concernant un addon pour les Drivers

sur cette --> vidéo <-- que j'ai fait l'addon fonctionne parfaitement sur l'axe Z ...mais on à la flèche sur l'axe Y ( qui est inutile ... )

j'ai donc tenté de modifier le script que j'ai trouvé mais ça coince ..
une idée SVP ?



import bpy
from math import pi

class ShapekeySliderCreator(bpy.types.Operator):
    """Shapekey Slider Driver"""
    bl_idname = "object.ssd"
    bl_label = "Shapekey Slider Driver"
    bl_options = {'REGISTER', 'UNDO'}
    
    mesh = []
    amt = bpy.props.PointerProperty()
    rig = bpy.props.PointerProperty()
    slider = bpy.props.PointerProperty()

    def createArmature(self):
        
        # Create armature and object
        arm = bpy.data.armatures.new("GUIcontrol_Armature")
        self.amt = arm
        self.rig = bpy.data.objects.new("GUIcontrol", self.amt)
        self.rig.location = (0,0,0)
        self.rig.show_x_ray = True
        self.amt.show_names = False
        # Link object to scene
        scn = bpy.context.scene
        scn.objects.link(self.rig)

        scn.update()
     
        # Create bones
    #next two lines by PKHG SVN 36504 W32
        bpy.context.scene.objects.active = self.rig
        bpy.ops.object.editmode_toggle()
    #    bpy.ops.object.mode_set(mode='EDIT')
    #original does not work??!!    bpy.ops.object.mode_set(mode='EDIT')
        base = self.amt.edit_bones.new('Base')
        base.head = (0,0,0)
        base.tail = (0,0,0.4)
        base.show_wire = True
     
        self.slider = self.amt.edit_bones.new('Slider')
        self.slider.head = (0,0,0.4)
        self.slider.tail = (0,0,0.8)
        self.slider.parent = base
        self.slider.use_connect = False
        self.slider.show_wire = True
        
        bpy.ops.object.mode_set(mode='OBJECT')
        
        bpy.ops.object.mode_set(mode='POSE')
        
        slidered = bpy.context.active_object.pose.bones["Slider"]
        slidered.lock_location[0] = True
        slidered.lock_location[1] = True                       #  Version Original <---   slidered.lock_location[2]       
        slidered.custom_shape=bpy.data.objects["S_Slider"]
        
        holder = bpy.context.active_object.pose.bones["Base"]
        holder.custom_shape=bpy.data.objects["S_Holder"]
        
        pMid = self.rig.pose.bones['Slider']
        cns1 = pMid.constraints.new('LIMIT_LOCATION')
        cns1.name = 'LocLimit'
        cns1.owner_space = 'LOCAL'
        cns1.use_min_z = True                                  #  V-O <---    cns1.use_min_y = 
        cns1.min_z = 0.0                                       #  V-O <---    cns1.min_y =
        cns1.use_max_z = True                                  #  V-O <---    cns1.use_max_y =   
        cns1.max_z = 0.7                                       #  V-O <---    cns1.max_y =    
        cns1.use_transform_limit = True
        
        bpy.ops.object.mode_set(mode='OBJECT')
        
        return;
        
    def createText(self):

        loc = (0,0,0)
        #layers = 20*[False]
        #layers[18] = True
        bpy.ops.object.text_add(
        location=loc,
        rotation=(pi/2,0,0),
        #layers=layers
        )
        txt = bpy.context.object
        txt.name = "Text"
        txt.show_name = False
        tcu = txt.data
        tcu.name = "Text"
     
        # TextCurve attributes
        tcu.body = "Text"
        tcu.font = bpy.data.fonts[0]
        #tcu.offset_x = -9
        #tcu.offset_y = -0.25
        #tcu.shear = 0.5
        tcu.size = 0.2
        #tcu.space_character = 2
        #tcu.space_word = 4    
        txt.draw_type = 'WIRE'
        
        #arm = bpy.data.objects["GUIcontrol"]
        #txt = bpy.data.objects["Text"]
        txt.parent = self.rig #arm
        
        txt.location = self.rig.location #arm.location
        txt.location.x = txt.location.x - 0.2
        txt.location.z = txt.location.z + 0.05
        
        return;
           
    def createShapes(self):
        
        layers = 20*[False]
        layers[19] = True
        scn = bpy.context.scene
        scn.layers[19] = True
        
        bpy.ops.mesh.primitive_plane_add(
        location=(0,0,0),
        layers=layers
        )
        ob1 = bpy.context.object
        ob1.name = "S_Slider"
        pl1 = ob1.data
        pl1.name = "S_Slider"

        bpy.ops.mesh.primitive_plane_add(
        location=(0,0,0),
        layers=layers
        )
        ob2 = bpy.context.object
        ob2.name = "S_Holder"
        pl2 = ob2.data
        pl2.name = "S_Holder"
        
        #resize Holder shape
        bpy.context.scene.objects.active = ob2
        bpy.ops.object.mode_set(mode = 'EDIT')
        bpy.ops.transform.resize(value=(1.5,5.0,1))
        bpy.ops.transform.resize(value=(0.25,0.25,1))
        bpy.ops.transform.translate(value=(0,1.87,0))
        bpy.ops.object.mode_set(mode = 'OBJECT')
        
        #resize Slider shape
        bpy.context.scene.objects.active = ob1
        bpy.ops.object.mode_set(mode = 'EDIT')
        bpy.ops.transform.resize(value=(0.25,0.25,1))
        bpy.ops.object.mode_set(mode = 'OBJECT')
        
        scn.layers[19] = False
        
        bpy.context.scene.update()
        
        return;
    
    def createDriver(self):
        
        bpy.context.scene.objects.active = self.mesh[0]
        
        fc = bpy.context.active_object.active_shape_key.driver_add('value', -1)
        fc.driver.type = 'AVERAGE'
        dvar = fc.driver.variables.new()
        dvar.type = 'TRANSFORMS'
        dvar.targets[0].id = self.rig
        dvar.targets[0].bone_target = "Slider"
        dvar.targets[0].transform_type = 'LOC_Z'               #  V-O <---    = 'LOC_Y'
        dvar.targets[0].transform_space = 'LOCAL_SPACE'
        
        fmod = fc.modifiers[0]
        fmod.coefficients = (0.0,1.428)
        
        return;
        
    def execute(self, context):
        
        self.mesh = bpy.context.selected_objects
        print(self.mesh)
        self.createShapes()
        self.createArmature()
        self.createText()
        if self.mesh:
            if self.mesh[0].type == 'MESH':
                bpy.context.scene.objects.active = self.mesh[0]
                if bpy.context.active_object.active_shape_key:
                    self.createDriver()
        for n in bpy.data.objects:
            n.select = False
        bpy.context.scene.objects.active = self.rig
        bpy.data.objects[self.rig.name].select = True
            
        return {'FINISHED'}
  
def add_object_button(self, context):  
    self.layout.operator(  
        ShapekeySliderCreator.bl_idname,  
        text=ShapekeySliderCreator.__doc__,  
        icon='PLUGIN') 

def register():  
    bpy.utils.register_class(ShapekeySliderCreator) 
    bpy.types.INFO_MT_armature_add.append(add_object_button)
    
def unregister():
    bpy.utils.unregister_class(ShapekeySliderCreator) 
    bpy.types.INFO_MT_armature_add.remove(add_object_button)
    
if __name__ == "__main__":
    try:
        unregister()
    except:
        pass
    register() 


Contribution le : 02/02/2017 19:04
Créer un fichier PDF de la contribution Imprimer


Re: Addon Shape Keys Driver désaxé
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351


Pour être plus précis je cherche " simplement " à savoir comment modifier ce script pour avoir la flèche sur le bon axe ("Z") ..

( la création de driver sans l'addon fonctionne très bien avec les axes ..c'est juste pour gagner un peu de temps )

Contribution le : 03/02/2017 18:55
Créer un fichier PDF de la contribution Imprimer


Re: Addon Shape Keys Driver désaxé
OverdOzed
Inscrit:
21/08/2013 19:12
De CH [+]
Post(s): 1558
Dans la version du script que tu as postée (elle ne semble pas complètement correspondre à la vidéo), il faut modifier comme suit:

Ligne 66:
        cns1.owner_space = 'LOCAL_WITH_PARENT'


Ligne 166:
        dvar.targets[0].transform_type = 'LOC_Y'



A part cela, il te faut également ôter les lignes 11-13 (ou au minimum replacer par des valeurs None). Les PointerProperties ne servent ici à rien, et au contraire elles rendent une erreur. Et nul besoin non plus de déclarer les variables à l'avance.

Contribution le : 03/02/2017 23:58
_________________
BAddons, La Collection d'Addons de Matpi: https://github.com/qwenger/BAddons
Développeur Blender quand j'en ai le temps...

Créer un fichier PDF de la contribution Imprimer


Re: Addon Shape Keys Driver désaxé
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351
MERCI MATPI

( un addon de plus à ajouter dans ta collection ! )

Contribution le : 04/02/2017 00:34
Créer un fichier PDF de la contribution Imprimer


Re: Addon Shape Keys Driver désaxé
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351
j'ai un doute ...j'suis pas sur que le numéro des lignes correspond

..si j'ai bien compris ça nous donne

_pour la ligne 66
        #...
        cns1.name = 'LocLimit'                  # ( 65 )
        cns1.owner_space = 'LOCAL_WITH_PARENT'  # ( 66 )
        #...


_pour la ligne 166
        #...
        dvar = fc.driver.variables.new()          # ( 165 )
        dvar.targets[0].transform_type = 'LOC_Y'  # ( 166 )
        #...


j'ai juste ..?


pour Y j'avais modifier le code avec :
slidered.lock_location[1] = True 

[0] -> X
[1] -> Y
[2] -> Z


Citation :
A part cela, il te faut également ôter les lignes 11-13 (ou au minimum replacer par des valeurs None). Les PointerProperties ne servent ici à rien, et au contraire elles rendent une erreur. Et nul besoin non plus de déclarer les variables à l'avance.



je dois supprimer ces lignes..?
    bl_options = {'REGISTER', 'UNDO'}    # "ligne 11"
                                         #
    mesh = []                            # "ligne 13"



ou celci

    amt = bpy.props.PointerProperty()     #
                                          #
    slider = bpy.props.PointerProperty()  #

Contribution le : 04/02/2017 01:40
Créer un fichier PDF de la contribution Imprimer


Re: Addon Shape Keys Driver désaxé
OverdOzed
Inscrit:
21/08/2013 19:12
De CH [+]
Post(s): 1558
Tu dois remplacer

Citation :

pMid = self.rig.pose.bones['Slider']
cns1 = pMid.constraints.new('LIMIT_LOCATION')
cns1.name = 'LocLimit'
cns1.owner_space = 'LOCAL'


par

Citation :

pMid = self.rig.pose.bones['Slider']
cns1 = pMid.constraints.new('LIMIT_LOCATION')
cns1.name = 'LocLimit'
cns1.owner_space = 'LOCAL_WITH_PARENT'


et

Citation :

dvar.targets[0].id = self.rig
dvar.targets[0].bone_target = "Slider"
dvar.targets[0].transform_type = 'LOC_Z'


par

Citation :

dvar.targets[0].id = self.rig
dvar.targets[0].bone_target = "Slider"
dvar.targets[0].transform_type = 'LOC_Y'



Et ensuite tu peux complètement supprimer les trois lignes

Citation :

amt = bpy.props.PointerProperty()
rig = bpy.props.PointerProperty()
slider = bpy.props.PointerProperty()

Contribution le : 04/02/2017 02:39
_________________
BAddons, La Collection d'Addons de Matpi: https://github.com/qwenger/BAddons
Développeur Blender quand j'en ai le temps...

Créer un fichier PDF de la contribution Imprimer


Re: Addon Shape Keys Driver désaxé
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351
Merci infiniment Matpi
Encore un problème résolu grâce à toi

Contribution le : 04/02/2017 04:14
Créer un fichier PDF de la contribution Imprimer


Re: Addon Shape Keys Driver désaxé
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351
..oups j'ai parlé un peu trop vite
( après test le sujet reste non résolu mais bien modifié )


j'ai fais plusieurs modifications suplémentaire :

_ verrouillage de la rotation pour le slider ( bien que pas indispensable )

_ constraint ( max ) pour le slider jusqu'à 1 ( avant c'était à 0.7 )

_ redimensionnement , localisation et rotation dans le dernier layer ( s_Holder / s_Slider )


mais le problème reste le même ..le slider fonctionne uniquement sur l'axe Y alors que celui-ci est verrouillé

la --> vidéo <-- et la version 1.2 :

bl_info = {  
    "name": "Shapekey Slider Driver",  
    "author": "Fernando Macias-Jimenez + Black Panther + Matpi",  
    "version": (1, 2),  
    "blender": (2, 76, 0),  
    "location": "View3D > Add > Armature",  
    "description": "Creates a 3D-View UI slider to control a shape key.",  
    "warning": "",  
    "wiki_url": "",  
    "tracker_url": "",  
    "category": "Rigging"}

import bpy
from math import pi

class ShapekeySliderCreator(bpy.types.Operator):
    """Shapekey Slider Driver"""
    bl_idname = "object.ssd"
    bl_label = "Shapekey Slider Driver"
    bl_options = {'REGISTER', 'UNDO'}
    
    mesh = []

    def createArmature(self):
        
        # Create armature and object
        arm = bpy.data.armatures.new("GUIcontrol_Armature")
        self.amt = arm
        self.rig = bpy.data.objects.new("GUIcontrol", self.amt)
        self.rig.location = (0,0,0)
        self.rig.show_x_ray = True
        self.amt.show_names = False
        # Link object to scene
        scn = bpy.context.scene
        scn.objects.link(self.rig)

        scn.update()
     
        # Create bones
    #next two lines by PKHG SVN 36504 W32
        bpy.context.scene.objects.active = self.rig
        bpy.ops.object.editmode_toggle()
    #    bpy.ops.object.mode_set(mode='EDIT')
    #original does not work??!!    bpy.ops.object.mode_set(mode='EDIT')
        base = self.amt.edit_bones.new('Base')
        base.head = (0,0,0)
        base.tail = (0,0,0.4)
        base.show_wire = True
     
        self.slider = self.amt.edit_bones.new('Slider')
        self.slider.head = (0,0,0.4)
        self.slider.tail = (0,0,0.8)
        self.slider.parent = base
        self.slider.use_connect = False
        self.slider.show_wire = True
        
        bpy.ops.object.mode_set(mode='OBJECT')
        
        bpy.ops.object.mode_set(mode='POSE')
        
        slidered = bpy.context.active_object.pose.bones["Slider"]
        slidered.lock_location[0] = True
        slidered.lock_location[1] = True
  
        slidered.lock_rotation[0] = True                 ## <- last add
        slidered.lock_rotation[1] = True                 ## <- last add
        slidered.lock_rotation[2] = True                 ## <- last add

        slidered.custom_shape=bpy.data.objects["S_Slider"]
        
        holder = bpy.context.active_object.pose.bones["Base"]
        holder.custom_shape=bpy.data.objects["S_Holder"]
        
        pMid = self.rig.pose.bones['Slider']
        cns1 = pMid.constraints.new('LIMIT_LOCATION')
        cns1.name = 'LocLimit'
        cns1.owner_space = 'LOCAL_WITH_PARENT'           
        cns1.use_min_z = True
        cns1.min_z = 0.0
        cns1.use_max_z = True  
        cns1.max_z = 1                                 ## <- last change
        cns1.use_transform_limit = True
        
        bpy.ops.object.mode_set(mode='OBJECT')
        
        return;
        
    def createText(self):

        loc = (0,0,0)
        #layers = 20*[False]
        #layers[18] = True
        bpy.ops.object.text_add(
        location=loc,
        rotation=(pi/2,0,0),
        #layers=layers
        )
        txt = bpy.context.object
        txt.name = "Text"
        txt.show_name = False
        tcu = txt.data
        tcu.name = "Text"
     
        # TextCurve attributes
        tcu.body = "Text"
        tcu.font = bpy.data.fonts[0]
        #tcu.offset_x = -9
        #tcu.offset_y = -0.25
        #tcu.shear = 0.5
        tcu.size = 0.2
        #tcu.space_character = 2
        #tcu.space_word = 4    
        txt.draw_type = 'WIRE'
        
        #arm = bpy.data.objects["GUIcontrol"]
        #txt = bpy.data.objects["Text"]
        txt.parent = self.rig #arm
        
        txt.location = self.rig.location #arm.location
        txt.location.x = txt.location.x - 0.2
        txt.location.z = txt.location.z + 0.05
        
        return;
           
    def createShapes(self):
        
        layers = 20*[False]
        layers[19] = True
        scn = bpy.context.scene
        scn.layers[19] = True
        
        bpy.ops.mesh.primitive_plane_add(
        location=(0,0,0),
        rotation=(pi/2,0,0),                         ## <- last add
        layers=layers
        )
        ob1 = bpy.context.object
        ob1.name = "S_Slider"
        pl1 = ob1.data
        pl1.name = "S_Slider"

        bpy.ops.mesh.primitive_plane_add(
        location=(0,0,0),
        rotation=(pi/2,0,0),                         ## <- last add
        layers=layers
        )
        ob2 = bpy.context.object
        ob2.name = "S_Holder"
        pl2 = ob2.data
        pl2.name = "S_Holder"
        
        #resize Holder shape
        bpy.context.scene.objects.active = ob2
        bpy.ops.object.mode_set(mode = 'EDIT')

        bpy.ops.transform.resize(value=(1.5,5.0,1))     
        bpy.ops.transform.resize(value=(0.25,0.25,1.65))     ## <- last change
        bpy.ops.transform.translate(value=(0,0,2.25))        ## <- last change

        bpy.ops.object.mode_set(mode = 'OBJECT')
        
        #resize Slider shape
        bpy.context.scene.objects.active = ob1
        bpy.ops.object.mode_set(mode = 'EDIT')
        bpy.ops.transform.resize(value=(0.25,1,0.25))        ## <- last change
        bpy.ops.object.mode_set(mode = 'OBJECT')
        
        scn.layers[19] = False
        
        bpy.context.scene.update()
        
        return;
    
    def createDriver(self):
        
        bpy.context.scene.objects.active = self.mesh[0]
        
        fc = bpy.context.active_object.active_shape_key.driver_add('value', -1)
        fc.driver.type = 'AVERAGE'
        dvar = fc.driver.variables.new()
        dvar.type = 'TRANSFORMS'
        dvar.targets[0].id = self.rig
        dvar.targets[0].bone_target = "Slider"
        dvar.targets[0].transform_type = 'LOC_Y'
        dvar.targets[0].transform_space = 'LOCAL_SPACE'
        
        fmod = fc.modifiers[0]
        fmod.coefficients = (0.0,1.428)
        
        return;
        
    def execute(self, context):
        
        self.mesh = bpy.context.selected_objects
        print(self.mesh)
        self.createShapes()
        self.createArmature()
        self.createText()
        if self.mesh:
            if self.mesh[0].type == 'MESH':
                bpy.context.scene.objects.active = self.mesh[0]
                if bpy.context.active_object.active_shape_key:
                    self.createDriver()
        for n in bpy.data.objects:
            n.select = False
        bpy.context.scene.objects.active = self.rig
        bpy.data.objects[self.rig.name].select = True
            
        return {'FINISHED'}
  
def add_object_button(self, context):  
    self.layout.operator(  
        ShapekeySliderCreator.bl_idname,  
        text=ShapekeySliderCreator.__doc__,  
        icon='PLUGIN') 

def register():  
    bpy.utils.register_class(ShapekeySliderCreator) 
    bpy.types.INFO_MT_armature_add.append(add_object_button)
    
def unregister():
    bpy.utils.unregister_class(ShapekeySliderCreator) 
    bpy.types.INFO_MT_armature_add.remove(add_object_button)
    
if __name__ == "__main__":
    try:
        unregister()
    except:
        pass
    register()

Contribution le : 05/02/2017 18:43
Créer un fichier PDF de la contribution Imprimer


Re: Addon Shape Keys Driver désaxé
OverdOzed
Inscrit:
21/08/2013 19:12
De CH [+]
Post(s): 1558
Ah tu as raison, comme je faisais bouger le slider sans spécifier d'axe, et comme la modif le faisait bien bouger verticalement, je ne me suis pas rendu compte que c'est l'effet de l'axe Y...

J'essaie de regarder ça demain.

Contribution le : 05/02/2017 22:36
_________________
BAddons, La Collection d'Addons de Matpi: https://github.com/qwenger/BAddons
Développeur Blender quand j'en ai le temps...

Créer un fichier PDF de la contribution Imprimer


Re: Addon Shape Keys Driver désaxé
OverdOzed
Inscrit:
21/08/2013 19:12
De CH [+]
Post(s): 1558
[double post, une fois n'est pas coutume...]

Voilà, j'ai fait diverses petites modifs (indiquées par des "#####"), et cette fois ça devrait fonctionner.

Le point principal a été de mettre le bone Slider le long de l'axe Y. C'est contre-intuitif, mais nécessaire pour que les axes locaux et globaux soient alignés (c'était le problème jusqu'à maintenant, l'axe Y global correspondait au Z local).

Merci pour les crédits.

bl_info = {  
    "name": "Shapekey Slider Driver",  
    "author": "Fernando Macias-Jimenez + Black Panther + Matpi",  
    "version": (1, 2),  
    "blender": (2, 76, 0),  
    "location": "View3D > Add > Armature",  
    "description": "Creates a 3D-View UI slider to control a shape key.",  
    "warning": "",  
    "wiki_url": "",  
    "tracker_url": "",  
    "category": "Rigging"}

import bpy
from math import pi

class ShapekeySliderCreator(bpy.types.Operator):
    """Shapekey Slider Driver"""
    bl_idname = "object.ssd"
    bl_label = "Shapekey Slider Driver"
    bl_options = {'REGISTER', 'UNDO'}
    
    mesh = []

    def createArmature(self):
        
        # Create armature and object
        arm = bpy.data.armatures.new("GUIcontrol_Armature")
        self.amt = arm
        self.rig = bpy.data.objects.new("GUIcontrol", self.amt)
        self.rig.location = (0,0,0)
        self.rig.show_x_ray = True
        self.amt.show_names = False
        # Link object to scene
        scn = bpy.context.scene
        scn.objects.link(self.rig)

        scn.update()
     
        # Create bones
    #next two lines by PKHG SVN 36504 W32
        bpy.context.scene.objects.active = self.rig
        bpy.ops.object.editmode_toggle()
    #    bpy.ops.object.mode_set(mode='EDIT')
    #original does not work??!!    bpy.ops.object.mode_set(mode='EDIT')
        base = self.amt.edit_bones.new('Base')
        base.head = (0,0,0)
        base.tail = (0,0,0.4)
        base.show_wire = True
     
        self.slider = self.amt.edit_bones.new('Slider')
        self.slider.head = (0,0,0.4)
        self.slider.tail = (0,0.4,0.4) #####
        self.slider.parent = base
        self.slider.use_connect = False
        self.slider.show_wire = True
        
        bpy.ops.object.mode_set(mode='OBJECT')
        
        bpy.ops.object.mode_set(mode='POSE')
        
        slidered = bpy.context.active_object.pose.bones["Slider"]
        slidered.lock_location[0] = True
        slidered.lock_location[1] = True
  
        slidered.lock_rotation[0] = True                 ## <- last add
        slidered.lock_rotation[1] = True                 ## <- last add
        slidered.lock_rotation[2] = True                 ## <- last add

        slidered.custom_shape=bpy.data.objects["S_Slider"]
        slidered.custom_shape_transform = slidered #####
        
        holder = bpy.context.active_object.pose.bones["Base"]
        holder.custom_shape=bpy.data.objects["S_Holder"]
        
        pMid = self.rig.pose.bones['Slider']
        cns1 = pMid.constraints.new('LIMIT_LOCATION')
        cns1.name = 'LocLimit'
        cns1.owner_space = 'LOCAL_WITH_PARENT'           
        cns1.use_min_z = True
        cns1.min_z = 0.0
        cns1.use_max_z = True  
        cns1.max_z = 1                                 ## <- last change
        cns1.use_transform_limit = True
        
        bpy.ops.object.mode_set(mode='OBJECT')
        
        return;
        
    def createText(self):

        loc = (0,0,0)
        #layers = 20*[False]
        #layers[18] = True
        bpy.ops.object.text_add(
        location=loc,
        rotation=(pi/2,0,0),
        #layers=layers
        )
        txt = bpy.context.object
        txt.name = "Text"
        txt.show_name = False
        tcu = txt.data
        tcu.name = "Text"
     
        # TextCurve attributes
        tcu.body = "Text"
        tcu.font = bpy.data.fonts[0]
        #tcu.offset_x = -9
        #tcu.offset_y = -0.25
        #tcu.shear = 0.5
        tcu.size = 0.2
        #tcu.space_character = 2
        #tcu.space_word = 4    
        txt.draw_type = 'WIRE'
        
        #arm = bpy.data.objects["GUIcontrol"]
        #txt = bpy.data.objects["Text"]
        txt.parent = self.rig #arm
        
        txt.location = self.rig.location #arm.location
        txt.location.x = txt.location.x - 0.2
        txt.location.z = txt.location.z + 0.05
        
        return;
           
    def createShapes(self):
        
        layers = 20*[False]
        layers[19] = True
        scn = bpy.context.scene
        scn.layers[19] = True
        
        bpy.ops.mesh.primitive_plane_add(
        location=(0,0,0),
        rotation=(pi/2,0,0),
        layers=layers
        )
        bpy.ops.object.transform_apply(rotation=True) #####
        ob1 = bpy.context.object
        ##### yup, has to set them twice s.t. they get the real name
        ##### and not a .00... extension...
        ob1.name = "S_Slider"
        ob1.name = "S_Slider"
        pl1 = ob1.data
        pl1.name = "S_Slider"
        pl1.name = "S_Slider"

        #####
        bpy.ops.mesh.primitive_plane_add(
        location=(0,0,0),
        layers=layers
        )
        ob2 = bpy.context.object
        ob2.name = "S_Holder"
        ob2.name = "S_Holder"
        pl2 = ob2.data
        pl2.name = "S_Holder"
        pl2.name = "S_Holder"
        
        #resize Holder shape
        bpy.context.scene.objects.active = ob2
        bpy.ops.object.mode_set(mode = 'EDIT')

        #####
        bpy.ops.transform.resize(value=(1.5,1,5.0))     
        bpy.ops.transform.resize(value=(0.25,1.65,0.25))     ## <- last change
        bpy.ops.transform.translate(value=(0,2.25,0))        ## <- last change

        bpy.ops.object.mode_set(mode = 'OBJECT')
        
        #resize Slider shape
        bpy.context.scene.objects.active = ob1
        bpy.ops.object.mode_set(mode = 'EDIT')
        bpy.ops.transform.resize(value=(0.25,1,0.25))        ## <- last change
        bpy.ops.object.mode_set(mode = 'OBJECT')
        
        scn.layers[19] = False
        
        bpy.context.scene.update()
        
        return;
    
    def createDriver(self):
        
        bpy.context.scene.objects.active = self.mesh[0]
        
        fc = bpy.context.active_object.active_shape_key.driver_add('value', -1)
        fc.driver.type = 'AVERAGE'
        dvar = fc.driver.variables.new()
        dvar.type = 'TRANSFORMS'
        dvar.targets[0].id = self.rig
        dvar.targets[0].bone_target = "Slider"
        dvar.targets[0].transform_type = 'LOC_Z' #####
        dvar.targets[0].transform_space = 'LOCAL_SPACE'
        
        fmod = fc.modifiers[0]
        fmod.coefficients = (0.0,1.0) #####
        
        return;
        
    def execute(self, context):
        
        self.mesh = bpy.context.selected_objects
        print(self.mesh)
        self.createShapes()
        self.createArmature()
        self.createText()
        if self.mesh:
            if self.mesh[0].type == 'MESH':
                bpy.context.scene.objects.active = self.mesh[0]
                if bpy.context.active_object.active_shape_key:
                    self.createDriver()
        for n in bpy.data.objects:
            n.select = False
        bpy.context.scene.objects.active = self.rig
        bpy.data.objects[self.rig.name].select = True
            
        return {'FINISHED'}
  
def add_object_button(self, context):  
    self.layout.operator(  
        ShapekeySliderCreator.bl_idname,  
        text=ShapekeySliderCreator.__doc__,  
        icon='PLUGIN') 

def register():  
    bpy.utils.register_class(ShapekeySliderCreator) 
    bpy.types.INFO_MT_armature_add.append(add_object_button)
    
def unregister():
    bpy.utils.unregister_class(ShapekeySliderCreator) 
    bpy.types.INFO_MT_armature_add.remove(add_object_button)
    
if __name__ == "__main__":
    try:
        unregister()
    except:
        pass
    register()

Contribution le : 06/02/2017 14:35
_________________
BAddons, La Collection d'Addons de Matpi: https://github.com/qwenger/BAddons
Développeur Blender quand j'en ai le temps...

Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant
(1) 2 »




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Hors Sujet !! les tutos de Moonboots    [1][2][3]...[25] 241 25139 Aujourd'hui 21:56:30
moonboots 
The Blender Clan 'tchat Folle souris 0 16 Aujourd'hui 20:48:46
Rimpotche 
Questions & Réponses [résolu] Ngons 6 72 Aujourd'hui 19:00:13
Rimpotche 
Questions & Réponses [WIP] animatique vers projet réél : comment concilier les fichiers ? 4 145673 Hier 21:38:43
doudoulolita 
Questions & Réponses debutant- engrenage en pointe    [1][2] 10 349 Hier 19:19:47
CBY 
Moteur de jeu GameBlender et alternatives [WIP] Godot Engine - Projet Arsenal    [1][2][3] 22 2336 Hier 17:02:47
Redstar 
Questions & Réponses Raccourcis clavier qui ne marchent plus v 2.93.4 1 118 Hier 16:34:14
Redstar 
Questions & Réponses [résolu] Fusion 360 - recherche d'un connaisseur 1 163 Hier 16:31:30
Redstar 
Questions & Réponses Solution rendu saccade    [1][2] 17 384 Hier 08:08:02
CBY 
The Blender Clan 'tchat ANNONCE IMPORTANTE : LE BLENDER CLAN REOUVRE !! Etat des lieux sur le présent et le futur :)    [1][2][3] 22 64548 Hier 07:53:41
smogBlender 
Graphisme alternatif faire de la bd avec blender    [1][2][3]...[13] 125 11661 29/11 16:33:17
blend74 
Moteur de jeu GameBlender et alternatives [WIP] DeadSigns FPS Unity - Version alpha disponible + discord    [1][2][3]...[68] 673 152414 29/11 00:26:07
Hook 
Questions & Réponses [résolu] Découper un objet selon un autre 4 172 28/11 18:51:31
mamain83 
Questions & Réponses X-Ray uniquement en mode Solid 2 101 28/11 12:15:45
Horemheb 
Questions & Réponses Texture baké devient noir    [1][2] 14 227 27/11 07:58:33
moonboots 
The Blender Clan 'tchat Conseil pour débutante 4 418 25/11 16:24:59
Ksuhma 
Questions & Réponses Récupérer la couleur en sortie de shader 8 241 25/11 09:33:29
bibi 
Questions & Réponses Peut-on entrer les coordonnées du point visé de la caméra ? 4 186 24/11 19:16:16
CBY 
Questions & Réponses [résolu] snap fixe sur les cm ou mm 2 155 24/11 17:47:40
mamain83 
The Blender Clan 'tchat [abandonné] Clavier Corsair K55 RGB Pro / Raccourcis clavier    [1][2] 14 537 21/11 19:46:01
CBY 

Qui est en ligne
147 utilisateur(s) en ligne (dont 84 sur Forums)

Membre(s): 2
Invité(s): 145


GerardoSav, MarilynnYa, plus...
Nouveaux membres
TwylaFerni 1/12/2021
LorieFerry 1/12/2021
KarolinBay 1/12/2021
TandyColso 1/12/2021
LeathaMick 1/12/2021
KaiAnderto 1/12/2021
JewelMcCul 1/12/2021
WildaBasty 1/12/2021
KatherinIr 1/12/2021
HaleyValad 1/12/2021
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Dec 29
Anniversaire d'ebrain
Jan 8
BUG de Lyon
Fev 15
Anniversaire de Dany
plus 246 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2021 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445