I have a mesh with a series of vertex groups, and each vertex group must be resized based on specific proportions (i.e. by a factor of 2, factor of 3, etc.).

The code I've been trying to run is:

enter image description here

However, this scales the entire object.

I've also tried:

enter image description here

However, this creates the attached imageenter image description here

I would like the end result to look like this (which was created by manually selecting the vertices and scaling):enter image description here

Is this at all possible?

Thank you!

  • $\begingroup$ Just a hint: It seems to me that line 17-20 in your first code need three indents less and line 19 is useless. But it will not solve the problem. $\endgroup$
    – Dimali
    Commented Sep 6, 2017 at 20:41
  • 1
    $\begingroup$ It is preferred that you paste your code (prefix each line with 4 spaces to make a code block) rather than use screenshots. $\endgroup$
    – sambler
    Commented Sep 7, 2017 at 5:27
  • $\begingroup$ @Dimali thank you for the hint. I just started coding for this (as in within the past few weeks) so my code may not always be right. I'm curious if you could elaborate on this though. I though that under a for loop there needed to be an indent, and I added line 19 because I realized that the vertex group wouldn't be highlighted unless that line was included. Should it be highlighted without that? Any comments are helpful! As I said, I'm an extreme novice when it comes to this. $\endgroup$
    – user33993
    Commented Sep 7, 2017 at 15:38

1 Answer 1


Using a scale amount of 0.2 means scale to 20% of the current size, to increase the size you want to use 1.2 to be 20% bigger than the existing size.

You can also simplify what you have by using two operators to set the active vertex group and then select the vertices in that group.

import bpy

sfac = 1.2
vgrp = 'Group'

obj = bpy.context.active_object




Part of the issue I see in the first image is that having a mirror modifier causes the scaling to pull away from the centre of the object and I think most of them are going past the halfway point to give you inverted mesh in the middle. One option is to do this without the mirror modifier. The other may be to position the 3D cursor and use it as the pivot point but that may get difficult depending on what else you plan to do.

  • $\begingroup$ Thank you so much for the help! Initially that code didn't work as there was an error selecting the vertex group so I coupled it with my code and it worked! $\endgroup$
    – user33993
    Commented Sep 7, 2017 at 16:06
  • $\begingroup$ def scale(a,index): #selects vertices within vertex group vlist = [] for v in a.data.vertices: for g in v.groups: if g.group == index: vlist.append(v.index) for v in vlist: obj.data.vertices[v].select = True bpy.ops.mesh.select_all(action='DESELECT') bpy.ops.object.vertex_group_set_active() bpy.ops.object.vertex_group_select() bpy.ops.transform.resize(value=(1.2,1.2,1.2)) return vlist $\endgroup$
    – user33993
    Commented Sep 7, 2017 at 16:07
  • $\begingroup$ If this answer solved your problem consider marking it as the solution. $\endgroup$
    – Dimali
    Commented Sep 7, 2017 at 16:12
  • $\begingroup$ @user33993 the vgrp = 'Group' defines the name of the group to resize, you need to adjust that to the proper group name. $\endgroup$
    – sambler
    Commented Sep 8, 2017 at 4:56
  • $\begingroup$ @sambler I had typed the group name as a string (vgrp = 'Radiusdorsalfin' for example) and it still wasn't working for some reason. This was initially how I tried to select vertex groups, but so far the only code that has worked thus far was the code mentioned above. I'm not really sure why, though, because intuitively this should work. $\endgroup$
    – user33993
    Commented Sep 9, 2017 at 20:58

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .