Addon Grill

Ici on parle des scripts

Modérateurs : frez, Yadoob, stilobique, Matpi, ModSquad

Re: Addon Grill

Message par Megeon » 06 Avr 2016, 07:15

Yop petite question, je voulais mettre tout les apend dans une liste et utliser cette liste pour faire un menue deroulant et selectioner l'un des element du menu l'insert dans la vue 3D mais je pense pas que se soit la bonne solution !
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Addon Grill

Message par pistiwique » 06 Avr 2016, 09:07

Tu peux mais ça veux dire que tu les importeras à la demande.
Avatar de l’utilisateur
pistiwique
 
Message(s) : 590
Inscription : 10 Août 2014, 10:35
Localisation : le sud ou il fait trop chaud

Re: Addon Grill

Message par Megeon » 06 Avr 2016, 09:30

ben mieux vaux faire ça non si j'ai pas besoin d'une longueur pas besoin de l'importer, non ?
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Addon Grill

Message par pistiwique » 06 Avr 2016, 14:53

Non c'est sûr mais ça veut dire que tu vas, pour une longueur de 5 mètres, devoir importer ton module de 2 mètres, le dupliquer, le placer, importer ton module d'1 mètre puis le placer et tout ça à la main.
C'est pas ce que tu souhaitais au départ.
Ceci dit, avoir cette liste pour pouvoir importer au besoin reste une bonne chose.
Il faut que dans ton code, tu définisses les longueurs dont tu as besoin pour n'importer que se dont tu as besoin.
Avatar de l’utilisateur
pistiwique
 
Message(s) : 590
Inscription : 10 Août 2014, 10:35
Localisation : le sud ou il fait trop chaud

Re: Addon Grill

Message par Megeon » 06 Avr 2016, 15:00

oui je sais c'est pas ce que je souhaite, mais tu ma dit de procéder par étape, alors je le fait !

avant l'automatisation, on fait a la main ^^

c'est sur que je veut l'automisation du truc, mais faire une liste n'est jamais perdu surtout avec python

et puis pourquoi ne pas garder cette solution de coté au cas ou, si jamais je doit changer la longueur il est plus simple d'ajouter un seul éléments que recommencer tout le truc non ? bon pour une seul barre ok c'est pas trop chiant mais maintenant si j'ai une structure plus complexe ça deviens plus chiant de tout refaire !
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Addon Grill

Message par Megeon » 11 Avr 2016, 08:58

recherche rapide mais , sans succès, quelqu'un pourrais m'indiquer des site intéressant pour faire ce fameux menu déroulant ? et surtout comment faire pour créer cette liste d’append ?

PS : Plus j’avance, et plus je me dit qu'un type (moi) qui ne savais faire que des sandwichs, s'attaque a une pièce monté ! :roll:
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Addon Grill

Message par pistiwique » 11 Avr 2016, 15:31

Regarde du côté des EnumProperty ;)
Avatar de l’utilisateur
pistiwique
 
Message(s) : 590
Inscription : 10 Août 2014, 10:35
Localisation : le sud ou il fait trop chaud

Re: Addon Grill

Message par Megeon » 11 Avr 2016, 15:39

par hasard il faut que je me pense que les set_array et les get_array ?

EDIT: arf non c'est bien avec set et get mais set_enum et get enum !

EDIT 2 : ou pas

EDIT 3 : je vien de trouver....
bpy.props.EnumProperty(.....)
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Addon Grill

Message par Megeon » 13 Avr 2016, 08:23

j'ai cherché et trouver ceci :
viewtopic.php?f=2&t=705&start=19

j'ai donc essayer de faire la même,
layout.operator_menu_enum(truss, text=Truss)

mais le soucis c'est que ça me dit "Fonction.opérator expecter a string type, not list
ok donc ça prend pas de lsite, mais c'est bien une liste que je veux !

il y a vraiment de quoi s'arracher les cheuveux !

je pense trouver une partie de la solution ici
http://blender.stackexchange.com/questi ... -displayed
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Addon Grill

Message par Megeon » 13 Avr 2016, 09:22

niark j'y arrive pas, maintenant j'ai le panneau Add truss, mais plus de bouton, oui normal j'ai jouer avec le bouton, mais je voulais le remplacer par ce foutue menu déroulant

l'horrible code

Code : Tout sélectionner
import bpy
import os
truss_list = []
 
