Comment retourner l'extrusion à l'original

Aug 21 2020

Quelle est la meilleure façon de récupérer l'extrusion que vous avez effectuée sur votre objet?

Ci-dessus n'est qu'un exemple, mais devrait décrire le cas. Et je ne cherche pas de réponse comme: dessiner une nouvelle sphère. De plus, "annuler ( Ctrl+ Z)" n'est pas une option (a remarqué l'erreur de conception trop tard).

Jusqu'à présent, j'ai trouvé deux options:

  1. Je sélectionne tous ces visages et les supprime. Mais ensuite, j'ai un trou sur ma sphère. Je peux remplir le bouchon par Fou Alt+ F, mais la surface n'est plus la même.

  2. Une autre option qui me vient à l'esprit consiste à abaisser cela suffisamment près de la surface, puis à utiliser la fusion des sommets. Mais alors ces deux sommets au milieu de ces six faces ne se fondent nulle part, et là encore, la surface ne semble pas correcte.

Réponses

4 batFINGER Aug 22 2020 at 00:37

Version script.

Annuler l'extrusion le long des normales de face

  • Recherche la normale moyenne de toutes les faces sélectionnées.
  • Recherche la longueur d'arête moyenne des arêtes extrudées.
  • Retraduit tous les sommets
  • Supprime les doubles. (À partir des bords réduits)

En mode édition, sélectionnez les faces, puis exécutez le 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)

Remarques

Une amélioration serait de trouver tous les îlots de face sélectionnés dans la sélection et «non-extrudés» sur une base d'île par île.

C'est "sans extrusion" une extrusion le long de la face normale. Au lieu de la normale de face moyenne, le vecteur défini par l'une des arêtes (ou une moyenne de toutes) conviendrait mieux.

Toute direction de désextrusion

Après l'extrusion, les bords extrudés créés seront tous (AFAIK) le vecteur d'extrusion.

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)

Ajout d'un test sur Suzanne. La suppression des doubles a pour effet de désélectionner une face en fonction de l'arête verte qui a été supprimée .... avoir mis à jour le script pour restaurer la sélection

8 RobinBetts Aug 21 2020 at 03:50

Il s'agit d'une extrusion uniforme, sans mise à l'échelle. Donc..

  • Alt-sélectionnez l'anneau des faces générées, Xsupprimez-les
  • Survolez - Lsélectionnez le patch isolé
  • Avec Snap réglé sur «Vertex», «Active», tout le patch sélectionné et un sommet pratique rendu actif, il suffit de Gremettre le patch en place.
  • Tous les verts sélectionnés, Mfusionner> Par distance.
5 moonboots Aug 21 2020 at 22:08

Supprimez l'extrusion, sélectionnez la boucle du bord du trou, appuyez sur CtrlF> Remplissage de la grille , cela remplira le trou et respectera la topologie (vous pouvez modifier certains paramètres dans la case Opérateur ):

3 RonJensen Aug 21 2020 at 03:57
  1. Définissez l'orientation de la transformation sur "Normal"
  2. Sélectionnez un patch facial extrudé
  3. Appuyez Gpour saisir et Zcontraindre dans la direction normale
  4. Faites de votre mieux pour ramener le patch facial à sa position d'origine (Snap devrait aider, mais je ne peux jamais le faire fonctionner pour moi)
  5. Fusionner les sommets par distance.