2
$\begingroup$

I'm in edit mode for this. I don't think I need an image for this question.

I just want to move a mesh by selecting ONE of its vertices and typing in the new (x,y,z) coordinates. Selecting the G (Grab) tool doesn't do the job.

Also, while at it, how do you select ONE edge of a mesh, type in a new length for that selected edge, and the rest of the mesh would scale accordingly?

I'm not having any luck finding an add-on for what I need.

$\endgroup$
  • 1
    $\begingroup$ Regarding to your second question I think it's possible using a workaround. Scale your edge as you wish, remember the scale factor, undo action, select whole mesh and press S > n, where n is that factor. $\endgroup$ – Mr Zak Nov 7 '15 at 0:02
  • $\begingroup$ Thank you for that. I actually take existing length divided by desired length, on an actual calculator outside Blender (SMH, but that will do for now), and then scale the whole thing by that factor. $\endgroup$ – Mickael Caruso Nov 7 '15 at 2:17
  • 1
    $\begingroup$ Please post different questions separately, 1 question per post. $\endgroup$ – PGmath Nov 10 '15 at 14:41
3
$\begingroup$

If you move the object in Object Mode, it moves all at once, but if you want to use Edit Mode for whatever reason, you could:

  1. Turn on Proportional Editing (either press O or select it at the bottom of the 3D view) move the vertex by using the 'Grab Tool' (G) and then typing In the coordinates into the 'options panel' of the Toolshelf (T)

  2. Once the vertex is where you want it to be, scroll down in the same panel to the proportional editing section, and increase the 'Proportional Size' until the entire mesh moves to the desired location

$\endgroup$
  • 1
    $\begingroup$ Welcome to Blender.SE! I would recommend setting the falloff type to constant so that the other vertices don't experience minuscule translation. $\endgroup$ – PGmath Nov 10 '15 at 14:35
3
$\begingroup$

You can achieve this with this addon. If you're not sure how to install an addon from file, see this answer.

After you install this addon, if you select an object and go to edit mode, you will see a new tab in the Tool Shelf, called "Vertex Mover". Select a vertex and you'll be able to see its location in world (global) space, and to type in the desired new location for this vertex in the box. When you press the Move button, the entire object will move.

In the example below, you can see it used to move a vertex from (1,1,1) to (2,2,0), and the entire object with it.

enter image description here

bl_info = {
    "name"        : "Move object with Vert",
    "blender"     : (2, 74, 0),
    "version"     : (0, 0, 0, 1),
    "location"    : "3D View > Toolbox",
    "description" : "Move object with Vert",
    "category"    : "Object"
}

import bpy, bmesh
from mathutils import Vector

class VertexMoverPropGroup( bpy.types.PropertyGroup ):
    newLoc = bpy.props.FloatVectorProperty(
        name        = "New Location",
        description = "New location for selected vertex",
        default     = ( 0.0, 0.0, 0.0 ),
        precision   = 2,
        subtype     = 'XYZ',
        unit        = 'LENGTH',
        size        = 3
    )

def get_current_vertex_loc():
    o = bpy.context.object
    if o:
        if o.mode == 'EDIT':
            bm = bmesh.from_edit_mesh( o.data )
            activeElement = bm.select_history.active
            if activeElement and type( activeElement ) == bmesh.types.BMVert:
                return o.matrix_world * bm.select_history.active.co
    return False    

class VertexMover( bpy.types.Operator ):
    """ Move vertex to desired position and object with it """
    bl_idname      = "object.vertex_and_object_mover"
    bl_label       = "Vertex Mover"
    bl_description = "Move vertex to desired position and object with it"
    bl_options     = {'REGISTER', 'UNDO'}

    @classmethod
    def poll( self, context ):
        return get_current_vertex_loc()

    def execute( self, context ):
        o     = context.object
        newLoc = context.scene.vertex_mover_props.newLoc

        offset = Vector( newLoc ) - get_current_vertex_loc()
        o.location += offset

        return {'FINISHED'}

class VertexMoverPanel( bpy.types.Panel ):
    bl_idname      = "VertexMoverPanel"
    bl_label       = "Move objet by vertex"
    bl_category    = "Vertex Mover"
    bl_space_type  = 'VIEW_3D'
    bl_region_type = 'TOOLS'

    @classmethod
    def poll( self, context ): 
        return context.object and context.object.mode == 'EDIT'

    def draw( self, context):
        layout = self.layout
        col    = layout.column()
        props  = context.scene.vertex_mover_props

        vertLoc = get_current_vertex_loc() if get_current_vertex_loc() else [ "N/A" for i in range(3) ]
        col.label( "Current Position" )
        col.label( "X: %s  Y: %s  Z: %s" % tuple( vertLoc ) ) 

        col.prop( props, 'newLoc' )

        col.operator(
            'object.vertex_and_object_mover',
            text = 'Move',
            icon = 'MAN_TRANS'
        )

def register():
    bpy.utils.register_module(__name__)
    bpy.types.Scene.vertex_mover_props = bpy.props.PointerProperty(
        type = VertexMoverPropGroup
    )

def unregister():
    bpy.utils.unregister_module(__name__)
$\endgroup$
1
$\begingroup$

The first wished thing can be done (sort of, is a trick) in this way.

  1. in edit mode, duplicate the vertex with Shift+D.
  2. then separate it (P -> Selection)
  3. in Object mode, parent the original object to the new separated "point" object
  4. now you can move the "point" and the whole object will follow it.

I know is not very practical but it could solve some particular needs.

$\endgroup$
  • $\begingroup$ I think you should clear transformation of the "point" object first before parenting original mesh to it with Alt+S in order this to work as moving to the absolute position. $\endgroup$ – Mr Zak Nov 10 '15 at 13:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.