class Truss(bpy.types.Operator):
    bl_idname = "mesh.truss"
    bl_label = "truss"
 
    def get_truss(sefl, context):
        return bpy.props.truss_list
    trusslist = bpy.props.EnumProperty(items = get_truss, name = "truss", description = "truss list")
 
    def execute(self, context):
            #append
        blendfile = "E:/testgrill.blend"
        scn = bpy.context.scene
        with bpy.data.libraries.load(blendfile) as (data_from, data_to):
            data_to.objects = data_from.objects
 
        for obj in data_to.objects:
            if obj is not None:
                scn.objects.link(obj)
                truss_list.append(obj)
 
        # a ce moment la, ton objet est bien importe mais il n'est pas l'objet actif de la scene.
        bpy.context.scene.objects.active = bpy.context.selected_objects[0] # pour le definir comme objet actif     
 
        return {'FINISHED'}
 
class AddTruss(bpy.types.Panel):
    bl_idname = "add_truss"
    bl_label = "Add Truss"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS"
 
    def draw(self, context):
        layout = self.layout
        row = layout.row()
        if bpy.props.selectedTruss:
            label = str(bpy.props.selectedTruss[1])
        else:
            label = "Truss List"
        row.operator_menu_enum("mesh.truss", "trusslist", text=label)
 
def register():
    bpy.utils.register_module(__name__)
    bpy.props.truss_list = truss_list
 
def unregister():
    bpy.utils.unregister_module(__name__)
 
if __name__ == "__main__":
    register()


[se tape la tête TRES FORT contre un mur]
pourquoi vous dites que le code est si simple ???
[/se tape la tête TRES FORT contre un mur]


Image


EDIT:
ok ayer j'ai mon menu déroulant....


... mais vide
Image

Code : Tout sélectionner
import bpy
import os
truss_list = []
 
class Truss(bpy.types.Operator):
    bl_idname = "mesh.truss"
    bl_label = "truss"
 
    def get_truss(self, context):
        return bpy.props.truss_list
    trusslist = bpy.props.EnumProperty(items = get_truss, name = "truss", description = "truss list")
 
    def execute(self, context):
            #append
        blendfile = "E:/testgrill.blend"
        scn = bpy.context.scene
        with bpy.data.libraries.load(blendfile) as (data_from, data_to):
            data_to.objects = data_from.objects
 
        for obj in data_to.objects:
            if obj is not None:
                scn.objects.link(obj)
                truss_list.append(obj)
 
        # a ce moment la, ton objet est bien importe mais il n'est pas l'objet actif de la scene.
        bpy.context.scene.objects.active = bpy.context.selected_objects[0] # pour le definir comme objet actif     
 
        return {'FINISHED'}
 
class AddTruss(bpy.types.Panel):
    bl_idname = "add_truss"
    bl_label = "Add Truss"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS"
 
    def draw(self, context):
        layout = self.layout
        row = layout.row()
        if bpy.props.selectedTruss:
            label = str(bpy.props.selectedTruss[1])
        else:
            label = "Truss List"
        row.operator_menu_enum("mesh.truss", "trusslist", text=label)
 
def register():
    bpy.utils.register_module(__name__)
    bpy.props.truss_list = truss_list
    bpy.props.selectedTruss = truss_list
 
def unregister():
    bpy.utils.unregister_module(__name__)
 
if __name__ == "__main__":
    register()



Question : Pourquoi ?
ImageImageImageImage

EDIT : mouais, c'est parce que j’essaie de mètre dans une liste des objets ? et puisque je veux le nom des objet, je m'y prend pas comme il faut ?

EDIT2 : Si mes post donne l'impression que je réfléchi a haute vois, ben c'est faux, je pose les questions car je suis vraiment paumé, et a force de lire et relire mon post, parfois une idée arrive, parfois bonne, parfois mauvaise !
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Addon Grill

Message par Megeon » 13 Avr 2016, 13:55

modification du code, j'ai maintenant le petit bouton pour tout ajouter, et le menu déroulant ( désespérément vide )

Code : Tout sélectionner
import bpy
import os
 
class Truss(bpy.types.Operator):
    bl_idname = "mesh.truss"
    bl_label = "truss"
 
    def get_truss(self, context):
        return bpy.props.truss_list
    trusslist = bpy.props.EnumProperty(items = get_truss, name = "truss", description = "truss list")
 
    def execute(self, context):
            #append
        blendfile = "E:/testgrill.blend"
        scn = bpy.context.scene
        with bpy.data.libraries.load(blendfile) as (data_from, data_to):
            data_to.objects = data_from.objects
 
        for obj in data_to.objects:
            if obj is not None:
                scn.objects.link(obj)
                bpy.props.truss_list.append(obj)
 
        # a ce moment la, ton objet est bien importe mais il n'est pas l'objet actif de la scene.
        bpy.context.scene.objects.active = bpy.context.selected_objects[0] # pour le definir comme objet actif     
 
        return {'FINISHED'}
 
