Description: This script takes a selection of groups/components and scales and rotates them based on their centerpoint, the world axis, their axis location, or the component base.
Usage: Select the components and/or groups to be scaled and/or rotated. Run the plugin at Plugins>Chris Fullmer Tools>Scale Multiple> . There are two plugins found here. One will scale everything equally. The other will scale them randomly based on minimum and maximum provided values. NOTE: The scale factors are not percentages. They are factors. Which means if you want to scale something to be twice as large, you enter 2. If you want something to be one half the size, enter .5 . Entering 50 will not a result that is 50% the original, but will give a result that is 50 times larger than the original.
Chris
UPDATES v2.0
Fixed a bug where it didn't let you scale items more than once using Axis. Should work over and over now.
Added "Component Base" support for those of us who don't set our component axes. This uses the bottom center of the component.
Added much more reliable FaceMe component support (I hope).
Added Rotation capability. Uniform and random with user specified min/max values.
v2.5 - SU 7.1 compatibility fix
Fixed scaling so that Face Me components don't freak out like they have been doing since 7.1 was introduced. Big Thanks to Edson and Thom for helping figure out what was breaking.
Cleaned up some code - a big chunk thanks to a tip from TIG!
Randor.rb does a random scale/rotate thing. Its not super complete, as it does not let you specify the min/max values. But it is a good choice if you want a script that does random scale/rotate for making mass amounts of componeonts looks slightly different (like plants specifically).
But who knows, maybe I'll take that on in time.
This script might be useful enough to have its own toolbar. Maybe I'll do that tonight.
Big thanks. After initial test I dont think I expressed what I wanted very well. Could be that english is not my native language or that I was tired. Anyway. What I would like is another option: the center of each components bounding box at the bounding box min (in Z). Many Groups or components dont have the axis at the center (if you're lazy like me) So that option would also be great.
Sure, that should be easy enough to put in place. There are quite a few good bounding box control options built in, so it should not be too hard to find the center of the "bottom" of the bounding box. Hopefully it will work even after the component is rotated on its head. I would imagine that in that scenario it would still be preferable to use the same point that would be used if the component were not on its head, right? So the point should be the same on the component, no matter what the orientation of the component is?
Thanks for the feedback and positive comments. I'll see what I can do. Its early morning here right now and I'll be gone much of the day at a St.Patricks Day (US Holiday) parade in San Francisco. When I get home this afternoon I'll get back to work
Ei Chris, thank you for the manuscript, I liked a lot. But... maybe you can improve the manuscript for increasing a function of rotate objects randomly. This can be very good tool to work with 3D plants or similar.
Pixero wrote:Big thanks. After initial test I dont think I expressed what I wanted very well. Could be that english is not my native language or that I was tired. Anyway. What I would like is another option: the center of each components bounding box at the bounding box min (in Z). Many Groups or components dont have the axis at the center (if you're lazy like me) So that option would also be great.
Don't think I've forgotten about your request Jan. I have a working version that does what you asked for. But it was remarkably more difficult to code that I had expected due to some faceme component issues. But I think I've got it worked out. There are just some bugs that I need to work out. But otherwise, its almost ready. As soon as I get some to put into it, I'll get the next version released.
Glad others are finding it useful, thanks for commenting!
All right, wishes granted! I just updated this script and it now has the "Component Base" scale point option as suggested by Jan. Sorry it took so long to implement. I kept hitting little speedbumps along the road with that feature. I think it is working quite well now.
I've also added rotation. It rotates on the same base point as the scaling.
I also updated the video in the first post to explain the new features. Here's a full feature list for the version 2.0 update:
* Fixed a bug where it didn't let you scale items more than once using Axis. Should work over and over now. * Added "Component Base" support for those of us who don't set our component axes. This uses the bottom center of the component. * Added much more reliable FaceMe component support (I hope). * Added Rotation capability. Uniform and random with user specified min/max values.
I tried to test it thoroughly, but its possible there are still bugs. Let me know (as I'm sure you will) if you find something,
I forgot to mention that I changed the filename (sorry). It was clf_scale_multiple.rb. That should be deleted. And then install the new one which is clf_scale_rotate_multiple.rb
The problem with implementing that functionality is that SketchUp does not order the components you select the way you select them. So even if you select them one by one and hit the "grow" command, it might jump around in the process, and scale them out of order, rendering it useless.
Its possible to do for sure, but you have to make an assumption of growing them in the order they lie on the x axis or something. Then it would be possible to get them to grow in order. Or if the script placed them, it could keep track of them in order easily too. But I already know some of the math here starts getting me into trouble. I can see some of the shrinking spirals and sin waves you produce. That stuff just hurts my head