Fun Fact: The English do not have a derogatory slang term for the Belgians, or Dutch, but have many for themselves.
Some other facts to consider:
In order to move, rotate, or scale geometry in Edit mode we need a reference location, that has 3 mutually normal axes and a 3D location.
This point needs to be able to be moved relative to the selected geometry, so, for example, some geometry can be rotated about a point other than the median of that geometry.
That is currently provided by the 3D cursor, but the cursor cannot be moved conveniently and universally, e.g. relative to some selected geometry at a distance and angle in the view plane and it has no gizmo.
Objects in Object mode may be moved by their gizmo located at the origin of the object.
Rotating the cursor does not facilitate moving geometry along the rotated axes of the cursor, or should I say “I cannot make this happen consistently”.
So, as a proposal what do the wise here think of this:
- Provide the cursor with a gizmo.
- Enable the cursor gizmo to automatically translate the cursor when no geometry is selected.
- Enable the gizmo to automatically translate the geometry when some geometry is selected.
This is then a completely automatic system requiring no user input to switch gizmo operational mode, other than the user selecting, or not selecting, some geometry. It also allows the rotated cursor axes to be used in Edit mode. Alternatively we could add a new “Reference Point” for geometry translation in Edit mode and leave the cursor as is. I am still in favour, in any circumstances, of having a gizmo for the cursor and also being able to move it more universally and precisely.
The position of this “Reference Point” could be automatically determined by the “Pivot Point” mode. so in “3D Cursor” mode, it appears at the 3D cursor location and otherwise it appears at the geometry median point, or at active element, etc. This would be consistent with the current methods.
Cheers, Clock.
PS. Could we add a “Distance At Angle” option for gizmos, so this option is universally available? This would operate in View Plane orientation, whatever that happens to be - the maths for this is not difficult and the coding is neither complex, nor lengthy.
This code does the rotational translation from Global to View Plane orientation:
def viewCoords(x_loc,y_loc,z_loc):
areas = [a for a in bpy.context.screen.areas if a.type == 'VIEW_3D']
if len(areas) > 0:
vm = areas[0].spaces.active.region_3d.view_matrix
vm = vm.to_3x3().normalized().inverted()
vl = Vector((x_loc,y_loc,z_loc))
vw = vm @ vl
return vw
else:
return Vector((0,0,0))
And this one goes the other way:
def viewCoordsI(x_loc,y_loc,z_loc):
areas = [a for a in bpy.context.screen.areas if a.type == 'VIEW_3D']
if len(areas) > 0:
vm = areas[0].spaces.active.region_3d.view_matrix
vm = vm.to_3x3().normalized()
vl = Vector((x_loc,y_loc,z_loc))
vw = vm @ vl
return vw
else:
return Vector((0,0,0))