Mac: Von FileMaker aus SketchUp mit Ruby-Skripten steuern
-
Azuby brachte mir vor einem Jahr als ersten Ruby-Skript folgenden bei: SketchUp > Menü Fenster > Ruby-Konsole. Dort tippen »UI.beep« (ohne Tüttel) und Eingabetaste (return) drücken. Im Lautsprecher erklingt der Systemwarnton.
Dasselbe von außerhalb SketchUp, mittels AppleScript vom Skripteditor aus:
set konsolenText to "UI.beep" --Variable, die später auch durch andere Skripteinzeiler ersetzt wird tell application "SketchUp" activate tell application "System Events" tell process "SketchUp" -- stellt sicher, daß die Einfügemarke im TextField der Ruby-Konsole aktiv ist tell menu bar 1 tell menu bar item "Fenster" tell menu 1 click menu item "Ruby-Konsole" end tell end tell end tell end tell keystroke konsolenText --Variable eintippen in das "AXTextField" der "Ruby-Konsole" keystroke return end tell end tell
Aus einer FileMaker-Datenbank den Skript zu starten, geht ebenso einfach: Textfeld und Knopf, der den Textfeld-Text als »Applescript ausführt«.
Beep
Sinn meiner Übung: Mangelndes Gedächtnis durch Filemaker-Datensätze stützen und dort die gelernten Skriptzeilen an einer übersichtlichen Stelle sammeln.
-
Um den zu übergebenden Ruby-Skripttext übersichtlicher zu sehen, trennte ich in FileMaker 2 Felder. Das 1. Feld beinhaltet nur den Ruby-Skripttext, das 2. Feld errechnet daraus, was als AppleScript-Skripttext abgearbeitet werden soll.
Das läuft soweit phantastisch gut! Die in der Sketchup-Ruby-Zeile verdeckten Skriptzeilen zeigt FileMaker.@unknownuser said:
set konsolenText to "
UI.beep
" --Diese Variable ist der Ruby-Skript für SketchUp
tell application "SketchUp"
activate
tell application "System Events"
tell process "SketchUp" -- stellt sicher, daß die Einfügemarke im TextField der Ruby-Konsole aktiv ist
tell menu bar 1
tell menu bar item "Fenster"
tell menu 1
click menu item "Ruby-Konsole"
end tell
end tell
end tell
end tell
keystroke konsolenText --Ruby-Skript eintippen in das "AXTextField" der "Ruby-Konsole"
keystroke return
end tell
end tell -
UI.messagebox("Hier eine zusammengebastelte Textnachricht aus FileMaker")
Damit die Tüttel (Anführungszeichen, Zollzeichen) aus FileMaker so in AppleScript ankommen, daß sie von dort als Tüttel in der Ruby-Konsole von SketchUp geschrieben werden, hier Rückwärtsschrägstrich vor Tüttel:
set konsolenText to "UI.messagebox(\"Hier eine zusammengebastelte Textnachricht aus FileMaker\")" tell application "SketchUp" activate tell application "System Events" tell process "SketchUp" --stellt im Konsolentextfeld die Einfügemarke sicher tell menu bar 1 tell menu bar item "Fenster" tell menu 1 click menu item "Ruby-Konsole" end tell end tell end tell end tell keystroke konsolenText --to "AXTextFiled" of "Ruby-Konsole" keystroke return end tell end tell
-
Um die Namen der Einzelteile einer SketchUp-Zeichnung zu ermitteln, lehrte mich azuby folgenden Ruby-Skript für die Ruby-Konsole:
Sketchup.active_model.entities.each { |e| puts e.name if e.kind_of?(Sketchup;;Group) or e.kind_of?(Sketchup;;ComponentInstance) }
Diese Skriptzeile steht nun bei mir in FileMaker (Mac). Und sie steuert SketchUp 6. Um den Skripttext brauche ich mich erst dann wieder zu kümmern, wenn ich ihn verstehen oder ändern möchte. Siehe oben.
-
Beim Zusammenfügen der 2 FileMaker-Felder zu 1 Feld (mit dem AppleScript-Text) ergibt sich eine Komplikation mit den Zeichen Tüttel »"« und schräger Rückstrich »\« (wenn der Ruby-Text im Feld 1 ebenfalls Tüttel enthält). Diese Komplikation löste ich mit der FileMaker-Formel »Austauschen«:
Austauschen ( Feld1RubyText ; "\"" ; "\\\"" ) # " wird zu \"
-
Mac-Ruby-Konsole kann nur Einzeiler
azuby machte mich aufmerksam, daß die Mac-Ruby-Konsole keine mehrzeiligen Ruby-Skripte annehmen kann. Weil ich aber auch Methodendefinitionen, die mehrzeilig sind, über FileMaker in die Ruby-Konsole übertragen wollte, ersetzte ich die Zeilenschalter durch Semikolons. Im FileMaker-Formelfeld heißt es also:Austauschen ( Feld1RubyText; "¶" ; ";" ) # Zeilenschalter wird zu Semikolon
-
Es handelt sich nicht um die/eine Mac-Ruby-Konsole, sondern um die Sketchup-Ruby-Konsole (egal welches Betriebssystem).
azuby
Advertisement