See below an example, adapted from an earlier post, in which we first create and populate one named layer, and then another.
Essentially, you can reference layers by their name, and wrap the make shape
, make line
etc instructions within tell layer ... end tell
lines:
use framework "Foundation"
property perFont : "GillSans"
property seatSize : 42
property Gap : 3
property seatSpace : seatSize + Gap
on run
set memberCount to 15
set tPerim to memberCount * (seatSpace)
set tRadius to tPerim / (2 * pi)
if tRadius < 40 then set tRadius to 60
set attList to {"GBa", "JMi", "PMi", "DMa", "SMi", "PDo", "RVi", "JMi", "PMi", "DMa", "SMi", "PDo", "RVi", "JMi", "PMi", "DMa", "SMi", "PDo", "RVi", "JMi", "PMi", "DMa", "SMi", "PDo", "RVi"}
tell application id "com.omnigroup.OmniGraffle6"
tell canvas of front window
# draw circular table
set xOrigin to 150
set yOrigin to 250
set tDiam to 2 * tRadius
set pointList to {0, xOrigin, yOrigin}
make new layer at end with properties {name:"Table"}
-- select layer id 2
tell layer "Table"
make new shape with properties {name:"Circle", textSize:{0.8, 0.7}, draws shadow:false, size:{tDiam, tDiam}, origin:{xOrigin, yOrigin}, textPosition:{0.1, 0.15}}
end tell
# now draw seats
# - set coords of centre of table
--set tRadius to tRadius / 2
set xtCentre to xOrigin + tRadius
set ytCentre to yOrigin + tRadius
set halfSeat to seatSize / 2
make new layer at end with properties {name:"Seats"}
--select layer 1 ??
repeat with i from 1 to memberCount
#functions are in radians
set tAngle to (i * (360 / memberCount))
set tRadians to tAngle * (2 * pi) / 360
# set chair offsets from centre
set Hoff to (tRadius + halfSeat + Gap) * (my cos(tRadians))
set Voff to (tRadius + halfSeat + Gap) * (my sin(tRadians))
#determine coords of seat
set xCentre to xtCentre + Hoff
set yCentre to ytCentre + Voff
-- Delta
set xPos to xCentre - halfSeat
set yPos to yCentre - halfSeat
# get member initials
set perINIT to text item i of attList
# draw a line from table centre to Chair origin
tell layer "Seats"
make new line with properties {point list:{{xtCentre, ytCentre}, {xCentre, yCentre}}, thickness:0.25}
set shapeRef to (make new shape with properties {name:"AndGate", textSize:{1.0, 0.8}, draws shadow:false, size:{seatSize, seatSize}, text:{alignment:center, font:perFont, text:perINIT}, textRotation:90, rotation:tAngle, origin:{xPos, yPos}, thickness:0, textPosition:{0.0, 0.1}, vertical padding:0, fill color:{0.0, 1.0, 1.0, 0.304984}})
end tell
end repeat
end tell
end tell
end run
-- evalOSA :: ("JavaScript" | "AppleScript") -> String -> String
on evalOSA(strLang, strCode)
set ca to current application
set oScript to ca's OSAScript's alloc's initWithSource:strCode ¬
|language|:(ca's OSALanguage's languageForName:(strLang))
set {blnCompiled, oError} to oScript's compileAndReturnError:(reference)
if blnCompiled then
set {oDesc, oError} to oScript's executeAndReturnError:(reference)
if (oError is missing value) then return oDesc's stringValue as text
end if
return oError's NSLocalizedDescription as text
end evalOSA
on cos(x)
evalOSA("JavaScript", "Math.cos(" & (x as string) & ")") as real
end cos
on sin(x)
evalOSA("JavaScript", "Math.sin(" & (x as string) & ")") as real
end sin