Let's say I have these two rings and they even match in vertexcount.

enter image description here

Is there a tool I have overlooked that will bridge them properly into a nice and clean faceloop?

Turning each ring into an edgeloop is good enough, too.

  • $\begingroup$ If there is way to select rings separately then you can fill temporary ngon out of them, remove only face and use edges left after ngon. However this won't work for multiple rings. I think you didn't miss any gui tools, since ones for point clouds are required here (or scripting, or I bet Animation Nodes / Sverchok) $\endgroup$
    – Mr Zak
    Commented Mar 2, 2018 at 20:57
  • $\begingroup$ @MrZak I hate cool comment answers. I cannot properly upvote them. $\endgroup$ Commented Mar 2, 2018 at 21:01
  • $\begingroup$ Hah, but you can upvote comment :) But seriously I'm not going so far to post it since it's not that much of solution to what is shown on your screenshot (2 separate rings of faces). With my way it's like cumbersome selection with Circle select or stuff $\endgroup$
    – Mr Zak
    Commented Mar 2, 2018 at 21:03
  • $\begingroup$ @MrZak select, face, delete, select, face, delete, select, bridge is faster than what I knew, so it counts. In the end it's all about gathering an arsenal of possible combinations. $\endgroup$ Commented Mar 2, 2018 at 21:08
  • $\begingroup$ The way I see it, either the vertex indexes are sequentially ordered so they could easily be connected by a script, or this would require some sort of spacial analysis to determine which point is closer to another and connect it, and would still be prone to failure $\endgroup$ Commented Mar 2, 2018 at 21:36

3 Answers 3


Bmesh approach

  1. Make a convex hull bmesh.ops.convex_hull(...)

  2. Remove all but the outer smallest 2 edges on each vert in hull.

  3. Return to step 1 with interior verts until there are no more.

enter image description here Result of running script on concentric 64 vert circles.

Test Script run in edit mode.

import bpy
import bmesh
context = bpy.context

ob = context.object
me = ob.data
bm = bmesh.from_edit_mesh(me)
verts = bm.verts[:]
while verts:
    ret = bmesh.ops.convex_hull(bm, input=verts)

    ringverts = [v for v in ret['geom'] if isinstance(v, bmesh.types.BMVert) 
            and len(v.link_edges) > 2]

    while ringverts:
        v = ringverts.pop()
        linkedges = v.link_edges[:]
        linkedges.sort(key=lambda e: e.calc_length())
        for e in linkedges[2:]:
    verts = ret['geom_interior']
# bridge edge loops
bmesh.ops.bridge_loops(bm, edges=bm.edges)

  • $\begingroup$ If Ah ain't knowwyn what the lines do Ah ain't cohpyn it. Ah wanna lern. $\endgroup$ Commented Mar 3, 2018 at 15:38

Select all the inner faces with Circle Select or Lasso tool. Press F to create a face, then X and Only Faces to remove the face and leave just the edges. Select the outer vertices and repeat FX. You should now have two loops - simply select all and Bridge Edge Loops.

As an alternative to Bridge Edge Loops, select two adjacent pairs of vertices and remove the two edges between each and join opposite ones to make a ‘C’ shape that almost joins. Select all and Grid Fill. Select the vertices around the gap and F to create the face.

Animated gif showing the process :


  • $\begingroup$ Why Grid Fill instead of Bridge Edge Loops? $\endgroup$ Commented Mar 3, 2018 at 15:36
  • $\begingroup$ @Haunt_House TBH I hadn’t thought of using Bridge Edge Loops originally and was thinking of a way of indicating which pair of vertices should form the ‘start’ of the chain. With Bridge you don’t have any control but using Grid Fill you can set a specific edge. $\endgroup$ Commented Mar 3, 2018 at 18:20
  • Select all A and fill with F
  • Inset twice with I and delete vertices
  • Select all and use the relax operator 2 or 3 times with W then X
  • Scale the innermost edge loop toward the center
  • Use the Circle operator from the Loop Tools add-on on each loop, one at a time by pressing W>L>C

Example Gif: enter image description here

  • $\begingroup$ I like the creativity of that one $\endgroup$ Commented Mar 3, 2018 at 15:36
  • $\begingroup$ @Haunt_House thanks. Not sure why the dv, I was looking for a solution that didn't require any tedious lasso/circle selection. $\endgroup$
    – Timaroberts
    Commented Mar 3, 2018 at 20:54
  • $\begingroup$ the downvote comes probably because it's a solution that destroys any shape there previously was which limits its use a bit. $\endgroup$ Commented Mar 3, 2018 at 22:59

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .