0
$\begingroup$

In Pose Mode, there is a really convenient way to select the prev/next bone with [ and ] and accumulate their selection holding ⇧ Shift.

In Edit Mode, when working with path, line, or plane, there is a really obvious prev/next vertex relative to a currently selected vertex. However, there appears to only be a ⌃ Ctrl +, ⌃ Ctrl - that accumulates both the next and prev vertices in the selection. There's also no way to simply advance the selection to the next vertex.

Is there any way to make vertex selection behave more like pose mode's bone selection? Any plugins addressing the limitation?

$\endgroup$
2
  • $\begingroup$ Do you mean Ctrl+Numpad+ and Ctrl+Numpad- in Edit mode to select more/less? Is Shift+Ctrl+Numpad+ to select the next active vertex when you have selected a pair that what you're looking for? $\endgroup$
    – Blunder
    Jan 10, 2022 at 14:39
  • $\begingroup$ Thanks for clarifying. I don't mean Ctrl + Numpad plus or minus. I only want one vertex selected at a time and am only looking to advance to the vertex next to the currently selected vertex. Shift + Ctrl + Numpad + seems to only work when 2 or more vertices are initially selected. Also, this appears to accumulate selected vertices, whereas I only want to have one vertex selected at any time. $\endgroup$
    – tester
    Jan 10, 2022 at 18:11

2 Answers 2

0
$\begingroup$

The problem is, what is the next vertex? Vertices aren't ordered the same way that bones are. There's no hierarchy of vertices.

I think you may like the "select loop inner region" and "select boundary loop" operations. The first of these selects all the vertices enclosed by a selection (to the extent that Blender is able to figure out what "enclosed" means) while the second selects all vertices at the edge of a selection. For me, I tend to use these from the searchbar, but they're also available in edit mode 3D's select->select loops submenu.

Using ctrl +/- and these operations, as well as a few more (select linked, hide selection get frequent use, they work great in conjunction with each other) I'm rapidly able to select what it is I want selected. I think you'll feel the same way.

$\endgroup$
2
  • $\begingroup$ I really appreciate your answer and I'll research those selection techniques. I left an answer below that achieves what I was looking for when moving to the next/prev vertex (blender.stackexchange.com/a/249818/70346). Next and Prev are determined by looking at the mesh's array of vertices. Obviously less useful on a dense mesh, but really intuitive when extruding from a single vertex and using skin modifier (requires key remapping of course) $\endgroup$
    – tester
    Jan 10, 2022 at 23:59
  • 1
    $\begingroup$ @tester I can see how that would be useful when dealing with strings. For dealing with surfaces, index is probably a less useful identifier. $\endgroup$
    – Nathan
    Jan 11, 2022 at 0:26
0
$\begingroup$

Update: I made a free Addon that helps with this problem. Check it out here:

https://github.com/dancrew32/blender_vertex_traversal


Here's a short script that tries to advance to the next vertex or previous vertex. I'll update this with a link to an actual addon soon.

import bpy


def get_vertex_data():
    bpy.ops.object.mode_set(mode = 'OBJECT')
    obj = bpy.context.active_object
    bpy.ops.object.mode_set(mode = 'EDIT') 
    bpy.ops.mesh.select_mode(type = 'VERT')
    current_vertex_index = 0
    vertices_length = len(obj.data.vertices)
    for key, value in obj.data.vertices.items():
        if value.select:
            current_vertex_index = key   
    return {
        'current_vertex_index': current_vertex_index,
        'vertices_length': vertices_length,
    }


def select_next_vertex():
    data = get_vertex_data()
    obj = bpy.context.active_object
    bpy.ops.mesh.select_all(action='DESELECT')
    bpy.ops.object.mode_set(mode='OBJECT')
    next_vertex_index = 0 if data['current_vertex_index'] + 1 >= data['vertices_length'] else data['current_vertex_index'] + 1
    obj.data.vertices[next_vertex_index].select = True
    bpy.ops.object.mode_set(mode='EDIT') 
  

def select_prev_vertex():
    data = get_vertex_data()
    obj = bpy.context.active_object
    bpy.ops.mesh.select_all(action='DESELECT')
    bpy.ops.object.mode_set(mode='OBJECT')
    prev_vertex_index = data['vertices_length'] - 1 if data['current_vertex_index'] - 1 < 0 else data['current_vertex_index'] - 1
    obj.data.vertices[prev_vertex_index].select = True
    bpy.ops.object.mode_set(mode='EDIT') 


# Select Next Vertex:
select_next_vertex()

# Or Select Prev Vertex
select_prev_vertex()
$\endgroup$

You must log in to answer this question.

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