Extension for 'locking relations between objects'?

Hi there,

For a while I’m imagining a functionality/extension and I’m wondering if something like this already exists or if it would be technically possible to build.

In short: the functionality would ‘lock’ a ‘relation’ between objects (components, faces or edge). If you then change one of the objects, the other one would automatically follow (or after pressing a ‘refresh’ button). I know it’s possible to do this with DC’s, but I’m imagining something more simple, like this:

Example 1:

  1. You select cube A (or another object) and then another cube B.
  2. You press a button that ‘locks’ the distance between cube A and B along the green axis.
  3. If I now move cube A along the green axis, cube B would simply follow (B always follows A, not the other way around).

Example 2:

  1. You select cube A and another cube B.
  2. You press a button that ‘locks’ the top side of cube A and cube B.
  3. If I now increase the height of cube A (along the blue axis), the height of cube B increases by the same distance (B always follows A, not the other way around).

It would be great if this would also work when objects are part of a different group or component.

In case something like this exists (or can be build) I see many powerful possibilities, so I’m curious what your thoughts are! Thanks a lot!

RE Example 1, When you select a group of objects (step 2 it not really a button) and use the edit tools
(like Move, Rotate, Scale and Offset,) the objects will maintain their spatial relationship between one another as they are changed. This is built-in. No extension is required.

This is an ad hoc, per select operation. Ie, the group of “locked” items can change as the user changes the selection set.

To create more persistent “sets of spatially locked items”, select them and make them a group. From then on, you move (or scale, etc.) the group as a whole object.

RE Example 2, I think Fredo has a extension called “Joint PushPull” that can do just this.

But also, it is a native feature of the Push / Pull Tool that after having pulled cube A up, if you then double-click cube B with the Push/Pull cursor, it will be raised to the same as the previous use. (It is kind of a “repeat” feature.)

I need to explain something inherent in SketchUp’s “sketchy” workflow design.

The edit tools like Move use inferencing. The object’s being edited follow the inferencing based upon the cursor and what it is near, relative to the previously chosen base point.

So ALL the objects in the selection set get the same transformation applied to them (be it translation, scaling or rotation.) Ie, none of them are actually following anything other than the inference from the cursor position.


Thank you for your quick reply!
I’m familiar with the basic tools within SketchUp (and DC’s, etc.). Of course the built-in tools can perform the operations I described in my examples, but these are very simple.

The problem is that the built-in features are cumbersome when working with more complex models, especially when objects are related, but part of different groups/components. DC’s only go ‘one level’ up+down so they don’t work when objects are nested more deeply. Moreover, with DC’s you need to ‘program’ the relationship which takes too much time.

Can you give a more detailed example of this use case? I am struggling to understand when it would be necessary to have a constraint across different groups or components.

1 Like

Okay, now I understand.

The native SelectionTool (by design) can only select objects within the active entities edit context.

Usually UX guidelines discourage cross context manipulation as it can confuse the user. However there are some extensions that can work through entities nesting levels. One of these is Fredo’s ThruPaint.

I would say if anyone has done this or would want to, it would be @Fredo6.

@slbaumgartner, yes I will surely do that in the next few days. At the moment I’m too busy with finishing a project for a client and I need a bit of time to present the problem/use case in a clear video!

However, I’ll try to start describing the problem.
I design cabinets (kitchens, wardrobes, etc.) in a way that the model is usable for (CNC) production. The hierarchy in the outliner is basically as follow:

  1. Piece of furniture (kitchen, wardrobe)
  2. Cabinet
  3. Panels (fronts, left and right side, bottom and top, backside) and other parts (hingses, handles, drawers, shelf supports, etc.)

During the designing phase and preparation for production (the goal is to have drawings ready for CNC-milling) the design is constantly changing. It doesn’t seem difficult to make alterations. Reality, however, is more complex. I’ll give you two examples:

  1. Handles always need to be mounted on the same height for each cabinet. When they are part of different groups/components, aligning them is cumbersome. And if you take them all outside the group (which I do now) causes new problems.
  2. If I draw a shelf, the supports for it are placed within the same group, so that if you move the shelf, the supports will move along. The holes for the supports are, however, drilled in the side panels of the cabinet (which is another group). I would be great if they would move along.

Just to make it more clear: I’m not looking for just a possibility to do this, but I’m searching for a new solution so that I can do my work faster (aren’t we all ;)).

@DanRathbun, I agree that cross context manipulation is probably not the most user friendly solution, but it’s the only solution I can come up with at the moment. Hope this topic will point me into a better direction if there is one.

Curic Stretch plugin



This is what makes SketchUp’s native tools appear to be slower and slower when the software is oriented towards BIM, the management models are getting more and more complex to contain more information, it takes a lot of steps only to open group/component with double clicks.