Jump to content

Moving this instance moves them all.


Peter M. Gruhn
 Share

Recommended Posts

I have a room full of bookshelves. I created them with instances. If I move one bookshelf, all the bookshelves move. It's like I was in poly edit move moving an element. But I'm not. Only the one instance highlights when I select it.

 

Any clues why this might be happening? How to make it stop?

Link to comment
Share on other sites

I don't have the time right now to check, but I think:

 

Each whole shelving unit (case) was created in AutoCAD as a single block.

In Max I move one shelf (second one up) and the same shelf in every case moves.

There are mysterious invisible Block objects in my model.

 

So the shelf I move is an element of the case block. Exactly how this is handled I don't know and for this project I'm just not using blocks any more. They have caused too many annoyances. I figure there's probably a right way to use them and I'm not doing that.

 

No, de-instancing would be a bad idea.

Link to comment
Share on other sites

This frequently happens with autocad blocks, and it's because the transform controllers are instanced. This can be done separately from object instances, for example you can have two different objects that both have instanced controllers between the two, or you can have two instanced objects with un-instanced controllers (which is usually the case, and is why instanced objects can be put in different places, etc). Just as with instanced objects, their names or modifiers showing bold text in the modifier panel, if you move over to the motion tab of the command panel the controller text will show bold as well.

 

The manual method to instance/un controllers is through the curve editor, you can right click on the controller and say copy, and then when you paste it on another track you can choose to instance it. Once it's an instanced controller, "Make Unique" will be available to select form the right click menu. You can also uninstance controllers outside of the curve editor via the motion tab by re-assigning the same controller type.

 

The fastest method to do this multiple times, is of course through script. This script resets the controllers for all objects in the scene to the standard Position_Rotation_Scale controller

 

for i in objects do i.transform.controller = PRS()

 

As an additional option, I'm sure there are a number of different scripts that wrap similar functionality around this concept, one I know of is DWG_Cleanup from Jon Seagull.

 

Also, just for your info, the reason that linking them scatters their positions, goes back to the instanced controllers also.

Short version: Uninstance the controller prior to unlinking and you'll be good.

Long version: All hierarchical transform data is calculated based on the relative positions to the parent. When you unlink one object from it's parent, Max tries to keep that object in the same position in world space that it was when it was linked. In order to do that, it's position values have to change (because those are calculated relative to it's parent. Without a parent object, it's parent becomes the 'world') Again, since the controller is instanced, when that value changes, it changes on all the other instances of that controller. Usually with blocks, the objects underneath the blocks are at 0,0 relative to their block parent, unlink it and now it's some other amount away from origin. So now all the other objects get moved that miscellaneous amount away from their parent blocks too, seemingly 'scrambling' the position info.

Edited by SnipeyX
Link to comment
Share on other sites

  • 11 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...