Keynoteでオープン中の書類の現在表示中の(選択中の)スライド(ページ)上のshapeオブジェクトの矩形領域をすべて合成したRectangleのshapeオブジェクトを作成するAppleScriptです。
本来はほかの動作を行うプログラムの試作品なのですが、いまのところNSRectの合成を行うのが目的になっています。
PlaneなAppleScriptとCocoaの機能の両方を組み合わせないと実現できない機能でもあり、もうひと押しですごい処理ができそうな気がしないでもありません。
Keynote v9.xであらたにAppleScript用語辞書に記載された「selection」はまだfront documentやcurrent slideのレベルでしか動作しておらず、slide上で選択中のiWork itemや各Object中のobject textの選択部分を取得できたりはしないので注意が必要です。
▲実行前
▲実行後
AppleScript名:Keynote上で選択中のオブジェクトのRectangleを合成 |
— – Created by: Takaaki Naganoya – Created on: 2019/04/17 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" use scripting additions use framework "Foundation" property totalRect : missing value tell application "Keynote" tell front document tell current slide –SelectionがまだKeynoteでうまく働いていないので、そのかわり set aaList to every iWork item set aList to {} repeat with i in aaList if (class of i) is in {shape} then set the end of aList to contents of i end if end repeat –最初のアイテムを取り出す set aFirst to contents of first item of aList set {x1Pos, y1Pos} to position of aFirst set aHeight to height of aFirst set aWidth to width of aFirst set my totalRect to {origin:{x:x1Pos, y:y1Pos}, |size|:{|width|:aWidth, |height|:aHeight}} –残りのアイテムをNSRectに変換しつつ加算 set aList to rest of aList repeat with i in aList set aProp to properties of i set aHeight to height of aProp set aWidth to width of aProp set anArea to aHeight * aWidth set {x2Pos, y2Pos} to position of i set tmpRect to {origin:{x:x2Pos, y:y2Pos}, |size|:{|width|:aWidth, |height|:aHeight}} calcUnionRect(tmpRect) of me –Rectangleの加算を行う end repeat –Rectangleを合成した大きさと位置でshapeを新規作成 set tRect to (totalRect as record) set newProp to {position:{(x of origin of tRect), (y of origin of tRect)}, width:(|width| of |size| of tRect), height:(|height| of |size| of tRect)} set newShape to make new shape with properties newProp set opacity of newShape to 30 end tell end tell end tell on calcUnionRect(addRect) set totalRect to current application’s NSUnionRect(totalRect, addRect) end calcUnionRect |
More from my site
(Visited 85 times, 1 visits today)