Way to move objects to a specific Y location

Hi!

As you can tell, I’m a total newbie of Blender… However I’m loving it already!

I did a search, but couldn’t find info about this:

How can I quickly move all objects to the same location? I’m trying to model a keyboard and some of the letters are too much above the actual keys, because I messed it up somehow. So now I’m simply looking for an easy way to get all of those letters to the same Y location, so that they appear to be glued on the keys, not flying above them.

I tried to select them all and type in a value in the transform properties dialogue box, but it did not move them all to the same location, it seems like they are moving all together so that the space between the missplaced letters remains the same and they are moving as a group.

Sorry to make this sound difficult, my problem really is simple: how do I get all objects to a same location?

ANY help would be very much appreciated! Thanks and sorry! http://www.blender3d.org/forum/images/smiles/icon_smile.gif

Where an object is depends on it’s center’s location. Select an object, press ‘Center New’ under the Mesh box and move it wherever you want it.

Go out of edit mode by pressing tab, then press N. This brings up the numeric X Y and Z values for everything to do with your object. Click on a few arrows to see how they behave, or type in some numbers.

Move one of the objects to the desired location.

While it’s still selected, select all the rest of the objects you want to move to that location (SH-RMB or B(ox) select … then press CTR-C (Object copy attributes) and choose location.

This only works on OBJECTS. (not in EDIT mode) If you have modelled the keys and the lables as one object, you’ll have to separate them using P (Edit/vertices/Separate) before doing the CTR-C operation

Mike

The transform dialog (N) won’t work on multiple objects, it only affects the last object selected.

Mike

Hi! Thanks for your reply, i appreciate your help!

I think the problem with your solution is, that it will move also the X and Z location of the objects, and I want to move ONLY the Y location to be the same for everything. Or did I missunderstand something?

Thanks!

Sorry, I didn’t read carefully enough :smiley:

I wrote a little Python script that will do that.

Cut and paste the following code into a text window, (Note Python is “indentation sensitive, so to retain the indent, what I’ve found (with Firefox anyway, is if you quote- reply here, then copy the text, the indents are preserved … copy / pasting right off the screen doesn’t work). (Don’t past the CODE /CODE” tags… that’s the website stuff)

To use it, select all the objects to move, with the “target” object selected LAST. You can select all the objects, then SH-RMB select, SH-RMB select to deselect/select the last object

Then hover the mouse over the text window and press Alt-P to run it.

You can use it to copy any combination of Loc, Rot, Scale, just remove the ‘#’ comment symbols where indiicated in the code

Other ways of manipulating transforms, for only a few objects, is to use the N- transform dialog box and hover the mouse over an input field than press CTR-C, then select another object and again hovering the mouse over the field press CTR-V.

Mike

import Blender
from Blender import *
from dd import *

obLast = Object.GetSelected()[0]
dd(obLast)
print 'obLast',obLast.name

obs =  Object.GetSelected()
numObs = len(obs)
print numObs,' objects selected '

newXpos = obLast.LocX
newYpos = obLast.LocY
newZpos = obLast.LocZ

newXRot = obLast.RotX
newYRot = obLast.RotY
newZRot = obLast.RotZ

newXSize = obLast.SizeX
newYSize = obLast.SizeY
newZSize = obLast.SizeZ

print 'newYpos =',newYpos
#print 'newYRot =',newYRot

for x in range(1,numObs):
    print 'x=',x,
    ob = Object.GetSelected()[x]

    #
    #   uncomment / comment  whatever transforms you want to use by removing the '#'
    #   in front of the line
    
    #ob.LocX = newXpos
    ob.LocY = newYpos
    #ob.LocZ = newZpos
    
    #ob.RotX = newXRot
    #ob.RotY = newYRot
    #ob.RotZ = newZRot

    #ob.SizeX = newXSize
    #ob.SizeY = newYSize 
    #ob.SizeZ = newZSize 

    print ob.name,' moved to ',ob.LocX,',',ob.LocY,',',ob.LocZ
    
Redraw()


A much simpler method I use for forcing a group of vertices to the same global plane is just to place the 3d cursor at the target height, then start scaling them (make sure the pivot is set to 3d cursor) , but pressing the MMB to scale in one direction only. The same method will work for objects, but you will have to ALT-S to clear the scale and unflatten them.