Python - les questions de megeon

Ici on parle des scripts

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

Re: Python - les questions de megeon

Message par Megeon » 23 Mars 2016, 09:51

yop, j'ai commencer a préparer les étapes.

J'ai pas encore de code a proprement parler mais avant tout on attaque par ça non ?

Code : Tout sélectionner
'''
Stape 1 les barres de face
'''

import bpy

# Enter la longueur de la poutre

# Add Truss
    # Boucle
        # Si la longueur est plus grand que l’élément A, on ajoute A
        # sinon on passe a la longueur inférieur et on compare de nouveau.

# Assembly Truss (Boucles)
    # Select Truss A
    # Select Truss B
    # Select ....
    # Truss A in 0,0,0
    # Truss B in 0,0,0 + length Truss A
    # Truss ...

# Select All and join for have 1 mesh


du coup est ce que ça vous parait cohérent, ou il va y avoir des étapes qui vont s'assembler ?
ou y en manque t'il ?
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Python - les questions de megeon

Message par jemian » 23 Mars 2016, 22:47

Oui tu créés une variable liste de longueur d'élément et tu la classe en ordre décroissant et tu fais un while

Code : Tout sélectionner
tant que (while) longueur de poutre != longueur totale et que la liste n'est pas fini
   if longueur de poutre < longueur totale
       ajouter 1er élément de la liste
       ajouter la longueur a la variable longueur poutre
   else
   retiré le précédent élément
   retirer la longueur précédent élément a la variable longueur poutre
   incrémenté l'index de la liste
   ajouter l'élément de la liste



Si la combinaison ne marche pas tu peux rajouter une autre boucle par dessus pour enlever l'avant dernier élément
Avatar de l’utilisateur
jemian
 
Message(s) : 2797
Inscription : 03 Fév 2014, 01:52
Localisation : Brest

Re: Python - les questions de megeon

Message par Megeon » 24 Mars 2016, 09:06

ouai une liste des élément, c'est pas faux ! j'aurais même pas du oublier ce point la dans mon précédent code j'ai fait des liste dans tout les sens ^^

merci

Je vais commencer a chercher des bouts de code a adapté petit a petit !

je résume
il me faut,
un input
un append
un while
un add sur la 3D

je pense que l'assemblage peux se faire dans la boucle while !

EDIT: du coup la grande question pour les apend je fait un fichier.blend pour tout les élément du même type, ou un fichier un élément ?
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Python - les questions de megeon

Message par pistiwique » 24 Mars 2016, 13:00

Fait un .blend dans lequel tu mets tout tes éléments mais attention au placement de l'origine de chacun de tes éléments et donne leur un nom bien distinct.
Avatar de l’utilisateur
pistiwique
 
Message(s) : 590
Inscription : 10 Août 2014, 10:35
Localisation : le sud ou il fait trop chaud

Re: Python - les questions de megeon

Message par Megeon » 24 Mars 2016, 13:59

l'origine sera vérifier sur chaque élément et le nom sera le nom standard soit la forme, la taille et la longueur !

dans le genre la H40V100 pour un pont carré de hauteur 40cm et longueur 1m

mais avant d'attaqué, je ferais un fichier simple avec des parallélépipède de différente longueur (enfin 3 longueur ^^ )
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Python - les questions de megeon

Message par pistiwique » 24 Mars 2016, 18:22

Tu devrais te créer un topic juste pour ce sujet, histoire de centraliser tes question sur se sujet en particulier et garder celui la pour tes question plus généraliste sur python ;) .
L'avantage de ce genre de nom, c'est que tu as déjà des "données récupérable" comme la dimension de hauteur et la dimension de longueur.
Avatar de l’utilisateur
pistiwique
 
Message(s) : 590
Inscription : 10 Août 2014, 10:35
Localisation : le sud ou il fait trop chaud

Re: Python - les questions de megeon

