(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
The Blender Clan 'tchat W10 pour le prix d'une cacahuète    [1][2][3] 20 322 Hier 22:27:42
sapajou 
[WIP] et travaux terminés [WIP] La pince à linge    [1][2] 11 194 Hier 18:53:10
meltingman 
Hors Sujet !! Tuto Astraonaute low-poly + rigify en 25mm 3 178 Hier 14:47:47
meltingman 
Questions & Réponses Texture et courbe de Bézier 9 138 Hier 14:19:10
Horemheb 
Questions & Réponses freestyle lineset : ignorer un objet spécifique pour une arrête cachée 0 43144 Hier 08:56:34
yekcim 
[WIP] et travaux terminés Pagani Zonda Barchetta 6 206 20/01 09:03:37
moonboots 
[WIP] et travaux terminés [WIP] La gabarre '' Le Gros Ventre''    [1][2][3]...[12] 112 22192 19/01 17:57:26
Guiu 
Questions & Réponses chemins suivant une déformation de surface 6 141 19/01 12:26:50
meltingman 
Questions & Réponses Vitesse d'une vidéo 4 114 18/01 19:59:42
meltingman 
Questions & Réponses Armature sans parenté? 1 68 18/01 19:38:25
meltingman 
The Blender Clan 'tchat Avenir du blender clan    [1][2][3]...[41] 405 48973 17/01 20:40:59
Rimpotche 
Questions & Réponses texture eyes avec empty 1 73 17/01 13:17:33
Rimpotche 
The Blender Clan 'tchat Progression dans Blender et la 3D    [1][2] 11 535 16/01 17:37:45
Rimpotche 
Questions & Réponses [terminé] Modificateur Mirror sur un Vertex Group 2 115 16/01 15:55:36
Horemheb 
Questions & Réponses Ma caméra me saoule... 5 243 15/01 20:33:23
Lylo 
Hors Sujet !! Appareil Photo Compact, qualité, zoom...    [1][2] 19 488 14/01 14:45:17
lucky 
Questions & Réponses [résolu] Comportement du parentage et du Weight Paint bizarres    [1][2] 14 147971 10/01 15:17:23
Horemheb 
Hors Sujet !! BONNE ANNEE LE BLENDER CLAN    [1][2] 10 421 10/01 13:34:18
Riggelm 
Questions & Réponses Limit location constraint-Affect transforms 4 205 09/01 14:33:38
Melodicpinpon 
Questions & Réponses Mon objet suit la courbe à 12 km...    [1][2] 10 595 08/01 01:37:51
Lylo 

Qui est en ligne
228 utilisateur(s) en ligne (dont 91 sur Forums)

Membre(s): 1
Invité(s): 227


OllieBeaur, plus...
Nouveaux membres
BlondellGa 2/1/2022
EileenTomk 2/1/2022
RamonaDahl 2/1/2022
SashaBeals 2/1/2022
TroyLightn 2/1/2022
PhillippBu 2/1/2022
LesterHida 2/1/2022
PansyHolm 2/1/2022
YukikoMitt 2/1/2022
Randall318 2/1/2022
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Fev 15
Anniversaire de Dany
Fev 19
Anniversaire de APPGirault123
Fev 23
anniversaire de windspirit
plus 244 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