[RESOLU] déplier série d'edges en gardant leurs dimensions?

Ici on parle de modélisation

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

Re: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par kagi » 25 Juil 2015, 11:07

De ce que j'ai testé, ça marche plutôt bien, mais il faut que je fasse une courbe orientée en X:

Image

Et le script va l'étirer en Y:

Image

Par contre, si j'oriente ma courbe en Y dès le départ, ça foire:

Image
Image
Avatar de l’utilisateur
kagi
 
Message(s) : 277
Inscription : 19 Juil 2015, 09:03

Re: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par lapineige » 25 Juil 2015, 11:10

Oui j'ai aussi fait des tests, j'ai été bête, mon code ne marche que si les vertices ont des positions en x (dé)croissante, sans "retour en arrière". Ex: si le premier vertice est positionné sur l'axe x en 0, le second à 2, le troisième à 5, ça marche. Si le troisième est à 1, il va le compter avant le second, et ça foire.
J'ai mal pensé mon truc, je tri seulement le long des X (ça me paraissait simple et correct dans mon exemple, mais c'est pas généralisable).
Comme au final il n'y a qu'une longue série de vertices, je fait itérer le long de cette série, ça marchera mieux.

Et en plus de ça y'a une incohérence, je cale tout ça sur l'axe Y ^^
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: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par jemian » 25 Juil 2015, 14:18

Si tu transformais ta courbe en closh et que tu la suspendais d'un bout
Elle devrait se déplier toute seule, non?
Avatar de l’utilisateur
jemian
 
Message(s) : 2795
Inscription : 03 Fév 2014, 01:52
Localisation : Brest

Re: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par lapineige » 25 Juil 2015, 14:20

jemian a écrit :Si tu transformais ta courbe en closh et que tu la suspendais d'un bout
Elle devrait se déplier toute seule

Ah pas mal pas mal. C'est pas ultra pratique, mais effectivement ça marcherai.

Bon sinon normalement j'ai corrigé mes conneries:
Image
(bon j’ai pas trop testé, j'ai pas le temps)

Code : Tout sélectionner
import bpy
import bmesh
from math import sqrt

obj = bpy.context.object
bm = bmesh.from_edit_mesh(obj.data)

axis = 0

bpy.ops.mesh.select_all(action='DESELECT')

for i, vert in enumerate(bm.verts):
    if i == 0:
        max_dist_x = sqrt( vert.co[0]**2  + vert.co[1]**2 )
        max_index = 0
    if sqrt( vert.co[0]**2  + vert.co[1]**2 ) > max_dist_x:
        max_dist_x = sqrt( vert.co[0]**2  + vert.co[1]**2 )
        max_index = i
bm.verts[max_index].select = True

list_vert_sorted = list()
for i in range(len(bm.verts)):
    if i == 0:
        list_vert_sorted.append(bm.verts[max_index])
        continue
    bpy.ops.mesh.select_more()
    selected_verts = [v for v in bm.verts if v.select]
    last_vert = [v for v in bm.verts if v.select and not v in list_vert_sorted][0]
    list_vert_sorted.append(last_vert)

for idx_vert in range(len(list_vert_sorted)):
    if idx_vert == 0:
        dist = sqrt( (list_vert_sorted[idx_vert].co[0] - list_vert_sorted[idx_vert+1].co[0])**2 + (list_vert_sorted[idx_vert].co[1] - list_vert_sorted[idx_vert+1].co[1])**2 )
        list_vert_sorted[idx_vert].co[1] = 0
    else:
        if not idx_vert == len(list_vert_sorted)-1:
            new_dist = sqrt( (list_vert_sorted[idx_vert].co[0] - list_vert_sorted[idx_vert+1].co[0])**2 + (list_vert_sorted[idx_vert].co[1] - list_vert_sorted[idx_vert+1].co[1])**2 )
        list_vert_sorted[idx_vert].co[1] = 0
        list_vert_sorted[idx_vert].co[0] = list_vert_sorted[idx_vert -1 ].co[0] + dist
        dist = new_dist

obj.data.update()
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: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par lapineige » 25 Juil 2015, 14:39

Et si tu rajoute cette ligne à la fin, tu reste centré sur l'origine:
Code : Tout sélectionner
bpy.ops.object.origin_set(type='GEOMETRY_ORIGIN')


Image

Je t'en fais un panneau avec quelques options (choix de l'axe, etc), puis un add-on. Peut être aujourd'hui si j'ai le temps :)
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: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par kagi » 25 Juil 2015, 15:47

Ouaiiis :mrgreen:
Avatar de l’utilisateur
kagi
 
Message(s) : 277
Inscription : 19 Juil 2015, 09:03

Re: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par lapineige » 25 Juil 2015, 16:01

Ça marche comme il faut ?
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: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par kagi » 25 Juil 2015, 16:18

Le départ et l'arrivée de la courbe sont inversée.

