Its possible to change that's median (global) value trough script?
-
1$\begingroup$ The question is a bit unclear. Are you looking to transform the selected faces, so that their median global location will be some other xyz vector value? $\endgroup$– TLouskyAug 4, 2021 at 12:48
-
$\begingroup$ yes that's right, i get confused due there are no tooltips if hover on their median value $\endgroup$– CheatPekalonganAug 4, 2021 at 12:54
2 Answers
BMesh version.
For an edit mode script can also use an edit mode bmesh.
Test script, move selected verts such that their mean global location is (1, 0, 0)
import bpy
import bmesh
from mathutils import Vector
coord = Vector((1, 0, 0))
space = 'GLOBAL'
context = bpy.context
ob = context.edit_object
mw = ob.matrix_world
coord = coord if space == 'LOCAL' else mw.inverted() @ coord
me = ob.data
bm = bmesh.from_edit_mesh(me)
verts = [v for v in bm.verts if v.select]
# need at least one selected
o = sum((v.co for v in verts), Vector()) / len(verts)
bmesh.ops.translate(
bm,
verts=verts,
vec= coord - o
)
bmesh.update_edit_mesh(me)
You should calculate the midpoint manually, then the difference vector that moves vertices and finally move selected parts in local coordinates because blender stores vertex-locations in local coordinates.
this code does such work: (just enter your desired value into world_pos
variable)
import bpy
from mathutils import Vector as vec, Matrix as mat
# this is your input world position for center
world_pos = vec((4,0,0))
def move_center(world_pos:vec):
obj = bpy.context.object
bpy.ops.object.mode_set(mode='OBJECT')
selected_verts = [v for v in obj.data.vertices if v.select]
print(selected_verts)
if len(selected_verts) == 0:
return
center_local = vec((0,0,0))
for v in selected_verts:
center_local += v.co
center_local /= len(selected_verts)
local_pos = obj.matrix_world.inverted() @ world_pos
dif = local_pos - center_local
for v in selected_verts:
v.co += dif
bpy.ops.object.mode_set(mode='EDIT')
if __name__ == "__main__":
move_center(world_pos)
-
$\begingroup$ thanks for your answer, i just run that's script in edit mode with selected face but get error, prnt.sc/1jcnv03 it seem the script doesn't work on mine could you please clarify or edit your answer? $\endgroup$ Aug 5, 2021 at 8:02
-
$\begingroup$ @cheatPKL check this one out $\endgroup$ Aug 5, 2021 at 8:48
-
$\begingroup$ thank you, now its work as i wanted $\endgroup$ Aug 5, 2021 at 12:34