Community Forum Coding Supporto Python allineare faccia al piano XY via python

Taggato: ,

Stai visualizzando 6 post - dal 1 a 6 (di 6 totali)
  • Autore
    Post
  • #864383
    neptunus
    Partecipante
    @neptunus

    Buongiorno,

    ecco il mio problema, vorrei allineare una faccia di un oggetto(l’oggetto ha solo questa faccia) al piano xy, in maniera tale che tutti i vertici(3) abbiano la componente z uguale.

    Ho calcolato l’angolo con i seguneti comadi, considerando la normale alla faccia e al pinoxy:

    normale_xy=math.Vector([0,0,1])
    angle=face.normal.angle(normale_xy)

    e poi provo a fare la rotazione con:

    bmesh.ops.rotate(
    bm1,
    verts=vertex
    cent=vmin.co,
    matrix=M.Matrix.Rotation(angle, 3, ‘Z’))

    dove vmin è il vertice avente componente minore tra i 3 vertici, vertex i vertici del triangolo, e bm1 il mio bmesh.

    La rotazione avviene ma non ottengo il risultato atteso. Dove sbaglio? Grazie in anticipo.

     

     

     

     

     

    #864384
    BAdmin
    Amministratore del forum
    @blenderitalia

    @mugnozzo

    #864386
    BAdmin
    Amministratore del forum
    @blenderitalia

    Ho spostato la discussione sotto Coding > supporto Pithon

    #864422
    neptunus
    Partecipante
    @neptunus

    Aggiornamento:

    import bpy
    import bmesh
    import math
    import mathutils as M

    # Get the active mesh
    ob = bpy.data.objects[“figura”]
    ob.select_set(state=True)
    me=ob.data

    # Get a BMesh representation
    bm = bmesh.new()   # create an empty BMesh
    bm.from_mesh(me)   # fill it in from a Mesh
    #Get vertex
    vertex=bm.verts
    vertex.ensure_lookup_table()
    #Get edges
    edges=bm.edges
    edges.ensure_lookup_table()

    faces=bm.faces
    faces.ensure_lookup_table()
    face=faces[0]
    for v in vertex:
    print(v.co)
    normale_z=M.Vector([0,0,1])
    angle_z=face.normal.angle(normale_z)
    print(angle_z)
    ob.rotation_euler=[0,0,angle_z]
    me.update()
    vertex=bm.verts
    vertex.ensure_lookup_table()
    for v in vertex:
    print(v.co)

     

    Visivamente, dla layout, l’oggeto ruota(devo verificare che è la rotazione che desidero),  ma se vado a stampare le cordinate dei vertici utilizzando la classe BMesh

    vedo sempre gli stessi valori. Dove sbaglio?

     

    #864441
    Harvester
    Partecipante
    @harvesterAssociato

    Purtroppo, questo sistema di messaggistica sembra non tenere conto di cose come l’indentazione dei paragrafi che sono necessari in uno script in Python, quindi il tutto risulta alquanto “poco leggibile”. Ma non è colpa tua.

    #864452
    neptunus
    Partecipante
    @neptunus

    Vi chiedo scusa, non mi ero reso conto. Ho riscritto tutto il codice da zero e adesso sembra funzionare.

    Grazie.

Stai visualizzando 6 post - dal 1 a 6 (di 6 totali)
  • Devi essere connesso per rispondere a questo topic.