Select the next point or vertex

Hello everyone,

I have really appreciated the help that I have received so far, it has been great. I am in the process of transitioning from Hexagon to Blender and I have been running into speed bumps along the way.

If I am in edit mode and I go to Vertex or Point Select I can click on a point to select it. In Hexagon this can also be done but then you can press a hotkey and it will go to the next point of the object. This is very helpful when you need to fine tune a curve and just want to move from point to point and adjust.

I have searched all over and cannot find an answer. Is there a way to select a point in Blender and then use a keyboard shortcut to go to the next point?

Not sure exactly if this is what you want, but pressing Control key with the numpad Plus key will select the next vertex (or vertices) along all edges. It also works when you are in edge or face select modes in the edit mode. Also, you can use lasso, circle or box select so maybe some of those selection types would help you.

Alt Click and Ctrl Alt Click
https://i.gyazo.com/767599b51a268484b329e97ab336f85d.gif

Shift Click Then Ctrl Click
https://i.gyazo.com/d12d04374b4a56b4b14dd79e8adbcec8.gif

Checker Select
https://i.gyazo.com/ae9e964d1949655c8ced1038456441a8.gif

Ctrl +(-) Number Pad
https://i.gyazo.com/832bb05f590be4468c7b4d144813a639.gif

Thanks for the replies. These techniques are only growing the selection. I am looking to move to the next point. (point to point single selection) Is this possible?

I think you will need to look for an addon for that. The problem is, how does Blender know which vertex/point you want to select next when there might be any number of adjacent ones to select from?

@Anthony, Yeah I can see that but Hexagon does it just in sequence. Similar to growing a selection it just goes up from there. I will search for an add on or write one myself. Thanks

Interest Ask. Any news in 2019?
Thank.

Wow I can’t believe it’s been 2 years. I’ve learned a lot more about programming since then but haven’t looked into this. Maybe I’ll pick it back up and try to write this add on

Thanks again for the interest. You inspired me to look into it and now I have an addon that works.

bl_info = {
    "name": "Select Next Curve Vertex",
    "author": "James Erickson - ExcelledSoftware and JuhaW from blenderartists",
    "version": (1, 0),
    "blender": (2, 79, 0),
    "location": "VIEW3D > Tool Shelf > zzz",
    "description": "Selects the next point or vertex in a curve",
    "warning": "Only works with curves",
    "wiki_url": "",
    "category": "Selection",
    }


import bpy


def main(context):
		#main code below written by JuhaW from blenderartists.org

    o = bpy.context.object


    sel =  [(i,x) for i in o.data.splines for x,j in enumerate(i.bezier_points) if j.select_control_point]


    for i in sel:
        i[0].bezier_points[i[1]].select_control_point = False


    for i in sel:
        if i[1]+1 < len(i[0].bezier_points):
            i[0].bezier_points[i[1]+1].select_control_point = True
        else:
            i[0].bezier_points[0].select_control_point = True

		#end of normal code all below written by James Erickson