De plus suivant que ta courbe est orientée en X ou en Y, elle est plus ou moins éloignée du centre, mais avec la dernière ligne (celle qui centre le résultat sur l'origine), ça règle le problème: dans les deux cas la courbe se retrouve centrée pareil.
Avatar de l’utilisateur
kagi
 
Message(s) : 277
Inscription : 19 Juil 2015, 09:03

Re: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par lapineige » 25 Juil 2015, 16:28

Le départ et l'arrivée de la courbe sont inversée.

Ça dépend de l'orientation de la courbe, c'est dû à la façon dont je détecte le bout d'une courbe. Qui n'est pas du tout parfaite pour le moment d'ailleurs, si y'a un point avant le bout qui est plus éloigné que lui de l'origine, ça foire.
Désolé, j'ai fait ça à l'arrache, c'est loin d'être bon, mais j'avais pas le temps.
J'améliorerai ça ensuite.


De plus suivant que ta courbe est orientée en X ou en Y, elle est plus ou moins éloignée du centre, mais avec la dernière ligne (celle qui centre le résultat sur l'origine), ça règle le problème: dans les deux cas la courbe se retrouve centrée pareil.

Parce que sans cette ligne il garde la position en X du bout comme référence, et il "déplie" à partir de là.
Ça sera en option ensuite, pour déplier depuis le début, la fin, le centre.
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: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par kagi » 25 Juil 2015, 16:32

Bah depuis le début je teste avec des courbes que je fabrique à partir d'un simple vertex (la nouvelle primitive) depuis le centre et je m'éloigne soit en +X soit en +Y. Donc là, avec ton nouveau script, les courbes sont inversées.
Avatar de l’utilisateur
kagi
 
Message(s) : 277
Inscription : 19 Juil 2015, 09:03

Re: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par lapineige » 25 Juil 2015, 16:42

kagi a écrit :Bah depuis le début je teste avec des courbes que je fabrique à partir d'un simple vertex (la nouvelle primitive) depuis le centre et je m'éloigne soit en +X soit en +Y. Donc là, avec ton nouveau script, les courbes sont inversées.

Je mettrai un option pour changer ce comportement au besoin.
Il inverse car il part du point le plus éloigné de l'origine, et dans le sens +X.

C'est une très mauvaise implémentation, mais dans le cas de Mareck ça peut marcher en déplaçant la courbe par rapport à l'origine. C'est du bricolage, mais j'ai pas eu le temps de chercher comment trouver les points aux extrémités de ces "chaînes de vertices".
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: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par kagi » 25 Juil 2015, 17:13

Prends ton temps pour fignoler ça et faire un truc propre. Tes scripts à lancer à la main font déjà le boulot, et fonctionnent aussi si on utilise des shape keys. Il suffit juste d'ajuster en pivotant le tout.
Avatar de l’utilisateur
kagi
 
Message(s) : 277
Inscription : 19 Juil 2015, 09:03

Re: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par lapineige » 25 Juil 2015, 17:15

kagi a écrit :Il suffit juste d'ajuster en pivotant le tout.

Pas seulement, essaye de faire la même courbe que sur mon image (la forme je veux dire), puis ajoute un point qui revienne vers l'origine. Ça foire.
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: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par kagi » 25 Juil 2015, 18:53

Effectivement, j'ai fait comme tu dis et j'ai obtenu une droite mais les longueurs ne sont pas respectées et un vertex est parti loin dans l'autre sens.
Avatar de l’utilisateur
kagi
 
Message(s) : 277
Inscription : 19 Juil 2015, 09:03

Re: [RESOLU] déplier série d'edges en gardant leurs dimensio

Message par Mareck » 26 Juil 2015, 16:21

Eh! je suis parti 1 jour ou 1 semaine? ^^
C'est énorme.

jemian a écrit :Si tu transformais ta courbe en closh et que tu la suspendais d'un bout
Elle devrait se déplier toute seule, non?

Bonne idée, mais pour avoir ce que je veux il faudrait que j'ajoute une contraintes de rotation pour conserver les informations d'altitudes et un groupe pour pouvoir épingler un vertex. Ça fait beaucoup de choses quand on doit traiter plusieurs tracés gps (une 30aine).


Pour info, si vous testez avec mon tracé gps, c'est une série de points reliés les uns aux autres qui forment une "courbe continu" mais il peut y avoir à un ou 2 endroits un Y avec un point qui part tout seul.
Ce qui entraîne un étirements de ces points.
C'est une action non voulu mais qui me permet d’éliminer ces points facillement^^.

lapineige a écrit :Ça dépend de l'orientation de la courbe, c'est dû à la façon dont je détecte le bout d'une courbe. Qui n'est pas du tout parfaite pour le moment d'ailleurs, si y'a un point avant le bout qui est plus éloigné que lui de l'origine, ça foire.
Désolé, j'ai fait ça à l'arrache, c'est loin d'être bon, mais j'avais pas le temps.
J'améliorerai ça ensuite.


Pour mon utilisation ça marche bien, faudra juste que je sois vigilent sur les autres tracés, que je ne me trouve pas dans ce genre de configuration.
En tout cas si t'en fais un addon, les petites options seront les bienvenues.
Quand je serai un peu plus confort financièrement je t’achèterai tes Lapitools, c'est le moyen le plus simple de te donner quelque chose je pense.

En fait pour faire du code il faut connaitre le language mais aussi gérer un peu les maths.
En tout cas merci pour ce que tu fais.
Graphiste 3D - Site web: http://www.studios-cad.fr/
Avatar de l’utilisateur
Mareck
 
Message(s) : 332
Inscription : 20 Déc 2013, 16:18
Localisation : Alsace

PrécédentSuivant

Retour vers Modélisation

Qui est en ligne ?

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

cron