Boutique Cinema 4D
Page 2 sur 2 PremièrePremière 12
Affichage des résultats 31 à 37 sur 37

Discussion: Python - Doc Utilitaires

  1. #31
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Le dépot git a été créé pour ceux qui veulent participer.

    https://bitbucket.org/codevonc/voncutils


    Quelques nouveautés :


    PointEstDansTriangle2D

    Code:
    def PointEstDansTriangle2D(pt, v1, v2, v3) :        
            """
                Détermine si un point se trouve dans un triangle 2D.
                
                Paramètres :
                    pt (Vector) - Point à déterminer
                    v1 (Vector) - Point du triangle
                    v2 (Vector) - Point du triangle
                    v3 (Vector) - Point du triangle
                
                Renvoie :
                    (bool) - Booléen, si le point est contenu dans le triangle ou non
            """
            
            def signe(p1, p2, p3) :
                return (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y)
    
            b1 = signe(pt, v1, v2) < 0.0
            b2 = signe(pt, v2, v3) < 0.0
            b3 = signe(pt, v3, v1) < 0.0
    
            return ((b1 == b2) and (b2 == b3))

    SubdiviseLissePoints

    Code:
    def SubdiviseLissePoints(pts, nbPts, ferme) :
            """
                Subdivise et lisse une liste de points qui se suivent.
                
                Paramètres :
                    pts (liste de Vector) - Liste des points à subdiviser
                    nbPts (int) - Nombre de points de la liste
                    ferme (bool) - Définit si la liste de points forme une boucle
                
                Renvoie :
                    (liste de Vector) - Nouvelle liste de points subdivisés et lissés
                    (int) - Nombre de points de la nouvelle liste
            """
            
            nbPtsNouv = nbPts * 2
            if not ferme : nbPtsNouv -= 1
            
            ptsNouv = [c4d.Vector()] * nbPtsNouv
            
            if nbPts == 0 :
                return [], 0
            
            if nbPts == 1 :
                return [pts[0]], 1
            
            j = 0
            prec = c4d.Vector()
            suiv = c4d.Vector()
            pos = c4d.Vector()
            nouv = c4d.Vector()
            mil = c4d.Vector()
            milPrec = c4d.Vector()
            nbPtsMU = nbPts - 1
            
            # i = 0
            pos = pts[0]
            suiv = pts[1]
            mil = (pos + suiv) * 0.5
            ptsNouv[j] = pos + 0.0 ; j += 1
            ptsNouv[j] = mil ; j += 1
            milPrec = mil
            
            # 1 à nbPts-2
            for i in xrange(1, nbPtsMU) :
                
                pos = pts[i]
                suiv = pts[i + 1]
                mil = (pos + suiv) * 0.5
                nouv = ((mil + milPrec) * 0.5 + pos) * 0.5
                
                ptsNouv[j] = nouv ; j += 1
                ptsNouv[j] = mil ; j += 1
                
                prec = pos
                milPrec = mil
                
            # i = nbPts-1
            pos = pts[nbPtsMU]
            if not ferme :
                ptsNouv[j] = pos + 0.0 ; j += 1
            else :
                suiv = pts[0]
                mil = (pos + suiv) * 0.5
                nouv = ((mil + milPrec) * 0.5 + pos) * 0.5
                ptsNouv[j] = nouv ; j += 1
                ptsNouv[j] = mil ; j += 1
                
                milPrec = mil
                mil = ptsNouv[1]
                nouv = ((mil + milPrec) * 0.5 + pts[0]) * 0.5
                ptsNouv[0] = nouv
            
            return ptsNouv, nbPtsNouv

    ProjetteVecteur


    Code:
    def ProjetteVecteur(a, bNor) :    
            """
                Projette un vecteur A sur un vecteur B. Le vecteur B doit être normalisée.
                
                Paramètres :
                    a (Vector) - Vecteur initial
                    b (Vector) - Vecteur de projection (normalisé)
                
                Renvoie :
                    (Vector) - Vecteur projeté C
            """
                
            return a.Dot(bNor) * bNor

    RejetteVecteur


    Code:
        def RejetteVecteur(a, bNor) :    
            """
                Calcule la réjection d'un vecteur A sur un vecteur B. Le vecteur B doit être normalisée.
                
                Paramètres :
                    a (Vector) - Vecteur initial
                    b (Vector) - Vecteur de réjection (normalisée)
                
                Renvoie :
                    (Vector) - Vecteur rejeté C
            """
                
            return a - a.Dot(bNor) * bNor

    TransformeVecteur


    Code:
        def TransformeVecteur(a, b, c, transformeTaille = True) :    
            """
                Calcule la différence entre deux vecteurs et applique cette même déformation à un troisième vecteur.
                
                Paramètres :
                    a (Vector) - Vecteur initial
                    b (Vector) - Vecteur initial transformé
                    c (Vector) - Vecteur à transformer
                    transformeTaille (Bool) - Si vrai, transforme également la taille du vecteur
                
                Renvoie :
                    (Vector) - Vecteur transformé D
            """
            
            aLon = a.GetLength()
            
            if aLon == 0.0 :
                return c4d.Vector()
            
            bLon = b.GetLength()
            
            if bLon == 0.0 :
                return c4d.Vector()
            
            cLon = c.GetLength()
            
            if cLon == 0.0 :
                return c4d.Vector()
            
            facLon = bLon / aLon
            
            b2 = b.GetNormalized() * cLon
            
            n = (b2 + c) * 0.5
            n.Normalize()
            
            d = c4d.Vector()
            
            # Cas où la normale est nulle
            if n == c4d.Vector() :
                d = -b
                
            else :
                d = (2. * (a.Dot(n)) * n) - a
            
            d.Normalize()
            
            if transformeTaille :
                d *= cLon * facLon
                
            return d


    InterpoleDansTab

    Code:
    def InterpoleDansTab(nb, c) :
            """
                Soit un tableau de longueur NB et C un curseur sur le tableau.
                Cette fonction renvoie l'indices des cases autour du curseur et le facteur de mélange entre les deux cases.
    
                Paramètres :
                    nb (int) - Taille du tableau
                    c (float) - Curseur, entre 0.0 et 1.0
    
                Renvoie :
                    (int) - Case à gauche du curseur
                    (int) - Case à droite du curseur
                    (float) - Facteur de mélange entre les deux cases, entre 0.0 et 1.0
            """
    
            a = 0
            b = 0
            f = 0.0
            nbMU = nb - 1
    
            if c > 0 :
                bf = c * nbMU
                b = int(math.ceil(bf))
                a = b - 1
                f = 1.0 - (b - bf)
    
            if a >= nb : a = nbMU
            if b >= nb : b = nbMU
            if a < 0 : a = 0
            if b < 0 : b = 0
    
            return a, b, f


    InterpoleLineaire

    Code:
        def InterpoleLineaire(pts, nb, t) :
            """
                Interpole de façon linéaire une valeur dans un tableau de données
    
                Paramètres :
                    pts (liste de Vector ou de float) - Liste des points de contrôles
                    t (float) - Facteur d'interpolation, entre 0.0 et 1.0
    
                Renvoie :
                    (Vector ou float) - La valeur interpolée dans le tableau
            """
    
            a, b, f = Utils.InterpoleDansTab(nb, t)
    
            return (1.0 - f) * pts[a] + f * pts[b]


    InterpoleDoux

    Code:
        def InterpoleDoux(pts, nb, t) :
            """
                Interpole de façon adoucie une valeur dans un tableau de données
    
                Paramètres :
                    pts (liste de Vector ou de float) - Liste des points de contrôles
                    t (float) - Facteur d'interpolation, entre 0.0 et 1.0
    
                Renvoie :
                    (Vector ou float) - La valeur interpolée dans le tableau
            """
    
            a, b, f = Utils.InterpoleDansTab(nb, t)
    
            f = c4d.utils.Smoothstep(0.0, 1.0, f)
    
            return (1.0 - f) * pts[a] + f * pts[b]
    Dernière modification par César Vonc ; 28/01/2018 à 23h18.

  2. #32
    Pilier Avatar de Floc
    Date d'inscription
    novembre 2012
    C4D version
    R15 Studio
    OS
    WindOSX
    Messages
    1 617
    Vraiment super cool tout ces "snippets"

    Pour le Git ca se passe comment ?
    J'ai vu les bases pour utiliser Git. Faut dire que le tutorial de bitbucket est super bien fait. Pour l'aspect manips ça devrait aller. Par contre pour les "us et coutumes" là, j'ai aucune idée de comment ça se passe.
    Admettons que je veuille rajouter des fichiers, je crée un nouveau repository (depot) sur ton compte ?
    Si oui il faut le faire au niveau de c4d ?
    Je me suis créé un compte bitbucket histoire de tester un peu. Il faut quand même un mot de passe pour acceder. Est ce que celui de mon compte suffit ?

    Bon je demande ça car je pourrai éventuellement, si ca intéresse, créer une section plus basique genre orienté débutants ou scripteurs occasionnels. Comme moi quoi . Un genre de mémo pour les opérations de base.

    Et au fait c'est bien le même dépot communautaire pour les projets open source dont tu parlais dans la discussion "deformateurs UV" ou c'est deux "projets" différents ?

  3. #33
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Aah c'est chouette de te voir te lancer dedans !


    Tu peux me filer ton identifiant bitbucket ? J'ai créé un groupe FC4D et tu pourras créer ton dépôt dedans.


    J'ai mis le dépôt sur https://bitbucket.org/fc4d/voncutils du coup. Ce sera celui à retenir pour ce projet.


    On va mettre les projets communautaires dans cette équipe :
    https://bitbucket.org/fc4d/



    Une fois que t'as installé Git, tu vas dans le dossier de là où tu veux récupérer le projet et tu fais clic droit > Git bash here.

    Ensuite :

    git remote add origin https://CesarVonc@bitbucket.org/fc4d/voncutils.git
    git pull origin master

    La première ligne ajoute l'adresse du dépôt, la seconde télécharge les données.
    Il va sûrement te demander une fois ton mot de passe Bit bucket.


    Pour créer un dépôt, créés le d'abord sur https://bitbucket.org/fc4d/ puis :

    Dans le dossier de ton projet : Clic droit > Git bash here

    git init
    git remote add origin [adresse du dépôt (repository) que te donne bitbucket quand tu en créés un]
    git add -A (pour ajouter tous tes fichiers à envoyer, ou git add [nomdufichier] pour être plus spécifique)
    git commit -m "Initialisation du projet blabla"
    git push origin master (balance les fichiers dans ton dépôt)


    Pour mettre à jour un dépôt, Clic droit > Git bash here :

    git status (pas obligé, à faire quand tu veux pour voir les fichiers modifiés, ajoutés, "stagés" ou non)

    git add -A (pour ajouter tous tes fichiers à envoyer, ou git add [nomdufichier] pour être plus spécifique)
    git commit -m "Court message expliquant tes modifs"
    git pull origin master (pour récupérer sur la branche master les éventuelles modifs faites par un tiers)
    git push origin master (pour balancer tes modifs)


    On verra après les branches, les tags, pour l'instant y a pas besoin.


    Avant de faire quoi que ce soit dans git, renseigne ton nom et ton adresse mail sinon il risque de t'envoyer balader au premier push que tu voudras faire :

    git config --global user.email "ton_adresse@mail.fr"
    git config --global user.name "Floc"


    Si tu veux que git ignore certains fichiers, créés un fichier .gitignore et écris sur chaque ligne la règle de fichier à ignorer (genre *.txt pour ignorer tous les fichiers txt du répertoire racine du projet, mesvideos/toutenuesurlaplage.mp4 pour exclure un fichier en particulier)

    Si ton windows t'interdit de créer un fichier sans nom : clic droit > git bash here :

    touch .gitignore
    Dernière modification par César Vonc ; 29/01/2018 à 22h46.

  4. #34
    Pilier Avatar de Floc
    Date d'inscription
    novembre 2012
    C4D version
    R15 Studio
    OS
    WindOSX
    Messages
    1 617
    Merci pour toutes ces infos
    mon identifiant bitbucket est : Fred_lc

    Et juste histoire d'etre sur que j'ai bien compris :
    Le dépôt "memo pour scripteurs du dimanche" ca serait sur codevonc.
    Et le dépôt "texture Bombing" par exemple ce serait sur FC4D (je dis bien par exemple parce que pour l'instant l'écriture de plug-in j'en chie un peu )

  5. #35
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Non, tout va sur FC4D, même ton mémo pour scripteurs du dimanche. On corrigera tes scripts si y a besoin, c'est le but.


    Le dossier Code Vonc sera juste pour moi. Ou pour vous quand je créerai ma propre communauté, un jour peut-être.


    Je t'ai ajouté à l'équipe FC4D. Tu peux normalement y créer ton dépôt, maintenant.
    Dernière modification par César Vonc ; 29/01/2018 à 23h17.

  6. #36
    Pilier Avatar de Floc
    Date d'inscription
    novembre 2012
    C4D version
    R15 Studio
    OS
    WindOSX
    Messages
    1 617
    ok

    Oui corriger mes scripts ce sera surement inévitable

    bon je tente la création du depot.

    [edit] je vais peut etre préparer un peu de contenu avant
    Dernière modification par Floc ; 29/01/2018 à 23h32.

  7. #37
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Petite mise à jour avec l'ajout de l'interpolation par b-spline.

    Imaginez un tableau de points pts, renseignez une valeur entre 0 et 1 pour récupérer la position du point sur la courbe déterminée par ce tableau.

    Notez que ça peut être un tableau de points comme un tableau de couleurs, de flottants ou autre.

    Code:
    def InterpoleBezierQuadratique(pts, nb, t) :
            """
                Interpole selon la courbe de Bézier Quadratique une valeur dans un tableau de données
    
                Paramètres :
                    pts (liste de Vector ou de float) - Liste des points de contrôles
                    nb (int) - Taille du tableau
                    t (float) - Facteur d'interpolation, entre 0.0 et 1.0
    
                Renvoie :
                    (Vector ou float) - La valeur interpolée dans le tableau
            """
    
            if nb <= 2 :
                return VoncUtils.InterpoleLineaire(pts, nb, t)
    
            nbU = nb - 1
            nbT = nb - 3
            nbU2Inv = 1. / (nbU * 2)
    
            tf = (t - nbU2Inv) * nbU
    
            i0 = int(tf)
            i1 = i0 + 1
            i2 = i1 + 1
    
            if nb == 3 :  # 3 points
                f = t
                p0 = pts[0]
                p1 = pts[1]
                p2 = pts[2]
    
            elif i0 == 0 :  # Début
                f = (tf + 0.5) / 1.5
                p0 = pts[i0]
                p1 = pts[i1]
                p2 = (pts[i1] + pts[i2]) * .5
    
            elif i0 >= nbT :  # Fin
                f = (tf - nbT) / 1.5
                i0 = nbT
                i1 = i0 + 1
                i2 = i1 + 1
                p0 = (pts[i0] + pts[i1]) * .5
                p1 = pts[i1]
                p2 = pts[i2]
    
            else :  # Milieu
                f = tf - i0
                p0 = (pts[i0] + pts[i1]) * .5
                p1 = pts[i1]
                p2 = (pts[i1] + pts[i2]) * .5
    
            return VoncUtils.CourbeBezierQuadratique(p0, p1, p2, f)
    Code:
        def CourbeBezierQuadratique(p0, p1, p2, t) :
            """
                Courbe de Bézier Quadratique
    
                Paramètres :
                    p0 (Vector ou float) - Premier point
                    p1 (Vector ou float) - Deuxième point
                    p2 (Vector ou float) - Troisième point
                    t (float) - Facteur d'interpolation entre 0.0 et 1.0
    
                Renvoie :
                    (Vector ou float) - Le point sur la courbe
            """
    
            t1 = 1.0 - t
            return t1 * t1 * p0 + 2.0 * t * t1 * p1 + t * t * p2

Discussions similaires

  1. Tuto vidéo Python - 02 Introduction au SDK python
    Par gr4ph0s dans le forum Xpresso/Programmation
    Réponses: 7
    Dernier message: 13/04/2019, 09h11
  2. Déformateur Utilitaires
    Par César Vonc dans le forum Plugins made in FC4D
    Réponses: 6
    Dernier message: 09/07/2017, 18h35
  3. [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
  4. Tuto vidéo Python - 01 Introduction Au python
    Par gr4ph0s dans le forum Xpresso/Programmation
    Réponses: 8
    Dernier message: 09/09/2016, 17h07
  5. Foire aux utilitaires OSX
    Par NiKo dans le forum Le saloon
    Réponses: 5
    Dernier message: 17/03/2008, 19h22

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