class AddTruss(bpy.types.Panel):
    bl_idname = "add_truss"
    bl_label = "Add Truss"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS"
 
    def draw(self, context):
        layout = self.layout
        row = layout.row()
        if bpy.props.selectedTruss:
            label = str(bpy.props.truss_list[1])
        else:
            label = "Truss List"
        row.operator_menu_enum("mesh.truss", "trusslist", text=label)
        row.operator("mesh.truss")
 
def register():
    bpy.utils.register_module(__name__)
    bpy.props.truss_list = []
 
 
def unregister():
    bpy.utils.unregister_module(__name__)
    del bpy.props.truss_list
 
if __name__ == "__main__":
    register()



par contre il es possible d'avoir les bouton l'un en dessous de l'autre ?
Image
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Addon Grill

Message par pistiwique » 13 Avr 2016, 17:49

Dans la mesure ou tu connais le nom de tes truss, tu peux directement les déclarer dans ton Enum.

Code : Tout sélectionner
import bpy
import os
 
class Truss(bpy.types.Operator):
    bl_idname = "mesh.truss"
    bl_label = "Add truss"
 
    def execute(self, context):
            #append
        blendfile = "E:/testgrill.blend"
        truss_name = bpy.context.scene.truss_list
        with bpy.data.libraries.load(blendfile) as (data_from, data_to):
            directory = join(blendfile, "Object")
 
            bpy.ops.wm.append(filename=truss_name, directory=directory)
 
        bpy.context.scene.objects.active = bpy.context.selected_objects[0]   
 
        return {'FINISHED'}
 
class AddTruss(bpy.types.Panel):
    bl_idname = "add_truss"
    bl_label = "Add Truss"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS"
 
    def draw(self, context):
        layout = self.layout
        layout.prop(context.scene, "truss_list", text="")
        layout.operator("mesh.truss")
 
def register():
    bpy.utils.register_module(__name__)
    bpy.types.Scene.truss_list = bpy.props.EnumProperty(items=(('truss2', "Mon truss 2", ""), ('truss1', "Mon truss 1", "")), default='truss1')
    # les arguments que tu dois mettre pour les items de ton enum sont:
    # - l'identifiant en premier ("truss2" dans cet exemple). Dans ton cas, met le nom de ton truss comme il est dans ton .blend parceque c'est cette chaine de charactre qui est retourne et qui sera utilise pour savoir quel truss choisir dans le .blend.
    # - la chaine de charactere que tu veux voir affiche dans l'enum en deuxieme ("Mon truss 2" dans cet exemple )
    # - la description dans le troisieme (vide dans cet exemple). Pas obligatoir
    # Tu peux egalement ajouter des icon si besoin dans les arguments suivant si besoin.
 
def unregister():
    bpy.utils.unregister_module(__name__)
 
if __name__ == "__main__":
    register()
 


Attention à bien changer les identifiants dans l'enum pour qu'ils correspondent bien aux nom de tes truss dans ton .blend.
Si tu pouvais dl Skype, ça serait plus pratique, je pourrai te montrer directement au besoin :D .
Avatar de l’utilisateur
pistiwique
 
Message(s) : 590
Inscription : 10 Août 2014, 10:35
Localisation : le sud ou il fait trop chaud

Re: Addon Grill

Message par Megeon » 13 Avr 2016, 18:41

Le truc c'est que je code ca au taf donc j'ai pas skype mais a la maison ayé je l'ai.
Par contre je pense que le projet est en stand by pour le moment ! Mais j'aimerais bien finir au moin la partie du menu deroulant
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Addon Grill

Message par Megeon » 14 Avr 2016, 08:01

c'est bon pour skype ajoutez WillMegeon ( celui de metz)
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Addon Grill

Message par Megeon » 14 Avr 2016, 09:42

bon ça a l'aire de fonctionner, je dit ça a l'aire, car chez moi j'arrive a tout faire sauf trouver le chemin d'acces du fichier ( sur mac c'est la galère )
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Précédent

Retour vers Scripts - Python - OSL

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)

cron