Rhino 9 Feature: ScaleEach

The ScaleEach command makes it simpler to change the size of multiple objects within one command.

Prompting is similar to the standard scale command with more options for the scale point and the scale factor.

Scale mode can be set to:

  • Normal factor - Set one scale for every object.
  • Gradient factor - Progressively scale each object to a different scale factor.
  • Random factor - Scale each object randomly within a range of scales

Random can be used in cases to create a more natural look of duplicate objects:

It applies a scale transformation to each object independently, using a “special point” that is generated from each object. Special points can be:

  • Centroids
  • Bounding box middle center
  • Any point relative to the bounding box
  • Gumball anchor point.

Below show the different ways scaling modes work with the a set of objects. More could be added based on demand.

Presently, Normal applies the same to all objects.

Gradient transitions from the smallest to the largest values,

Finally, Random chooses a value larger than zero to maximum.

40 Likes

cool!

would be great if this worked on subobject selected subd faces-

9 Likes

@theoutside I agree. Can you make a YT issue and assign it to me?

3 Likes

I have been waiting for this since Rhino 4! Illustrator has been doing it for a long while and I find it so useful to my work flow. Posted about it many years ago and I am so excited to see it being implemented!

This is great Giulio! Just from reading this I wanted to request block instance base point as another “special point” to add. I guess it would need to be a boolean since if you have mix of objects, non-blocks still need another special point defined.

How is the gradient defined? I did not have a chance to try but I imaging along X,Y,Z or maybe even along directional curve?

Another wish: random option but only from user-defined set of values (0.2, 0.4, 0.6, 0.8, 1 for example)

Also, why limit yourself just to Scale? The same can be very useful for other transforms (Move,Rotate). Not sure if you can combine all in one command or these are future commands. But if one command, they could be combined at once making it very powerful, like BoxEdit on steroids (big thing missing from BoxEdit was random option).

–jarek

2 Likes

ScaleNUEach is a logical next step.

2 Likes

Looks awesome!

I’ve been using ''Box Edit" panel with the “transform individual objects” option checked to come around this feature.
Following the same logic, it would be nice to also have something like “Rotate each”.

Keep up the good work!!

1 Like

In 3DS Max you can choose to apply transformations to the whole selection (as the whole group of object’s “pivot point/gumball”) or to individual objects “pivot points/gumball”. That way you can just select what you need and apply the transformation to the selected group of objects. Works quite well

Thank you for posting this. Please feel free to let us know if you find any problems or have some requests.

Yes it might be nice to add “Peculiar points” for objects, where these are not coincident with centroids. Our goal is to make this accurate. Gumball anchor points can help, but only at times. Block insertion points are some of these; curve start/end points, object minimae/maximae (if single and obtainable) might come in the future? Probably these will be added based on popular demand.

Currently, from a minimum to a maximum in order of selection.

OK; I’ll add this.

You guys are on fire!
About multiple axes, it’s a little different because each object needs a realignment plane, and this maybe could come from (axes of inertia?). I haven’t thought about this enough.
RotateEach will surely be added if there’s enough demand. I’d like to get some feedback from ScaleEach to understand the needs.

Thanks guys for all the feedback so far. Keep it coming!

Giulio
giulio@mcneel.com

2 Likes

This looks like it is about creating copies of an object. ScaleEach is for scaling existing objects which do not have to be an array.

What does that method in MoI do which is not possible using Array in Rhino?

@piac If this was in response to my request for ScaleNUEach then my request was misunderstood. I’m requesting ScaleNUEach to work similar to ScaleNU - separate scale factors in the x, y and z directions in either the World or Cplane coordinate system. NOT a different axis system for each object.

Hi David,

On reflection I agree with you, Array and ScaleEach are more distinctly separate transform tools than I had previously thought. I will delete my post here and make a new thread.

(as an aside: In Rhino, ArrayLinear only offsets each arrayed curve from each other, with the second reference point being the distance between each arrayed curve. In MoI, you can also array multiple curves within a set distance or within a curve’s extents.)

I see. Would it also be useful this way? Essentially, this would not need a new realignment plane, just a new base point for each object. Axes would not be changed. Correct?

May I ask, were would you use this workflow?

Correct.

Multiple section curves which will be used to create a surface, and need to change the proportions of each section curve relative to a corner of its bounding box but not the position of the section curve.

1 Like

There’s a new “NUAxes” option now, that should make what you ask possible. I didn’t want to add a new “NU” version of the command. See if it’s any useful!

@piac Thank you for letting us know about the new option.

A) A WorldCoordinates= option is needed like in ScaleNU.

B) The ability to apply a different scale fractor for each coordinate direction in one application of the command, like in ScaleNU, would be very useful. The function of the this option in ScaleEach and the function of ScaleNU should be consistent.

C) There are several problems with the interface which hinder it’s use.

Scenario 1:
ScaleEach
Select multiple objects in response to prompt and Enter.
From= and NUAxes= options are no longer available.
Scaling is from object centroids with no other options available.
Scaling is uniform, not non-uniform.

Scenario 2:
Select multiple objects
ScaleEach
From= and NUAxes= options are not longer available.
Scaling is from object centroids with no other options available.
Scaling is uniform, not non-uniform.

1 Like

Very Nice …