Come riportare l'estrusione all'originale

Aug 21 2020

Qual è il modo migliore per recuperare l'estrusione che hai eseguito sul tuo oggetto?

Sopra è solo un esempio, ma dovrebbe descrivere il caso. E non sto cercando una risposta come: disegna una nuova sfera. Inoltre "undo ( Ctrl+ Z)" non è un'opzione (notato l'errore di progettazione troppo tardi).

Finora ho trovato due opzioni:

  1. Seleziono tutte quelle facce ed elimino. Ma poi ottengo un buco nella mia sfera. Posso riempire il tappo con Fo Alt+ F, ma la superficie non è più la stessa.

  2. Un'altra opzione che mi viene in mente è abbassare questo valore abbastanza vicino alla superficie e quindi utilizzare i vertici di unione. Ma poi quei due vertici al centro di quelle sei facce non si sciolgono da nessuna parte, e di nuovo la superficie non sembra corretta.

Risposte

4 batFINGER Aug 22 2020 at 00:37

Versione script.

Annulla estrusione lungo le normali delle facce

  • Trova la normale media di tutte le facce selezionate.
  • Trova la lunghezza media del bordo dei bordi estrusi.
  • Traduce tutti i vertici all'indietro
  • Rimuove i doppi. (Dai bordi collassati)

In modalità di modifica selezionare le facce, quindi eseguire lo script.

import bpy
import bmesh
from mathutils import Vector

ob = bpy.context.object
me = ob.data

bm = bmesh.from_edit_mesh(me)
faces = [f for f in bm.faces if f.select]
verts = set(v for f in faces for v in f.verts ) # or from selected verts
edges = [e for v in verts for e in v.link_edges
            if not e.select ]
norm = (sum((f.normal for f in faces), Vector()) / len(faces)).normalized()
norm.negate()
d = sum(e.calc_length() for e in edges) / len(edges)

bmesh.ops.translate(
        bm,
        verts=list(verts),
        vec=d * norm,
        )            
bmesh.ops.remove_doubles(
        bm,
        verts=[v for e in edges for v in e.verts],
        dist=1e-5,
        )   
for f in faces:
    f.select_set(True)                 
bmesh.update_edit_mesh(me)

Appunti

Un miglioramento consisterebbe nel trovare tutte le isole facciali selezionate all'interno della selezione e "unextrude" isola per isola.

Questo è "unextruding" un'estrusione lungo la normale faccia. Invece della normale faccia media, il vettore definito da uno qualsiasi (o una media di tutti) i bordi sarebbe un adattamento migliore.

Qualsiasi direzione si disestrude

Dopo l'estrusione, i bordi estrusi creati saranno (AFAIK) tutti il ​​vettore di estrusione.

import bpy
import bmesh
from mathutils import Vector

ob = bpy.context.object
me = ob.data

bm = bmesh.from_edit_mesh(me)
faces = [f for f in bm.faces if f.select]
verts = set(v for f in faces for v in f.verts ) # or from selected verts
edges = [e for v in verts for e in v.link_edges
            if not e.select ]

v0, v1 = sorted(edges[0].verts[:], key=lambda v:v.select)
bmesh.ops.translate(
        bm,
        verts=list(verts),
        vec=v0.co - v1.co,
        )            

bmesh.ops.remove_doubles(
        bm,
        verts=[v for e in edges for v in e.verts],
        dist=1e-5,
        )  
for f in faces:
    f.select_set(True)          
bmesh.update_edit_mesh(me)

Aggiunto un test su Suzanne. La rimozione dei doppi ha l'effetto di deselezionare una faccia a seconda di quale vert del bordo è stato rimosso .... hanno aggiornato lo script per ripristinare la selezione

8 RobinBetts Aug 21 2020 at 03:50

Questa è un'estrusione uniforme, senza ridimensionamento. Così..

  • Alt-seleziona l'anello delle facce generate, Xcancellale
  • Passaggio del mouse: Lseleziona la patch isolata
  • Con Snap impostato su "Vertex", "Active", l'intera patch selezionata e un comodo vertice reso attivo, basta Grimettere la patch in posizione.
  • Tutti i vertici selezionati, Munisci> Per distanza.
5 moonboots Aug 21 2020 at 22:08

Elimina l'estrusione, seleziona il loop del bordo del foro, premi CtrlF> Riempimento griglia , riempirà il foro e rispetterà la topologia (puoi modificare alcuni parametri nel riquadro Operatore ):

3 RonJensen Aug 21 2020 at 03:57
  1. Imposta l'orientamento della trasformazione su "Normale"
  2. Seleziona toppa faccia estrusa
  3. Premere Gper afferrare e Zper vincolare alla direzione normale
  4. Fai del tuo meglio per riportare il cerotto nella sua posizione originale (Snap dovrebbe aiutare, ma non riesco mai a farlo funzionare per me)
  5. Unisci i vertici per distanza.