OSArch Community

For those times your dimension string text flips upside down, here's a little script to reverse the

  1. T

    For those times your dimension string text flips upside down, here's a little script to reverse the vertices of the dimension, so the text reads correctly again.

    
    import bpy
    
    import bmesh
    
    
    obj = bpy.context.edit_object
    
    bm = bmesh.from_edit_mesh(obj.data)
    
    
    # Find the selected edge loop
    
    edges = [e for e in bm.edges if e.select]
    
    verts = []
    
    if edges:
    
        edge = edges[0]
    
        v1, v2 = edge.verts
    
        visited = {v1}
    
        verts.append(v1)
    
        current = v1
    
    
        while True:
    
            link_edges = [e for e in current.link_edges if e in edges]
    
            next_vert = None
    
            for e in link_edges:
    
                other = e.other_vert(current)
    
                if other not in visited:
    
                    next_vert = other
    
                    break
    
            if not next_vert:
    
                break
    
            visited.add(next_vert)
    
            verts.append(next_vert)
    
            current = next_vert
    
    
        # Reverse the order by duplicating vertices and reassigning edges
    
        for i in range(len(verts)//2):
    
            verts[i].co, verts[-1-i].co = verts[-1-i].co.copy(), verts[i].co.copy()
    
    
    bmesh.update_edit_mesh(obj.data)
    
    
  2. T

    Made it a small plugin. AI was involved. :)

    
    bl_info = {
    
        "name": "Reverse Polyline Vertices",
    
        "author": "ChatGPT + Ryan",
    
        "version": (1, 0),
    
        "blender": (2, 80, 0),
    
        "location": "Mesh > Vertices > Reverse Polyline Vertices",
    
        "description": "Reverses the vertex order along a selected polyline in edit mode",
    
        "category": "Mesh",
    
    }
    
    
    import bpy
    
    import bmesh
    
    
    class MESH_OT_reverse_polyline_vertices(bpy.types.Operator):
    
        """Reverse the vertex positions of a selected polyline"""
    
        bl_idname = "mesh.reverse_polyline_vertices"
    
        bl_label = "Reverse Polyline Vertices"
    
        bl_options = {'REGISTER', 'UNDO'}
    
    
        **@classmethod**
    
        def poll(cls, context):
    
            return (context.active_object is not None and
    
                    context.active_object.type == 'MESH' and
    
                    context.mode == 'EDIT_MESH')
    
    
        def execute(self, context):
    
            obj = context.edit_object
    
            bm = bmesh.from_edit_mesh(obj.data)
    
    
            edges = [e for e in bm.edges if e.select]
    
            if not edges:
    
                self.report({'WARNING'}, "No selected edges found")
    
                return {'CANCELLED'}
    
    
            verts = []
    
            edge = edges[0]
    
            v1, v2 = edge.verts
    
            visited = {v1}
    
            verts.append(v1)
    
            current = v1
    
    
            while True:
    
                link_edges = [e for e in current.link_edges if e in edges]
    
                next_vert = None
    
                for e in link_edges:
    
                    other = e.other_vert(current)
    
                    if other not in visited:
    
                        next_vert = other
    
                        break
    
                if not next_vert:
    
                    break
    
                visited.add(next_vert)
    
                verts.append(next_vert)
    
                current = next_vert
    
    
            if len(verts) < 2:
    
                self.report({'WARNING'}, "Not enough vertices to reverse")
    
                return {'CANCELLED'}
    
    
            for i in range(len(verts)//2):
    
                verts[i].co, verts[-1-i].co = verts[-1-i].co.copy(), verts[i].co.copy()
    
    
            bmesh.update_edit_mesh(obj.data)
    
            self.report({'INFO'}, "Polyline vertex order reversed")
    
            return {'FINISHED'}
    
    
    def menu_func(self, context):
    
        self.layout.operator(MESH_OT_reverse_polyline_vertices.bl_idname)
    
    
    def register():
    
        bpy.utils.register_class(MESH_OT_reverse_polyline_vertices)
    
        bpy.types.VIEW3D_MT_edit_mesh_vertices.append(menu_func)
    
    
    def unregister():
    
        bpy.types.VIEW3D_MT_edit_mesh_vertices.remove(menu_func)
    
        bpy.utils.unregister_class(MESH_OT_reverse_polyline_vertices)
    
    
    if __name__ == "__main__":
    
        register()
    
    

Login or Register to reply.