Message par Megeon » 24 Mars 2016, 19:49

C'est fait merci !
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Python - les questions de megeon

Message par Megeon » 31 Mai 2016, 13:54

coucou les coupains,

bon j'ai essayer d'avoir le preview dans un panel du node editor, et hum ... ben j'ai foiré !!!!

J'ai essayer de passer par ce que je connais, avec une deux classe une contenant Draw et l'autre Execute.... je doit foirer quelque part donc je cherche un peut d'aide.

oui oui bon je suis un boulet quoi !

Code : Tout sélectionner
import bpy
import os

class Preview (bpy.type.Operator):
    bl_idname = "Preview.op"
    bl_label = "Node_Preview"
   
    def execute(self, context):
        self.layout.template_preview(context.material)
   

class Preview_Node_Editor(bpy.typt.Panel):
    bl_idname = "Node_preview"
    bl_label = "Preview"
    bl_space_type = "Node_Editor"
    bl_region_type = "PREVIEW"

    def draw(self, context):
        layout = self.layout
        row = layout.row()
        rox.operator("Preview.op")
       

def register():
    bpy.utils.register_class(Preview_Node_Editor)
def unregister():
    bpy.utils.unregister_module(Preview_Node_Editor)

if __name__ == "__main__":
    register()


Help ?
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Python - les questions de megeon

Message par pistiwique » 31 Mai 2016, 14:48

Je ne suis pas encore rentré alors je ne peux pas tester mais essaye avec
Code : Tout sélectionner
import bpy

class Preview_Node_Editor(bpy.type.Panel):
    bl_idname = "Node_preview"
    bl_label = "Preview"
    bl_space_type = "Node_Editor"
    bl_region_type = "PREVIEW"

    def draw(self, context):
        layout = self.layout
        layout.template_preview(context.material)
   
       

def register():
    bpy.utils.register_class(Preview_Node_Editor)
def unregister():
    bpy.utils.unregister_class(Preview_Node_Editor)

if __name__ == "__main__":
    register()
Avatar de l’utilisateur
pistiwique
 
Message(s) : 590
Inscription : 10 Août 2014, 10:35
Localisation : le sud ou il fait trop chaud

Re: Python - les questions de megeon

Message par Megeon » 31 Mai 2016, 15:03

error bpy as no attribute type

donc j'ai corrigé type en types

et donc j'ai un soucis avec les register et unregister

a "def unregister():" ça me dit invalid synthax

Sinon question, pourquoi ici il n'y a pas besoin de "def execute" ?
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Python - les questions de megeon

Message par lapineige » 31 Mai 2016, 15:20

Tu confond deux choses: les opérateurs et les panneaux.
class Preview_Node_Editor(bpy.type.Panel):

La classe Preview_Node_Editor va hériter de bpy.types.Panel. C'est sa classe fille.
Elle va en récupérer les attributs (de classe, ceux de l'instance, appelés avec self.qqch, dépendent de l'instance et pas de la classe) et les méthodes (de classe).
En gros, c'est un peu comme si tu copiait intégralement le code de bpy.types.Panel dans ta classe.
Avec quelques nuances, par exemple si Panel a par défaut un draw(), quand tu définis une fonction draw (enfin une méthode pour être rigoureux) dans ta classe fille elle écrase celle de Panel

Donc tu pars d'un modèle, que tu copie-colle mais simplement en y faisant référence, et que tu modifie/enrichit.

Donc Preview_Node_Editor hérite de Panel, elle va servir à définir un panel. Pour ça une fonction draw suffit, on ne gère que l'affichage (d'ailleurs tu n'as pas accès aux modifications).

class Preview (bpy.type.Operator):


Là c'est un opérateur, qui exécute du code, donc fonction execute. Pas d'affichage, pas de draw.
(mais il existe une fonction draw, utilisé dans le last operator panel, qui sert à afficher les paramètres à modifier. Enfin pour être précis, les nouveaux paramètres, en pratique Blender annule la dernière opération et recommence)

