Re: Comparer 2 meshes - script python

Posté par dono le 15/2/2017 12:25:16
Waouh, impressionnant ton script Matpi

Je le garde et je le relirai dans quelques temps, quand j'aurais progressé J'ai vu que tu recalcules tout depuis les vertices, balèze !

J'ai fini mon script :

import bpy, bmesh, math

##### Fonctions #####

### Calcule le nombre de vertices d'un objet ###
def nbre_vertices(obj):
    n_vertices = len(obj.data.vertices)
    return n_vertices

### Calcule le nombre de faces d'un objet ###
def nbre_faces(obj):
    n_faces = len(obj.data.polygons)
    return n_faces

### Calcule la surface d'un objet ###
def surface(obj):
    bm = bmesh.new()
    bm.from_mesh(obj.data)
    area = math.fsum(f.calc_area() for f in bm.faces)
    bm.free()
    return area

### Calcule le volume d'un objet ###
def volume(obj):
    bm = bmesh.new()
    bm.from_mesh(obj.data)
    volume = bm.calc_volume()
    bm.free()
    return volume              




##### Compare les meshs #####

### Compare les meshes et crée une instance si ils sont identiques###

obj = bpy.context.selected_objects
nombre_objets = len (obj)

for n in range (0, nombre_objets):
    for m in range (0, nombre_objets):
        if nbre_vertices(obj[n]) == nbre_vertices(obj[m]) and n!=m:
            if nbre_faces(obj[n]) == nbre_faces(obj[m]):
                if round(volume(obj[n]),5) == round(volume(obj[m]),5):
                    if round(surface(obj[n]),5) == round(surface(obj[m]),5):
                        obj[n].data = obj[m].data


print("biiiiiiiiiiiiiim")



La comparaison des meshs se passent bien ! Il y avait juste un "détail" que je n'avais pas prévu Si je place 2 suzannes dans la scene, que je fais une rotation sur une d'elles, et que j'applique la transformation, le script détecte bien que c'est le meme mesh, mais au moment de l'instanciation, bien sûr, il remet le mesh sans sa rotation

Je continue à chercher !

Cette contribution était de : http://blenderclan.tuxfamily.org/html/newbb/viewtopic.php?forum=2&topic_id=46935&post_id=563454