Boutique Cinema 4D
Affichage des résultats 1 à 10 sur 10

Discussion: créer un script à partir d'une action

  1. #1
    Timide
    Date d'inscription
    juillet 2003
    C4D version
    R19 Broadcast
    OS
    windows 10
    Messages
    131

    créer un script à partir d'une action

    Bonjour,
    désolé, je sais que ma question va vous sembler désespérément désespérante, mais voilà, je ne comprends rien aux scripts.
    je fais du rendu d'archi, et je suis amené à fréquement construire de menuiseries autour ds vitrages de mes modèles.
    je voudrais pouvoir, à partir d'un polygone simple d'une face rectangulaire, construire autour de ce panneau une menuiserie un peu détaillée, en faisant diverses extrusions internes, extrusions, etc, pour aboutir à un profil correct.
    (éventuellement avoir des boites de dialogue pour entrer des valeurs numériques pour pouvoir varier les tailles des extrusions ..)
    j'aimerais pouvoir enregistrer un script qui fait que je n'aurais qu'à cliquer sur une icone pour traiter toutes les surfaces vitrées de mon bâtiment, et ne ma me retaper toute la suite d'opérations à chaque fois.
    Dans photoshop, il est facile de créer un script à partir d'une série d'actions que l'on enregistre, et rejoue ensuite sur d'autres images..
    n'est il pas possible de faire ça dans c4d ?

    merci à ceux qui prendront la peine de me répondre !

  2. #2
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707
    Salut et bienvenue,

    Oui c'est possible, il faut juste faire un peu de copier/coller. J'avais commencer à faire une petite vidéo sans parole pour mon site qui montre un peu le principe :



    Sinon il y a aussi Fluffy qui explique très bien la chose : http://fluffy4d.com/?p=79

  3. #3
    Timide
    Date d'inscription
    juillet 2003
    C4D version
    R19 Broadcast
    OS
    windows 10
    Messages
    131
    merci !
    c'est très simple, et pourtant ça ne marche pas chez moi,
    peut être que les scripts ne prennent pas en compte les extrusions ?
    pour info, voici ce que j'ai fait :

    import c4d
    from c4d import documents, plugins
    #Welcome to the world of Python

    def main():
    c4d.CallCommand(12187) # Polygones
    c4d.CallCommand(13323) # Tout sélectionner
    c4d.CallCommand(14046) # Scission
    c4d.CallCommand(1011183, 1011183) # Extrusion
    tool()[c4d.MDATA_EXTRUDE_OFFSET]=2
    c4d.CallCommand(12109) # Supprimer
    c4d.CallCommand(12112) # Tout sélectionner
    c4d.CallCommand(14041) # Inverser les normales
    c4d.CallCommand(450000004, 450000004) # Extrusion interne
    tool()[c4d.MDATA_EXTRUDEINNER_OFFSET]=-2
    tool()[c4d.MDATA_EXTRUDEINNER_PRESERVEGROUPS]=True
    c4d.CallCommand(12479) # Intervertir
    c4d.CallCommand(12109) # Supprimer
    c4d.CallCommand(12112) # Tout sélectionner
    c4d.CallCommand(1011183, 1011183) # Extrusion
    tool()[c4d.MDATA_EXTRUDE_CREATECAPS]=True
    tool()[c4d.MDATA_EXTRUDE_PRESERVEGROUPS]=True
    c4d.CallCommand(450000004, 450000004) # Extrusion interne
    tool()[c4d.MDATA_EXTRUDEINNER_OFFSET]=1
    c4d.CallCommand(1011183, 1011183) # Extrusion


    if __name__=='__main__':
    main()
    c4d.EventAdd()

  4. #4
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    Je crois pas que ça soit possible non, surtout si tu changes d'outils en court de route.

    Après c'est pas vraiment extrêmement plus compliqué de coder le truc """""réellement"""""

    Tu peux y passer du temps mais si c'est des manipulations que tu répètes beaucoup ça sera vite rentable.


    Code:
    import c4d
    from c4d import documents, plugins, utils
    
    
    #Welcome to the world of Python
    
    
    def main():
        c4d.CallCommand(12187) # Polygones
        c4d.CallCommand(13323) # Tout sélectionner
        c4d.CallCommand(14046) # Scission
        c4d.CallCommand(1011183, 1011183) # Extrusion
        
        settings = c4d.BaseContainer()                 # Settings
        settings[c4d.MDATA_EXTRUDE_OFFSET] = 2.0      # Length of the extrusion
        utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_TOOL,
                                    list = [op],
                                    mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
                                    bc = settings,
                                    doc = doc)
        
        
        
        c4d.CallCommand(12109) # Supprimer
        c4d.CallCommand(12112) # Tout sélectionner
        c4d.CallCommand(14041) # Inverser les normales
        c4d.CallCommand(450000004, 450000004) # Extrusion interne
        
        
        settings = c4d.BaseContainer() 
        settings[c4d.MDATA_EXTRUDEINNER_OFFSET]=-2
        settings[c4d.MDATA_EXTRUDEINNER_PRESERVEGROUPS]=True
        utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_INNER_TOOL,
                                    list = [op],
                                    mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
                                    bc = settings,
                                    doc = doc)
        
        
        
        c4d.CallCommand(12479) # Intervertir
        c4d.CallCommand(12109) # Supprimer
        c4d.CallCommand(12112) # Tout sélectionner
        c4d.CallCommand(1011183, 1011183) # Extrusion
        
        settings = c4d.BaseContainer() 
        settings[c4d.MDATA_EXTRUDE_CREATECAPS]=True
        settings[c4d.MDATA_EXTRUDE_PRESERVEGROUPS]=True
        utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_TOOL,
                                                  list = [op],
                                                  mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
                                                  bc = settings,
                                                  doc = doc)
        
        #c4d.CallCommand(450000004, 450000004) # Extrusion interne
        settings = c4d.BaseContainer()
        
        settings[c4d.MDATA_EXTRUDEINNER_OFFSET]=1
        utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_INNER_TOOL,
                                    list = [op],
                                    mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
                                    bc = settings,
                                    doc = doc)
        
        
        c4d.CallCommand(1011183, 1011183) # Extrusion
    
    
    
    
    if __name__=='__main__':
        main()
        c4d.EventAdd()

    si tu veux avoir un peu plus d'information il y a la documentation du SDK python. Il y a aussi la liste des commandes que tu peux utiliser comme ID_MODELING_EXTRUDE_INNER_TOOL pour l'extrusion interne. Il faut définir un basecontainer et y renseigner les paramètres (offset etc que tu récupères via la fenêtre de log de script ou en glissant déposant les champs dans la fenêtre de code)



    https://developers.maxon.net/docs/Ci...odelingCommand


    tout ce bloc c'est pour une commande uniquement
    Code:
        
    settings = c4d.BaseContainer()                 # Settings    
    settings[c4d.MDATA_EXTRUDE_OFFSET] = 20.0      # Length of the extrusion
    utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_TOOL,
                                              list = [op],
                                              mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
                                              bc = settings,
                                              doc = doc)
    Dernière modification par valkaari ; 27/01/2016 à 01h10.

  5. #5
    Timide
    Date d'inscription
    juillet 2003
    C4D version
    R19 Broadcast
    OS
    windows 10
    Messages
    131

    Talking

    mais c'est magnifique !
    tu l'as fait !
    merci valkaari.
    il y a juste un truc que je ne sais pas corriger,
    c'est le "preserver les groupes" sur les extrusions internes ( et les extrusions tout court)
    ?

  6. #6
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    J'ai pas testé mais normalement ça devrais marcher
    Code:
    settings = c4d.BaseContainer()                 # Settings    
    settings[c4d.MDATA_EXTRUDE_OFFSET] = 20.0      # Length of the extrusion
    settings[c4d.MDATA_EXTRUDE_PRESERVEGROUPS] = true      #active le preserve group
    utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_TOOL,
                                              list = [op],
                                              mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
                                              bc = settings,
                                              doc = doc)
    Si tu regarles dans le lien que valkaari t'as donnée tu as ceci :
    ID_MODELING_EXTRUDE_TOOL Extrude tool. See toolextrude.h.
    Donc on regarde https://developers.maxon.net/docs/Ci...xtrude_8h.html
    et après vu que c'est une checkbox ça correspond à un boolean (true ou false, true pour coché, false pour pas coché)
    SDK Specialist
    MAXON Computer GmbH

  7. #7
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707
    Attention en python c'est True et pas true !

  8. #8
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    Alors je le reformule pour voir si c'est plus clair pour toi.

    Si tu veux rajouter une option, tu repères la partie settings = c4d.BaseContainer()
    puis tu vas à la ligne et avec les tabulations tu te mets juste en dessous.
    tu tapes settings puis tu glisses dépose le champs que tu désires depuis la fenêtre d'attributs vers la fenêtre de code.
    ça te rajoutera [c4d.MDATA_EXTRUDE_PRESERVEGROUPS]

    tu aura donc settings[c4d.MDATA_EXTRUDE_PRESERVEGROUPS]
    il te reste à ajouter = True
    comme le dit graphos c'est une case à cocher donc un bool donc True ou False

    au final
    settings = c4d.BaseContainer()
    settings[c4d.MDATA_EXTRUDE_PRESERVEGROUPS] = True


    Alors je dis pas que ça marchera avec toutes les commandes c4d mais tu devrais déjà réussir à faire pas mal de manip avec tout ça.

    Pour un début c'est pas si compliqué et les possibilités sont grandes. Faut pas avoir peur ça mort pas le code.




    (enfin sauvegarde quand même ton travail avant de lancer un script T_T)

  9. #9
    Timide
    Date d'inscription
    juillet 2003
    C4D version
    R19 Broadcast
    OS
    windows 10
    Messages
    131
    oui, merci, je commence à capter .. un peu
    par contre il y a un probleme, ça marche pas sur la première extrusion interne :

    settings = c4d.BaseContainer()
    settings[c4d.MDATA_EXTRUDEINNER_OFFSET]=-2
    settings[c4d.MDATA_EXTRUDEINNER_PRESERVEGROUPS] = True #active le preserve group
    utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_INNER_TOOL,
    list = [op],
    mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
    bc = settings,
    doc = doc)

  10. #10
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    Code:
    Dans l'interface web du forum, quand tu rédiges ta réponse tu as un bouton # il permet de mettre des balises "code" et permet de conserver les tabulations etc. (on peut faire un copier coller directement vers c4d comme ça)
    Sinon ici j'ai pas de soucis. Tu devrais ouvrir la console pour voir s'il y a pas un message d'erreur. Via le menu script console ou shift+f10

    T'as peut être un problème d'indentation.

Discussions similaires

  1. [Question] Comment créer un volume à partir d'une forme d'onde audio
    Par legoman dans le forum Modélisation
    Réponses: 10
    Dernier message: 28/04/2015, 18h37
  2. Réponses: 3
    Dernier message: 31/12/2014, 07h14
  3. Réponses: 3
    Dernier message: 09/09/2010, 17h11
  4. Créer une forme à partir d'une multitude de cubes. (mograph)
    Par octopoulpe dans le forum Nouveaux membres
    Réponses: 38
    Dernier message: 21/04/2010, 19h37
  5. Créer une surface à partir d'une spline...
    Par arno592000 dans le forum Nouveaux membres
    Réponses: 4
    Dernier message: 10/10/2006, 12h10

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
Mediaworks - Logiciels 3D | Design Internet - Creation site internet