Hello, I am looking for simplest extension .py for add one vertex mesh. Thanks
possible but
just add a plane and remove 3 verts!
happy bl
It either creates a vertex object at cursor location or adds a vertex to an editmesh if appropriate:
import bpy
import bmesh
class MESH_OT_primitive_vert(bpy.types.Operator):
"""Create object with single vertex or add vertex to editmesh"""
bl_idname = "mesh.primitive_vert"
bl_label = "Create Vertex"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
scene = context.scene
ob = context.object
if (ob is not None and
ob.type == 'MESH' and
ob.data.is_editmode):
me = ob.data
bm = bmesh.from_edit_mesh(me)
co = scene.cursor_location - ob.matrix_world.translation
v = bm.verts.new(co)
bmesh.update_edit_mesh(me, False, True)
else:
me = bpy.data.meshes.new("Vert")
me.vertices.add(1)
for ob in scene.objects:
ob.select = False
ob = bpy.data.objects.new("Vert", me)
ob.location = scene.cursor_location
ob.select = True
scene.objects.link(ob)
scene.objects.active = ob
scene.update()
return {'FINISHED'}
def draw_func(self, context):
layout = self.layout
layout.operator(MESH_OT_primitive_vert.bl_idname, text="Vertex")
def register():
bpy.utils.register_class(MESH_OT_primitive_vert)
bpy.types.INFO_MT_mesh_add.append(draw_func)
def unregister():
bpy.utils.unregister_class(MESH_OT_primitive_vert)
bpy.types.INFO_MT_mesh_add.remove(draw_func)
if __name__ == "__main__":
register()
Thanks for reply. RickyBlender, I am adding plane, next merge all selected in center, and done. But if it possible to add to menu Add One Vertex why not do this. CoDEmanX, brilliant script! thanks! There is only one bug in line 17: need to change from ob.data.is_editmode): to ob.mode == ‘EDIT’): Thanks again.
I assign Single Vertex to Shift+Ctrl+A in Object and Edit mode, your script works great. When I am in Object Mode and I add single vertex Blender could be turn me to Edit Mode, and could be select new created vertex - it would be perfect I add PLUGIN icon, is there possible to add own icon to my new Blender menu Add -> Mesh -> Single Vertex?
That’s not a bug, you need to upgrade your Blender, it works in 2.70. is_editmode is required to make it work in all situations, ob.mode conditions can fail if you work with linked duplicates.
You can only use existing icons
import bpy
import bmesh
class MESH_OT_primitive_vert(bpy.types.Operator):
"""Create object with single vertex or add vertex to editmesh"""
bl_idname = "mesh.primitive_vert"
bl_label = "Create Vertex"
bl_options = {'REGISTER', 'UNDO'}
@classmethod
def poll(cls, context):
return (context.object is not None and
context.object.type == 'MESH')
def execute(self, context):
scene = context.scene
ob = context.object
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='DESELECT')
me = ob.data
bm = bmesh.from_edit_mesh(me)
co = scene.cursor_location - ob.matrix_world.translation
v = bm.verts.new(co)
v.select_set(True)
bm.select_history.add(v)
bmesh.update_edit_mesh(me, False, True)
return {'FINISHED'}
def draw_func(self, context):
layout = self.layout
layout.operator(MESH_OT_primitive_vert.bl_idname, text="Vertex", icon='LAYER_ACTIVE')
def register():
bpy.utils.register_class(MESH_OT_primitive_vert)
bpy.types.INFO_MT_mesh_add.append(draw_func)
def unregister():
bpy.utils.unregister_class(MESH_OT_primitive_vert)
bpy.types.INFO_MT_mesh_add.remove(draw_func)
if __name__ == "__main__":
register()
It looks is_editmode = (ob.mode == ‘EDIT’) was not declared in this class for allow to use is_editmode condition, then Blender gives Error “Traceback (most recent call last): File …add_mesh_vertex.py, line 17, in execute ob.data.is_editmode): AttributeError: Mesh object has no attribute is_editmode location: :-1)”. For my Debian latest working compiled Blender with Freestyle from graphicall.org was 2.66.5. I tested higher versions but “error while loading shared libraries: libpython3.3m.so.1.0: cannot open shared object file: No such file or directory”. I must try to compile from source, but for Debian 7.5 latest python is 3.2
In last script in Object mode it turns to Edit Mode (OK) create and select new vertex (OK) in last selected Mesh instead creating new Mesh first. But both scripts are great and fully sufficient for me Thank you.
how come i don’t see new primi in tool panel menu ?
got latest build on win !
thanks
Step by step how to add new option Add -> Mesh -> Single Vertex to Primitive panel. First I save CoDEmanX script as file /scripts/startup/bl_operators/add_mesh_vertex.py then edit file /scripts/startup/bl_operators/init.py I add
"add_mesh_vertex",
after line 26. Next In file /scripts/startup/bl_ui/space_view3d_toolbar.py I add line:
layout.operator("mesh.primitive_vert", text="Single Vertex", icon='PLUGIN')
and
layout.separator()
inside class VIEW3D_PT_tools_add_object (after line 135). After restart blender you should see new primitive object.
My last script adds a new entry to the mesh menu, there’s no need to edit Blender’s layout scripts.
Hello, I tested it again on 2.70a release, when I run script from build id Text Editor both scripts adds new entry, but when I put script to file …/scripts/startup/bl_operators/add_mesh_vertex.py new function Add Single Vertex want not display in menus. Maybe I do something wrong. Anyway I wish to have adding single verticle function on top of Mesh menus. I do simple changes in first script. Now when I am in Object Mode and want to add new vertex function creates new object Vert with one vertex, as you wrote and additionally turn me to Edit Mode and select created vertex. When I am in Edit mode and want to add vertex it deselect selected first, and adds new vertex and additionally select created. In both cases I am ready to start Extrude for create / modify Mesh. In attachement there is Single Vertex function add_mesh_vertex.py.zip for unzip and put to /scripts/startup/bl_operators/. In file /scripts/startup/bl_operators/init.py in _modules you need to add “add_mesh_vertex”, line. For add function on top of menus in file /scripts/startup/bl_ui/space_view3d.py in INFO_MT_mesh_add class need to add layout.operator(“mesh.primitive_vert”, icon=‘LAYER_ACTIVE’, text=“Single Vertex”) and in file /scripts/startup/bl_ui/space_view3d_toolbar.py in classes VIEW3D_PT_tools_add_mesh_edit and VIEW3D_PT_tools_add_mesh need to add col.operator(“mesh.primitive_vert”, text=“Single Vertex”, icon=“LAYER_ACTIVE”) and restart blender. I have question how can I turn HTML code ON?
Attachments
In updated script, now there is automatically turning to Edit Mode, and in Edit Mode it automatically turns to Vertex Select… in my opinion it is comfortable. I hope that Add Single Vertes will be useful for from every that want to convert 2D drawings to 3D models, especially with assigned SHIFT+CTRL+A shortcut key.
Attachments
add_mesh_vertex.py.zip (697 Bytes)
would be interesting to also add a simple line and possible to control if vertical or horizontal!
thanks for sharing
I create simple line by Add -> Mesh -> Single Vertex (or SHIFT+CTRL+A if assigned), next press E, next move mouse vertical or horizontal holding CTRL, and for end LMB - and line is ready. There is also possible to adding verticles by holding CTRL and press LMB, but in this way you can not add vertex too close of manipulator. With E there is not important where the manipulator is, you can draw precisely. Thanks for CoDEmanX, I only add simple changes. There are tutorials for 2.70: http://youtu.be/Ca_4AyTkAR8 and easier for 2.71 http://youtu.be/8LRfiBN8H5U. For my account “HTML code is Off” - how can I turn On on forum?
Or just run this in the text editor
import bpy
bpy.ops.mesh.primitive_vert()