I am trying to script some object manipulation using the bmesh module.
During steps of this scripting I would like to be able to use the
closest_point_on_mesh function. However I get unexpected results.
A minimal working example looks like this:
import bpy import bmesh from mathutils import Vector bpy.ops.mesh.primitive_ico_sphere_add( subdivisions=1, size=1, location=(0,0,0)) bpy.ops.object.select_pattern(pattern='Icosphere') obj = bpy.context.active_object bpy.ops.object.mode_set(mode='EDIT') bm = bmesh.new() bm.from_mesh(obj.data) # do some stuff to the bmesh bpy.ops.object.mode_set(mode='OBJECT') bm.to_mesh(obj.data) # get a face for testing face = bm.faces # getting the "middle" of the face xyz = Vector((0,0,0)) for v in face.verts: xyz += v.co/3 # the middle of the face print(xyz,'xyz') location,normal,index = obj.closest_point_on_mesh(xyz) # prints 0,0,0. expected the same as xyz three lines above print(location,'location')
I expect the value of location to be the same as (or close to) the value of xyz, but it prints 0,0,0.
What am I doing wrong? Is there a better way of doing this?