Dans ton cas, tu affiche seulement, dans un panel, d'où le code de pistiwique.
Mon terrier/blog: https://lapineige.fr/wp (l'ancien: le-terrier-de-lapineige.over-blog.com) | Mon GitHub: https://github.com/lapineige/Blender_add-ons | Lapineige's Tools: http://cgcookiemarkets.com/blender/all- ... ompilation
Avatar de l’utilisateur
lapineige
 
Message(s) : 3716
Inscription : 25 Juin 2014, 07:06

Re: Python - les questions de megeon

Message par Megeon » 31 Mai 2016, 15:23

ok merci c'est claire.

donc on a une class pour l'affichage et une class pour les opérateurs !
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Python - les questions de megeon

Message par Matpi » 31 Mai 2016, 15:25

Y'a encore d'autres trucs à modifier... voici un essai rapide:

Code : Tout sélectionner
import bpy

class Preview_Node_Editor(bpy.types.Panel):
    bl_idname = "Node_preview"
    bl_label = "Preview"
    bl_space_type = "NODE_EDITOR"
    bl_region_type = "UI"

    @classmethod
    def poll(cls, context):
        nt = context.space_data.node_tree
        return nt and nt.type in ('SHADER', 'TEXTURE')

    def draw(self, context):
        layout = self.layout
        data = None
        nt = context.space_data.node_tree
        if nt:
            if nt.type == 'SHADER':
                for mat in bpy.data.materials:
                    if mat.node_tree == nt:
                        data = mat
                        break
            elif nt.type == 'TEXTURE':
                for tex in bpy.data.textures:
                    if tex.node_tree == nt:
                        data = tex
                        break
            if data is not None:
                layout.template_preview(data)
       
       

def register():
    bpy.utils.register_class(Preview_Node_Editor)
def unregister():
    bpy.utils.unregister_class(Preview_Node_Editor)

if __name__ == "__main__":
    register()
BAddons - La Collection d'Addons de Matpi: https://github.com/qwenger/BAddons
Avatar de l’utilisateur
Matpi
 
Message(s) : 288
Inscription : 07 Déc 2014, 10:51
Localisation : in dr Schwiiz

Re: Python - les questions de megeon

Message par Megeon » 31 Mai 2016, 15:28

ok y a la preview ( faudra m'expliqué tout ça ça a l'aire plus complexe que simplement copier une ligne de code )

par contre pas de mise a jour en direct

Image
Avatar de l’utilisateur
Megeon
 
Message(s) : 634
Inscription : 04 Jan 2016, 15:34
Localisation : Lyon

Re: Python - les questions de megeon

Message par lapineige » 31 Mai 2016, 15:30

C'est le relai 4x100 caractères des programmeurs dans ce topic ^^

Bien vu Matpi, il faut y intégrer les vérifications pour éviter de l'afficher s'il n'y a pas de matériau/texture.

( faudra m'expliqué tout ça ça a l'aire plus complexe que simplement copier une ligne de code )


Je t'ai donné la fonction de base, il faut toujours penser aux cas d'usages possibles (même illogique, l'utilisateur ferra toujours quelque chose d'imprévu, volontairement ou pas) - et aux vérifications / sécurités à mettre en place.

edit: tu as modifié la valeur dans quelle vue ?
Mon terrier/blog: https://lapineige.fr/wp (l'ancien: le-terrier-de-lapineige.over-blog.com) | Mon GitHub: https://github.com/lapineige/Blender_add-ons | Lapineige's Tools: http://cgcookiemarkets.com/blender/all- ... ompilation
Avatar de l’utilisateur
lapineige
 
Message(s) : 3716
Inscription : 25 Juin 2014, 07:06

PrécédentSuivant

Retour vers Scripts - Python - OSL

Qui est en ligne ?

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

cron