(1) 2 »


Comment renommer "Key" ? (le chef des shapekeys)
OverdOzed
Inscrit:
22/03/2010 12:13
De Gard du Nord
Post(s): 2773
Bonjour, je tâtonne en python, complètement bidouilleur de trucs que je trouve, mais c'est aussi comme ça qu'on apprend.

Je suis arrivé à faire un panel avec des curseurs vers de bones, un bouton de reset, tout ça, j'ai eu du mal, mais ça va.
Par contre, je bute sur un problème, je ne trouve aucune véritable référence pratique (ni dans les templates, ni sur les forums, ni dans le manuel, sur quoi nommer pour faire un bête slider vers l'influence d'un shape key.
Bon j'arrive à rien avec la balise code, alors je le mets sans indentations :

bidule_h = bpy.data.objects['Ear'].data.shape_keys.key_blocks["bidule_h"]
layout = self.layout

layout.label(text="bidule")
row = layout.row()
row.prop(bpy.data.shape_keys["Key"].key_blocks["bidule_h"], "bidule_h", text="bidule height")

Si vous pouviez me dire comment faire....J'ai essayé des tas de trucs.

Contribution le : 18/05/2020 17:29
Créer un fichier PDF de la contribution Imprimer


Re: Slider sur une shapekey en python.
OverdOzed
Inscrit:
08/10/2003 09:20
De Annecy
Post(s): 2902
Salut Rimpotche,

A ma connaissance, je ne crois pas qu'on puisse utiliser la fonction layout.prop() avec ce type de donnée (des shape keys).
Par contre, ça fonctionnera avec une custom property. Par exemple:
crée une custom property sur le bidule, à la main ou en python: bidule["my_prop"]
Ensuite, tu peux driver la valeur de la shape keys avec "my_prop"
Et pour l'afficher dans l'interface:
prop(bidule, '["my_prop"]')

Tu peux aussi créer la property en python de cette manière, dans la fonction register du script:
bpy.types.Scene.my_prop = bpy.props.FloatProperty(name="Nom", default = 0.0, update=update_my_prop)

Avec cette méthode, pas besoin de driver la valeur de shape keys. La fonction update_my_prop() s'en occupera:
def update_my_prop(self, context):
    bidule.data.shape_keys.key_blocks["my_key"].value = my_prop

Contribution le : 20/05/2020 17:43
_________________
lucky
www.lucky3d.fr
Auto-Rig Pro Addon: Blender Market - GumRoad
Créer un fichier PDF de la contribution Imprimer


Re: Slider sur une shapekey en python.
OverdOzed
Inscrit:
22/03/2010 12:13
De Gard du Nord
Post(s): 2773
Bonsoir, Lucky.
Merci pour ta réponse, je vais étudier ça.

Entre temps, j'étais arrivé à ce que je voulais avec ce code :
import bpy
from bpy.types import Panel, Operator
from bpy.props import FloatProperty
from mathutils import Matrix, Vector

def set_shapekey(self, value) :
    obj = bpy.data.objects['foo']
    shape_key = obj.data.shape_keys.key_blocks["lobh"] #line 8
    keys = obj.data.shape_keys.key_blocks.keys()
    shape_key_index = keys.index(shape_key.name)
    obj.active_shape_key_index = shape_key_index    
    bpy.data.shape_keys["Key"].key_blocks["lobh"].value = value  #line 12

class FOO_PT_panel_2(bpy.types.Panel):
    bl_label = "foo settings"
    bl_category = "foo"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_options = {"DEFAULT_CLOSED"}

    def draw(self, context):
        row = layout.row()
        obj = bpy.data.objects['foo']
        split=layout.split()
        col=split.column(align=True)
        if obj is not None:
            col.prop(obj, 'myFloatlobh', slider=True)

        obj = bpy.data.objects['foo']
        if obj is not None:
            col.prop(obj, 'myFloatlobw', slider=True)

        obj = bpy.data.objects['foo']
        if obj is not None:
            col.prop(obj, 'myFloatlobd', slider=True)

#floatproperty
bpy.types.Object.myFloatlobh = FloatProperty(name = "Foomax", min = 0, max = 1, soft_min=0, soft_max=1, default=0, set = set_shapekey)
bpy.types.Object.myFloatlobw = FloatProperty(name = "Foomin", min = 0, max = 1, soft_min=0, soft_max=1, default=0, set = set_shapekey)         
bpy.types.Object.myFloatlobd = FloatProperty(name = "Foothick", min = 0, max = 1, soft_min=0, soft_max=1, default=0, set = set_shapekey)         

classes = (FOO_PT_panel_2,)
def register(): 
    for cls in classes:
        bpy.utils.register_class(cls)

def unregister():
    for cls in classes:
        bpy.utils.unregister_class(cls)

if __name__ == "__main__":
    register()
```


Mais tu vois, dans le "def set_shapekey", je nomme directement deux fois ma shapekey (lignes 8 et 12). Et ça marche bien ainsi.
Sauf que j'ai une bonne vingtaine de shapekeys, et je ne vais pas faire 20 def...

Alors j'ai essayé plein de moyens pour transmettre le nom en utilisant une variable [keyframe] à la place mais ça n'a pas fonctionné, keyframe n'est pas reconnu. J'ai essayé d'en faire une globale, mais comme j'ai changé plusieurs fois le nom, seul le dernier nom reste dans la globale, je ne sais pas si je m'exprime correctement.

Donc au point où j'en suis, tu as l'air balaise en script, pourrais-tu m'expliquer comment faire dans cet environnement ?
Mais je vais essayer aussi ta méthode !

Merci encore !
(Il y a plein de trucs qui te paraîtront inutiles, mais ce sont des restes du script (bien plus long) qi ne concernent pas directement mon problème).

Contribution le : 20/05/2020 23:02
Créer un fichier PDF de la contribution Imprimer


Re: Slider sur une shapekey en python.
OverdOzed
Inscrit:
22/03/2010 12:13
De Gard du Nord
Post(s): 2773
A première vue, je m'aperçois que ta solution rejoint la mienne, sauf que tu dis update au lieu de set. Comme je patauge complètement (j'ai piqué des bouts de script où j'ai pu), je ne sais pas si set est une fonction traditionnelle ou si j'aurais pu l'appeler update ou trucmuche.

Je vais approfondir...

Je trouve malgré l'abondance de pages, de tutos, de templates, que tout ça n'est pas assez documenté (pour un débutant).

Je me souviens encore il n'y a pas si longtemps de pages dans le manuel où chaque fonction était bien expliquée avec toutes les options possibles (en Majuscules) mais je n'arrive pas à retrouver ces pages.


EDIT: J'ai adapté ta solution, ça marche nickel et je n'ai plus qu'une ligne dans ma def. Par contre, à moins que tu ne me donnes le truc, je vais avoir 20 def, mais c'est pas grave, je suis très content.
Merci grandement Lucky, non seulement tu m'as aidé dans ce cas, mais en bidouillant ta solution, j'ai appris plein de trucs... Je vais me mettre à apprendre les bases de Python, ce ne sera pas inutile, je crois.

Contribution le : 20/05/2020 23:16
Créer un fichier PDF de la contribution Imprimer


Re: Slider sur une shapekey en python.
OverdOzed
Inscrit:
08/10/2003 09:20
De Annecy
Post(s): 2902
Ah d'accord, effectivement la méthode "set" semble rejoindre la méthode "update".
Dans le cas d'un grand nombre de shape keys, une solution possible serait de créer de multiple properties selon la première methode avec une boucle "for", et de connecter ces properties avec des drivers sur les shape keys toujours grâce à une boucle.
Peut être pas la plus élégante des solutions mais techniquement ça devrait fonctionner. L'ennui c'est que tes shape keys seront connectées en dur, tu ne pourras plus changer leur valeur autrement qu'en changeant la valeur des properties.
Si cette solution t'intéresse mais que tu bloques techniquement pour la coder dis moi, j'essaierai de t'envoyer un exemple.

Voici la doc officielle (Attention blender 2.90):
https://docs.blender.org/api/master/

Contribution le : 21/05/2020 09:15
_________________
lucky
www.lucky3d.fr
Auto-Rig Pro Addon: Blender Market - GumRoad
Créer un fichier PDF de la contribution Imprimer


Re: Slider sur une shapekey en python.
OverdOzed
Inscrit:
22/03/2010 12:13
De Gard du Nord
Post(s): 2773
Merci Lucky, ça va bien comme ça.

Mais j'ai eu un autre problème.
Quand j'utilisais 'set' (qui a l'avantage de collecter la 'value'), mon slider se remettait à 0 alors que le shapekey restait bien à la valeur ordonnée par le slider. Bref ça fonctionnait bien sauf que le slider se remet à 0.

Mais grâce à ton aide sur le my_prop, je viens de résoudre le problème et ça fonctionne maintenant avec update.

Merci pour la doc. J'ai la version 2.90, mais pour mon script, je reste sur 2.82 pour l'instant.

Encore mille mercis ! Mon script progresse !

Contribution le : 21/05/2020 10:44
_________________
Des soucis, un SOUCI !
Créer un fichier PDF de la contribution Imprimer


Re: Slider sur une shapekey en python.
OverdOzed
Inscrit:
22/03/2010 12:13
De Gard du Nord
Post(s): 2773
J'ai encore un truc bizarre :

def update_mainh(self, context) :
    bpy.ops.transform.rotate(value=-bpy.data.objects['Rig'].my_mainh*0.01, orient_axis='Z', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)))


Cette rotation d'un bone me pose problème. Je pousse le curseur du slider vers la droite, le bone pivote bien. Je reviens vers la gauche, mon bone ne revient pas, au contraire, il continue sa rotation.

Contribution le : 21/05/2020 11:50
Créer un fichier PDF de la contribution Imprimer


Re: Slider sur une shapekey en python.
OverdOzed
Inscrit:
08/10/2003 09:20
De Annecy
Post(s): 2902
Salut Rimpotche,

J'ai regardé dans le code source de l'interface... héhé il y a en fait beaucoup plus simple!
kb1 = bpy.context.active_object.data.shape_keys.key_blocks[0]
kb2 = bpy.context.active_object.data.shape_keys.key_blocks[1]
col.prop(kb1, "value", text=kb1.name)    
col.prop(kb2, "value", text=kb2.name)  


Tu peux bien sûr créer tout ça avec une boucle:
for i in range(0, 10):
    kb = bpy.context.active_object.data.shape_keys.key_blocks[i]     
    col.prop(kb, "value", text=kb.name)  



Tu peux voir comment est affiché la valeur des shape keys de Blender en faisant un clic droit sur la valeur dans l'interface des Shape Keys > Edit Source. Le code python s'affichera dans l'editeur de texte directement à la ligne concerné... pratique.

Contribution le : 22/05/2020 10:50
_________________
lucky
www.lucky3d.fr
Auto-Rig Pro Addon: Blender Market - GumRoad
Créer un fichier PDF de la contribution Imprimer


Re: Slider sur une shapekey en python.
OverdOzed
Inscrit:
08/10/2003 09:20
De Annecy
Post(s): 2902
Pour ton second problème, la rotation se fera en sens inverse uniquement si la valeur de ton slider est négative. Tant que ton slider est positif, pas de raison que la bone parte dans l'autre sens.

Contribution le : 22/05/2020 10:56
_________________
lucky
www.lucky3d.fr
Auto-Rig Pro Addon: Blender Market - GumRoad
Créer un fichier PDF de la contribution Imprimer


Re: Slider sur une shapekey en python.
OverdOzed
Inscrit:
22/03/2010 12:13
De Gard du Nord
Post(s): 2773
Bon, n'en pouvant plus de tester mille solutions qui ne marchent pas, je m'en remets à vous pour me remettre sur les rails : mon blend contient les explications de mes problèmes en commentaires.

Merci de voir ce que vous pouvez faire !

Contribution le : 24/05/2020 12:52
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
Questions & Réponses Couleur des cheveux 0 18 Aujourd'hui 00:55:33
Lylo 
[WIP] et travaux terminés [WIP] La gabarre '' Le Gros Ventre''    [1][2][3]...[5] 45 3123 Hier 21:07:04
Guiu 
Hors Sujet !! Tuto débutant : un hippocampe - #1 le Maillage de base 1 72 Hier 17:09:46
meltingman 
Questions & Réponses [résolu] Utilisation des textures 7 60 Hier 16:26:51
lucky 
Hors Sujet !! Blobs Opera 3 65 Hier 12:30:04
moonboots 
Questions & Réponses [non résolu] Différence entre le viewport et le rendu dans une simulation de particule. 3 84 16/01 23:31:29
lucky 
Questions & Réponses Problème de clic gauche poisseux dans nouveau Blender    [1][2] 10 419 16/01 16:55:15
moonboots 
[WIP] et travaux terminés Animation Nodes & MIDI    [1][2] 10 2075 16/01 15:51:09
WinZs 
Moteur de jeu GameBlender et alternatives Dulcis - Démo de RPG sur Unity    [1][2] 12 318 16/01 12:51:47
meltingman 
[WIP] et travaux terminés [WIP] Avion de combat    [1][2][3]...[9] 87 14971 16/01 02:15:02
meltingman 
Questions & Réponses Texture des plastiques "Lego" 1 73 15/01 21:44:39
lucky 
Questions & Réponses Soucis dépliage UV 1 56 15/01 18:30:22
moonboots 
Questions & Réponses Crash intempestif 2.91 4 80 15/01 15:13:32
lucky 
[WIP] et travaux terminés [WIP] Projet Darwin (nom temporaire)    [1][2][3]...[5] 40 7451 15/01 14:28:37
Bibi09 
Questions & Réponses congés    [1][2] 14 6428 14/01 01:28:11
meltingman 
Questions & Réponses [résolu] Copie sur DD externe corrompue 4 181 13/01 23:09:31
Carne 
Le coin des geeks Amd vs Nvidia    [1][2][3] 21 459 13/01 17:20:48
Lylo 
Questions & Réponses [résolu] faces qui disparaissent v2.91 1 103 13/01 16:26:05
skatekitchen 
Hors Sujet !! Booster sa créativité sur Blender - tuto de configuration 0 97 12/01 23:07:59
meltingman 
Questions & Réponses Dynamic paint 2 175 11/01 21:05:18
JaAlVir657 

Qui est en ligne
119 utilisateur(s) en ligne (dont 64 sur Forums)

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


JulissaHut, BiancaPhel, plus...
Nouveaux membres
LuciaDeloa 18/1/2021
AdrienneDe 18/1/2021
MaryBmf635 18/1/2021
DongSeabol 18/1/2021
WildaCorbi 18/1/2021
BiancaPhel 18/1/2021
JulissaHut 18/1/2021
RaquelXce2 18/1/2021
LottieLett 18/1/2021
KassieShol 18/1/2021
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Fev 15
Anniversaire de Dany
Fev 23
anniversaire de windspirit
Mar 14
Anniversaire de AMV12
plus 261 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