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

Discussion: Premier Script Python : AlignFromPoint

  1. #1
    Touriste Avatar de lakpo
    Date d'inscription
    août 2011
    C4D version
    R18 Studio
    OS
    win10
    Messages
    19

    Premier Script Python : AlignFromPoint

    Hello !

    Donc voici mon premier script python (bon j'en ai déjà fait mais des simple copié collé de l'historique ^^) alors j'ai bien conscience que le code est dégueux d'ailleurs y a un ou deux trucs que j'ai récupéré dans d'autres scripts



    Alors comme vous pouvez le voir le but est de sélectionner une arête ou un ensemble d'arêtes puis de repassé en mode point pour sélectionner celui qui sera la référence pour l'alignement , on choisi ensuite l'axe de l'alignement.

    Bon je ne sais pas si il y avait une méthode plus simple mais perso j'aime bien cette méthode.

    LK_AlignFromPoint.zip
    Voici les trois scripts pour XYZ ainsi que les tif (fait à la va vite ^^)

  2. #2
    Pilier Avatar de ozchan
    Date d'inscription
    mars 2004
    C4D version
    R16 Studio
    OS
    Windows 10 pro
    Messages
    540
    il faudra que je m'y mette un jour.. ça me fascine .. dommage qu'on ait qu'une vie (enfin il semblerait)
    pour un béotien qui débuterait dans le langage "serpent" tu commencerais comment ? un site à explorer ? un livre à lire, un lieu où on peut trouver des exercices ??
    j'en suis resté au basic.. donc il y a du boulot..
    Dernière modification par ozchan ; 16/06/2017 à 17h00.
    Oser rêver, et mentir

  3. #3
    Touriste Avatar de lakpo
    Date d'inscription
    août 2011
    C4D version
    R18 Studio
    OS
    win10
    Messages
    19
    Citation Envoyé par ozchan Voir le message
    il faudra que je m'y mette un jour.. ça me fascine .. dommage qu'on ait qu'une vie (enfin il semblerait)
    pour un béotien qui débuterait dans le langage "serpent" tu commencerais comment ? un site à explorer ? un livre à lire, un lieu où on peut trouver des exercices ??
    j'en suis resté au basic.. donc il y a du boulot..
    Houlas ! Je suis aussi un débutant j'ai des connaissances en javascript mais pour le python bein j'imagine qu'il y a pas mal de vidéos youtube ou de site qui traite le python en générale. Sinon j'ai vu que Gr4ph0s à fait des vidéos intéressantes sur sa chaine vimeo :

    01 - Introduction au python dans cinema 4D

    https://vimeo.com/181392492

  4. #4
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    Pas mal du tout pour un "débutant" j'aurais aimer débuter comme toi :p

    Au niveau de ton code pas grand chose à dire.
    Tu devrais garder une copie des selections. J'aime pas quand un outil les change. Pour cela il te suffit de copier le baseSelect via BaseSelect.GetClone puis après tu fais un BaseSelect.CopyTo( obj.GetPointS())

    Plutôt que de check au milieu de ton code (ligne 7 par exemple) que op existe, fait le des le début. C'est bien plus simple à lire, comme ça on sais direct que tu veux que sa sois un objet et rien d'autre.
    Du coup sa donnerais un turc dans le style
    Code:
    op = doc.GetActiveObject()
    if not op:
        return
    
    if not isinstance(op, c4d.PointObject):
        return
    Après tu as oublier de faire un StartUndo()

    Et pour finir je serais toi je switcherais pour un plugin, sa te permettrais d'avoir un code beaucoup plus maintenable, car la tes 3 code se ressemble fortement, et si tu as plusieurs changements à faire, bha t'es obligé de le faire dans les 3 fichiers (alors pour ce projet ça reste acceptable mais bon autant faire bien des le début :p)

    Mais sinon encore une fois gg, et très utile.

    Je pense qu'il complete bien mon plug de snap avec constrainte, vu que toi il fonctionne dans un espace local à l'objet tandis que le mien est dans l'espace global de la scène !


    J'en profite pour singaler que je l'ai mise à jour. Pas mal de chose on changé depuis la dernière version que j'ai posté ici, plus optimisé, la possibilité de sélectionner / désélectionner, la possibilité de pouvoir snap depuis plusieurs objets sélectionné, et le fix de 2 bug qui faisais crash.
    SDK Specialist
    MAXON Computer GmbH

  5. #5
    Touriste Avatar de lakpo
    Date d'inscription
    août 2011
    C4D version
    R18 Studio
    OS
    win10
    Messages
    19
    Citation Envoyé par gr4ph0s Voir le message
    Tu devrais garder une copie des selections. J'aime pas quand un outil les change. Pour cela il te suffit de copier le baseSelect via BaseSelect.GetClone puis après tu fais un BaseSelect.CopyTo( obj.GetPointS())
    Merci gr4ph0s pour ton retour,

    Pour la copy de la sélection je l'a récupérait bien mais d'une façon dégueux (je vais tenter de corriger ça avec ta méthode) .

    Citation Envoyé par gr4ph0s Voir le message
    Après tu as oublier de faire un StartUndo()
    ah ok encore un truc que j'ai mal compris je pensais que ça équivalait a un StartUndo :

    Code:
    doc.AddUndo(c4d.UNDOTYPE_CHANGE, op)
    Et pour finir je serais toi je switcherais pour un plugin, sa te permettrais d'avoir un code beaucoup plus maintenable, car la tes 3 code se ressemble fortement, et si tu as plusieurs changements à faire, bha t'es obligé de le faire dans les 3 fichiers (alors pour ce projet ça reste acceptable mais bon autant faire bien des le début :p)
    Va falloir que je regarde comment fonctionne ainsi que pour la création d'Ui mais oui tu as raison.

    Je pense qu'il complete bien mon plug de snap avec constrainte
    Ah ouais top ton plugin il va falloir que je le test ;-) !

    Merci pour tout tes conseils gr4ph0s

    Bon j'ai encore du boulot ... est ce que vous savez si il y a un moyen en python de récupéré le centre d'une sélection de point ?

  6. #6
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    Pour les undos je te conseille de lire la doc C++ ainsi que ce thread
    https://developers.maxon.net/docs/Ci...nual_undo.html
    http://www.plugincafe.com/forum/foru....asp?TID=12227

    Pour récupérer le centre tu peux faire une moyenne (ce ne sera pas le centre mais une moyenne, mais tu verras qu'au final ça donne des résultat presque similaire)
    Sinon la méthode est un peu plus chiante il faut que tu créer une bouding box en recupérant max X/Y/Z et min X/Y/Z des points sélectionné puis après tu recup le centre.

    Pour la méthode de la moyenne
    Code:
    all_value = 0
    selected_count = 0
    bs = obj.GetPointS()
    
    
    #enumerate va nous retourner l'index et la valeur
    #index sera égal à notre pt_id et selected l'état de sélection du point
    for index, selected in enumerate(bs.GetAll(maxelements)):
      if not selected: continue #Si il n'est pas selectionné on continue notre boucle
    
    
      all_value += obj.GetPoint(index)
      selected_count += 1
    
    
    #Toujorus check quand tu fais des division pour ne pas diviser par 0
    if not selected_count:
        return
    
    
    center = all_value / selected_count
    SDK Specialist
    MAXON Computer GmbH

Discussions similaires

  1. Mon premier script Python. J'ai besoin d'aide pour le tester.
    Par ManuEffect dans le forum Xpresso/Programmation
    Réponses: 9
    Dernier message: 25/08/2019, 14h06
  2. [Résolu] Importer script python dans un plugin python
    Par Pandoxyd dans le forum Nouveaux membres
    Réponses: 8
    Dernier message: 28/09/2016, 11h48
  3. Mon premier script Python. J'ai besoin d'aide pour le tester.
    Par ManuEffect dans le forum Nouveaux membres
    Réponses: 2
    Dernier message: 22/01/2016, 21h53
  4. Script Python - AutoUpdater
    Par gr4ph0s dans le forum Plugins made in FC4D
    Réponses: 0
    Dernier message: 12/07/2015, 16h52
  5. Rown script Python
    Par iolofato dans le forum Plugins
    Réponses: 0
    Dernier message: 28/11/2012, 13h12

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