Get the latest Blender, older versions, or experimental builds.
Stay up-to-date with the new features in the latest Blender releases.
Access production assets and knowledge from the open movies.
Documentation on the usage and features in Blender.
Latest development updates, by Blender developers.
Guidelines, release notes and development docs.
A platform to collect and share results of the Blender Benchmark.
The yearly event that brings the community together.
Support core development with a monthly contribution.
Perform a single donation with more payment options available.
#!BPY
"""
Name: 'Mesh Editing'
Blender: 243
Group: 'ScriptTemplate'
Tooltip: 'Add a new text for editing a mesh'
from Blender import Window
import bpy
script_data = \
'''#!BPY
Name: 'My Mesh Script'
Group: 'Mesh'
Tooltip: 'Put some useful info here'
# Add a licence here if you wish to re-distribute, we recommend the GPL
from Blender import Scene, Mesh, Window, sys
import BPyMessages
def my_mesh_util(me):
# This function runs out of editmode with a mesh
# error cases are alredy checked for
# Remove these when writing your own tool
print me.name
print 'vert count', len(me.verts)
print 'edge count', len(me.edges)
print 'face count', len(me.faces)
# Examples
# Move selected verts on the x axis
for v in me.verts:
if v.sel:
v.co.x += 1.0
# Shrink selected faces
for f in me.faces:
if f.sel:
c = f.cent
for v in f:
v.co = (c+v.co)/2
def main():
# Gets the current scene, there can be many scenes in 1 blend file.
sce = bpy.data.scenes.active
# Get the active object, there can only ever be 1
# and the active object is always the editmode object.
ob_act = sce.objects.active
if not ob_act or ob_act.type != 'Mesh':
BPyMessages.Error_NoMeshActive()
return
# Saves the editmode state and go's out of
# editmode if its enabled, we cant make
# changes to the mesh data while in editmode.
is_editmode = Window.EditMode()
if is_editmode: Window.EditMode(0)
Window.WaitCursor(1)
me = ob_act.getData(mesh=1) # old NMesh api is default
t = sys.time()
# Run the mesh editing function
my_mesh_util(me)
# Restore editmode if it was enabled
if is_editmode: Window.EditMode(1)
# Timing the script is a good way to be aware on any speed hits when scripting
print 'My Script finished in %.2f seconds' % (sys.time()-t)
Window.WaitCursor(0)
# This lets you can import the script without running it
if __name__ == '__main__':
main()
'''
new_text = bpy.data.texts.new('mesh_template.py')
new_text.write(script_data)
bpy.data.texts.active = new_text
Window.RedrawAll()