class SelectNextCurveVertex(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "myops.select_next_curve_vertex"
    bl_label = "Select The Next Vertex"


    def execute(self, context):
        main(context)
        return {'FINISHED'}
    
class SelectNextCurveVertexPanel(bpy.types.Panel):
    """Creates a Panel in the Tool Shelf"""
    bl_label = "Select Next Curve Vertex Panel"
    bl_idname = "select_next_vertex_id"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
    bl_category = "zz"
		# draw the panel
    def draw(self, context):
        layout = self.layout

        obj = context.object
				
				#add the labels and controls
        row = layout.row()
        row.label(text="Select Next Vertex", icon='CURVE_DATA')

        row = layout.row()
        row.label(text="Current Selected: " + obj.name)

        row = layout.row()
        row.operator("myops.select_next_curve_vertex")
        
        
        


def register():
    bpy.utils.register_class(SelectNextCurveVertex)
    bpy.utils.register_class(SelectNextCurveVertexPanel)


def unregister():
    bpy.utils.unregister_class(SelectNextCurveVertex)
    bpy.utils.unregister_class(SelectNextCurveVertexPanel)

    

# allow to run from text editor
if __name__ == "__main__":
    register()

Thanks again.

3 Likes

Tell me where to read how to run your plugin?
I will be very grateful!

You need to save the script above as a .py file (python file) After it is saved open Blender and go to User Preferences. Go to Add-ons in User Preferences. and click on Load from file. Select the script that you saved. Click on the checkbox, save user settings and then exit that window.

This plugin and its button are located on in the Tool Shelf under the tab entitled zzz. The add-on works in edit mode with curves only. Let me know if you have any other questions.

1 Like

I see that this post is still getting some likes and I discovered that I had never posted the final code that can be saved as an add-on. This script allows you to go to the next point and the previous point from a click of a button. You can also go into your preferences and select hotkeys for each button. I set mine to 1 and 2 on the top and it has been wonderful when dealing with hundreds of vertices from multiple curves.

Again a big thanks to juhaW for getting me started on this, they were a huge help.

#blender Info
bl_info = {
    "name": "Select Curve Verticies",
    "author": "James Erickson - ExcelledSoftware and JuhaW from blenderartists",
    "version": (1, 0),
    "blender": (2, 79, 0),
    "location": "VIEW3D > Tool Shelf > VtxSel",
    "description": "Selects the next or previous vertex in a curve",
    "category": "Selection"
    }

#import the library
import bpy


#Functions for the vertex selecting

#function 1
def selectNext(context):
		#main code below written by JuhaW from blenderartists.org

    o = bpy.context.object


    sel =  [(i,x) for i in o.data.splines for x,j in enumerate(i.bezier_points) if j.select_control_point]


    for i in sel:
        i[0].bezier_points[i[1]].select_control_point = False


    for i in sel:
        if i[1]+1 < len(i[0].bezier_points):
            i[0].bezier_points[i[1]+1].select_control_point = True
        else:
            i[0].bezier_points[0].select_control_point = True
            
            
            

#function 2
def selectPrev(context):
		#main code below written by JuhaW from blenderartists.org Edits to make Prev by James Erickson

    o = bpy.context.object


    sel =  [(i,x) for i in o.data.splines for x,j in enumerate(i.bezier_points) if j.select_control_point]


    for i in sel:
        i[0].bezier_points[i[1]].select_control_point = False


    for i in sel:
        if i[1]-1 < len(i[0].bezier_points):
            i[0].bezier_points[i[1]-1].select_control_point = True
        else:
            i[0].bezier_points[0].select_control_point = True



		#end of normal code all below written by James Erickson


# Create a class to execute each function

#function 1 Class
class SelectNextCurveVertex(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "myops.select_next_curve_vertex"
    bl_label = "Select Next Curve Vertex"


    def execute(self, context):
        selectNext(context)
        return {'FINISHED'}
    
    
#function 2 Class
class SelectPrevCurveVertex(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "myops.select_prev_curve_vertex"
    bl_label = "Select Prev Curve Vertex"


    def execute(self, context):
        selectPrev(context)
        return {'FINISHED'}
 
 
 #create a panel   
class SelectCurveVertexPanel(bpy.types.Panel):
    """Creates a Panel in the Tool Shelf"""
    bl_label = "Select Curve Vertex Panel"
    bl_idname = "select_vertex_id"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
    bl_category = "VtxSel"
		# draw the panel
    def draw(self, context):
        layout = self.layout

        obj = context.object
				
				#add the labels and controls
        
        #Next Vertex Group
        row = layout.row()
        row.label(text="Select Next Vertex", icon='CURVE_DATA')
        row = layout.row()
        row.operator("myops.select_next_curve_vertex")
        
        #Prev Vertex Group
        row = layout.row()
        row.label(text="Select Prev Vertex", icon='CURVE_DATA')
        row = layout.row()
        row.operator("myops.select_prev_curve_vertex")


#define the register and unregister
def register():
    bpy.utils.register_class(SelectNextCurveVertex)
    bpy.utils.register_class(SelectPrevCurveVertex)
    bpy.utils.register_class(SelectCurveVertexPanel)


def unregister():
    bpy.utils.register_class(SelectNextCurveVertex)
    bpy.utils.register_class(SelectPrevCurveVertex)
    bpy.utils.unregister_class(SelectCurveVertexPanel)

# allow to run from text editor
if __name__ == "__main__":
    register()

Thanks again to anyone’s interest and help.

2 Likes

Does this work for vertices on normal meshes, or just on paths? I remember Maya did this back in 2005, it was so useful.

1 Like

hi everyone
if someone interested here’s the 2.8x version

#blender Info
bl_info = {
    "name": "Select Curve Verticies",
    "author": "James Erickson - ExcelledSoftware and JuhaW from blenderartists",
    "version": (1, 0),
    "blender": (2, 80, 0),
    "location": "VIEW3D > Tool Shelf > VtxSel",
    "description": "Selects the next or previous vertex in a curve",
    "category": "Selection"
    }

#import the library
import bpy


#Functions for the vertex selecting

#function 1
def selectNext(context):
        #main code below written by JuhaW from blenderartists.org

    o = bpy.context.object


    sel =  [(i,x) for i in o.data.splines for x,j in enumerate(i.bezier_points) if j.select_control_point]


    for i in sel:
        i[0].bezier_points[i[1]].select_control_point = False


    for i in sel:
        if i[1]+1 < len(i[0].bezier_points):
            i[0].bezier_points[i[1]+1].select_control_point = True
        else:
            i[0].bezier_points[0].select_control_point = True
            
            
            

#function 2
def selectPrev(context):
        #main code below written by JuhaW from blenderartists.org Edits to make Prev by James Erickson

    o = bpy.context.object


    sel =  [(i,x) for i in o.data.splines for x,j in enumerate(i.bezier_points) if j.select_control_point]


    for i in sel:
        i[0].bezier_points[i[1]].select_control_point = False


    for i in sel:
        if i[1]-1 < len(i[0].bezier_points):
            i[0].bezier_points[i[1]-1].select_control_point = True
        else:
            i[0].bezier_points[0].select_control_point = True



        #end of normal code all below written by James Erickson


# Create a class to execute each function

#function 1 Class
class SelectNextCurveVertex(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "myops.select_next_curve_vertex"
    bl_label = "Select Next Curve Vertex"


    def execute(self, context):
        selectNext(context)
        return {'FINISHED'}
    
    
#function 2 Class
class SelectPrevCurveVertex(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "myops.select_prev_curve_vertex"
    bl_label = "Select Prev Curve Vertex"


    def execute(self, context):
        selectPrev(context)
        return {'FINISHED'}
 
 
 #create a panel   
class SelectCurveVertexPanel(bpy.types.Panel):
    """Creates a Panel in the Tool Shelf"""
    bl_label = "Select Curve Vertex Panel"
    bl_idname = "select_vertex_id"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "VtxSel"
        # draw the panel
    def draw(self, context):
        layout = self.layout

        obj = context.object
                
                #add the labels and controls
        
        #Next Vertex Group
        row = layout.row()
        row.label(text="Select Next Vertex", icon='CURVE_DATA')
        row = layout.row()
        row.operator("myops.select_next_curve_vertex")
        
        #Prev Vertex Group
        row = layout.row()
        row.label(text="Select Prev Vertex", icon='CURVE_DATA')
        row = layout.row()
        row.operator("myops.select_prev_curve_vertex")


#define the register and unregister
def register():
    bpy.utils.register_class(SelectNextCurveVertex)
    bpy.utils.register_class(SelectPrevCurveVertex)
    bpy.utils.register_class(SelectCurveVertexPanel)


def unregister():
    bpy.utils.register_class(SelectNextCurveVertex)
    bpy.utils.register_class(SelectPrevCurveVertex)
    bpy.utils.unregister_class(SelectCurveVertexPanel)

# allow to run from text editor
if __name__ == "__main__":
    register()
1 Like

Hi, thanks for this. Not sure if I am using it correctly! Making a shape key for an eye lid, and would like to position each row of vertices going up the eye lid. Using edge select I select a row and move it to where it should go, and would like to select the next row. Does that seem like correct use of your plugin?

Thanks for your time!

I get this error:

Traceback (most recent call last):
File “C:\Users\Ben and Nate\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\next_vertices.py”, line 76, in execute
selectNext(context)
File “C:\Users\Ben and Nate\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\next_vertices.py”, line 25, in selectNext
sel = [(i,x) for i in o.data.splines for x,j in enumerate(i.bezier_points) if j.select_control_point]
AttributeError: ‘Mesh’ object has no attribute ‘splines’

location: :-1

sorry for the long unnaceptable delay. I wish my plugin worked on meshes. It does not. Its designed to only work with curves. Sorry.

Hi, I created a .py file, it installed but I cannot for the life of me find it in Blender - the UI has changed quite a bit. Where is it lurking? Cheers! :smiley: