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 à 22h18.
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 ?
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 à 21h46.
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 )
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 à 22h17.
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 à 22h32.
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