QuartzComposerのグラフに任意のデータを指定してウィンドウ表示するAppleScriptです。
スクリプトバンドル内の「Chart.qtz」を読み出して表示しているため、QuartzComposer入りのスクリプトバンドルを用意しておきましたので、ダウンロードしてお試しください。
オリジナルはControl+Command+Rで実行する必要がありましたが、本Scriptではその必要がありません。ちなみに、一般的なQuartzComposerのようにマウスでグリグリ回せるとかいうことはありません。パラメータを反映して静止画として表示されるだけです(Xcode上で作成したAppleScriptのGUIアプリケーションであれば、普通に回せます)。
macOS 10.14上で実行してみたところ、スクリプトエディタではCompositionが表示されませんでしたが、Script Debugger上で実行したかぎりでは実行されました。Framework宣言で足りないものがあるのでしょうか?
備考:QuartzComposerはmacOS 10.15でDeprecated扱いになりました
AppleScript名:QuartzComoserでグラフ表示てすと v6 |
— Created 2015-11-03 by Takaaki Naganoya — Modified 2018-11-04 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "Quartz" use framework "AppKit" property NSColor : a reference to current application’s NSColor property QCView : a reference to current application’s QCView property NSString : a reference to current application’s NSString property NSScreen : a reference to current application’s NSScreen property NSWindow : a reference to current application’s NSWindow property NSNumber : a reference to current application’s NSNumber property NSPredicate : a reference to current application’s NSPredicate property NSDictionary : a reference to current application’s NSDictionary property NSMutableArray : a reference to current application’s NSMutableArray property NSWindowController : a reference to current application’s NSWindowController property NSMutableDictionary : a reference to current application’s NSMutableDictionary property NSTitledWindowMask : a reference to current application’s NSTitledWindowMask property NSWindowCloseButton : a reference to current application’s NSWindowCloseButton property NSNormalWindowLevel : a reference to current application’s NSNormalWindowLevel property NSBackingStoreBuffered : a reference to current application’s NSBackingStoreBuffered set chartData to NSMutableArray’s new() chartData’s addObject:(my recWithLabels:{"label", "value"} andValues:{"練馬区", 3}) chartData’s addObject:(my recWithLabels:{"label", "value"} andValues:{"青梅市", 1}) chartData’s addObject:(my recWithLabels:{"label", "value"} andValues:{"中野区", 2}) my performSelectorOnMainThread:"dispQuartzComposerWindow:" withObject:(chartData) waitUntilDone:true on dispQuartzComposerWindow:chartData –上記データの最大値を求める set aMaxRec to chartData’s filteredArrayUsingPredicate:(NSPredicate’s predicateWithFormat_("SELF.value == %@.@max.value", chartData)) set aMax to value of aMaxRec set aMaxVal to (first item of aMax) as integer –Scalingの最大値を求める if aMaxVal ≥ 10 then set aScaleMax to (10 div aMaxVal) set aScaleMin to aScaleMax div 10 else set aScaleMax to (10 / aMaxVal) set aScaleMin to 1 end if try set aPath to path to resource "Chart.qtz" on error return end try set qtPath to NSString’s stringWithString:(POSIX path of aPath) set aView to QCView’s alloc()’s init() set qtRes to (aView’s loadCompositionFromFile:qtPath) aView’s setValue:chartData forInputKey:"Data" aView’s setValue:(NSNumber’s numberWithFloat:(0.5)) forInputKey:"Scale" aView’s setValue:(NSNumber’s numberWithFloat:(0.2)) forInputKey:"Spacing" aView’s setAutostartsRendering:true set maXFrameRate to aView’s maxRenderingFrameRate() (aView’s setValue:(NSNumber’s numberWithFloat:aScaleMax / 10) forInputKey:"Scale") set aWin to (my makeWinWithView(aView, 800, 600, "AppleScript Composition Test")) set wController to NSWindowController’s alloc() wController’s initWithWindow:aWin aWin’s makeFirstResponder:aView wController’s showWindow:me aWin’s makeKeyAndOrderFront:me delay 5 my closeWin:aWin aView’s stopRendering() –レンダリング停止 end dispQuartzComposerWindow: –make Window for Display on makeWinWithView(aView, aWinWidth, aWinHeight, aTitle) set aScreen to NSScreen’s mainScreen() set aFrame to {{0, 0}, {aWinWidth, aWinHeight}} set aBacking to NSTitledWindowMask set aDefer to NSBackingStoreBuffered — Window set aWin to NSWindow’s alloc() (aWin’s initWithContentRect:aFrame styleMask:aBacking backing:aDefer defer:false screen:aScreen) aWin’s setBackgroundColor:(NSColor’s whiteColor()) aWin’s setTitle:aTitle aWin’s setDelegate:me aWin’s setDisplaysWhenScreenProfileChanges:true aWin’s setHasShadow:true aWin’s setIgnoresMouseEvents:false aWin’s setLevel:(NSNormalWindowLevel) aWin’s setOpaque:false aWin’s setReleasedWhenClosed:true aWin’s |center|() aWin’s makeKeyAndOrderFront:(me) –aWin’s movableByWindowBackground:true — Set Custom View aWin’s setContentView:aView –Set Close Button set closeButton to NSWindow’s standardWindowButton:(NSWindowCloseButton) forStyleMask:(NSTitledWindowMask) return aWin end makeWinWithView –close win on closeWin:aWindow repeat with n from 10 to 1 by -1 (aWindow’s setAlphaValue:n / 10) delay 0.01 end repeat aWindow’s |close|() end closeWin: on recWithLabels:theKeys andValues:theValues return (NSDictionary’s dictionaryWithObjects:theValues forKeys:theKeys) as record end recWithLabels:andValues: |
More from my site
(Visited 60 times, 1 visits today)