# Scaling Groups?

dfepstein at comcast.net dfepstein at comcast.net
Fri Dec 11 13:10:35 EST 2009

```Before I go off and try to reinvent the wheel, does anyone have a script

that will proportionally scale objects within a group relative to each

other?

Scott Rossi has answered his own question, but FWIW here's my similar approach to the same problem. It does not assume that the scaled group stays in the same location, but it does require that the intended new rectangle of the group (not just a scaling factor) be specified--e.g., "set the groupRect of pGroup to 100,100,400,400"

David Epstein

on storeStartingGroupRects gID
-- load a custom property set of group id gID storing its rect and the rects of its members
repeat with n = 1 to the number of controls in group id gID
set the startingRects[n] of group id gID to the rect of control n of group id gID
end repeat
set the startingRects[0] of group id gID to the rect of group id gID
end storeStartingGroupRects

setProp groupRect r
-- target group's new rect is r; set its members' rects accordingly
put the short id of the target into gID
if the startingRects[0] of group id gID is not empty then
repeat with n = 1 to the number of controls in group id gID
set the rect of control n of group id gID to scaledRect(the startingRects[n] of group id gID,the startingRects[0] of group id gID,r)
end repeat
end if
end groupRect

function scaledRect rA,rB,rY
-- return a rectangle "rX" whose position and size relative to rY is the same as rA's position relative to rB
repeat for each char k in "12"
put comma & relativeF(item k of rA,item k of rY,item k+2 of rY,item k of rB,item k+2 of rB) after hold
end repeat
repeat for each char k in "34"
put comma & relativeF(item k of rA,item k-2 of rY,item k of rY,item k-2 of rB,item k of rB) after hold
end repeat
return char 2 to -1 of hold
end scaledRect

function relativef q,e,g,p,r
-- return value "f" whose value relative to e and g is the same as q's value relative to p and r (rounded)
return round(e+(q-p)/(r-p)*(g-e))
end relativeF
```