ich scripte unter OS X und die Angaben von Quark kommen unter OS X leider nicht richtig. Ich muß die Angaben umrechnen und möchte nun die Properties Angaben in die realen Zahlen umrechnen. Das funktioniert bei den "bounds" ohne Probleme, aber bei "angle" und "scale" nicht. Wer weiß Rat?
tell application "QuarkXPress Passport™ 4.11" tell page 1 of spread 1 of document 1 set xPref to (get properties of picture box 1) set xPrefPict to (get properties of image 1 of picture box 1) set xAngle to (angle of image 1 of picture box 1) set xAngle to coerce xAngle to real log xAngle set xRotation to (scale of image 1 of picture box 1) set xRotation to coerce xRotation to real log xRotation set xScale to (scale of image 1 of picture box 1) set xScale to coerce xScale log xScale set xBound to (bounds of picture box x as list) end tell end tell
in Deinem Script-Beispiel sind die Begriffe 'rotation' und 'scale' in der gleichen Zeile eingesetzt. Ich nehme an, dies ist ein Resultat Deiner verzweifelten Versuche, eine Lösung zu bekommen. Zudem verlangst Du nach Properties, ohne sie aber auszunutzen.
Der Reihe nach: versuche, mit gezielten 'tell'-Instruktionen die Objekte so zu adressieren, dass Wiederholungen (wie 'of image 1 of picture box 1') vermieden werden (siehe Muster unten).
Interessant: Man erzielt einen erheblichen Geschwindigkeitsgewinn, wenn die Properties in eine Variable gelesen werden und dann für die einzelnen Werte diese Variable adressiert wird - und nicht wieder 'image 1 of picture box 1'.
In Deinem Script funktioniert das Umrechnen von 'angle' (die Rotation des Bildes innerhalb der Box). Es kann aber direkter geschehen. Das heisst die Anzahl Befehle bleibt gleich, aber man kann sie in eine Zeile packen. --- tell document 1 of application "QuarkXPress Passport™ 4.11" tell page 1 tell picture box 1 tell image 1 set xPrefPict to properties set xAngle to coerce (angle of xPrefPict) to real set pScale to coerce (scale of xPrefPict) to list set yScale to coerce (item 1 of pScale) to real set xScale to coerce (item 2 of pScale) to real end tell end tell end tell end tell {xAngle, yScale, xScale} --- Bei der Rotation (= angle) genügt eine Befehlszeile. Für die beiden Bildprozentwerte benötigt man deren drei. Zuerst muss man den 'percent point' in eine Liste wandeln. Dann müssen die beiden Werte der Liste einzeln in eine Bruchzahl umgewandelt werden.
Das mit rotation und scale war ein Fehler - hab ich leider erst später entdeckt. Properties - war nur zur Info, was alles in den box properties drin ist - als Gedächtnisstütze.
Super Tipp - ist echt schneller. Ich kenne das aus FileMaker und mach das bereits so - dumm nur, das ich nicht daran gedacht habe und das noch nicht bei Quark probiert habe. Was solls, jetzt weiß ich's auch.
Das Tuning werd ich mit übernehmen - wichtig war erst einmal, das es funktioniert.
Mein Hauptproblem war, das ich die Liste immer in real umwandeln wollte. coerce to list - ist richtig. Ich hab aus den "nicht gewandelten" Werten nicht erkannt, das es eine Liste ist - ist zwar logisch, aber vor lauter Bäumen den Wald nicht gesehen. Das Scripten unter OS X ist mit Quark echt nicht so lustig - es müssen unnötige Umwandlungen vorgenommen werden, die auch Zeit kosten.
einverstanden, das Resultat von 'get scale' sieht nicht nach Liste aus: --- set yx to (scale of xPrefPict) --> «data FP% 0001000000010000»
Aber die Erfahrung mit "normalem" Scripten unter Mac OS 9.x und auch die 'class' sagt uns, dass darin zwei Werte stecken müssen: --- class of yx --> percent point
Die obige 16stellige Zahl erhält man, wenn die Bildgrössen je 100% aufweisen. Also: die Stellen halbieren (= "00010000"), die drei führenden Nullen wegmachen (= "10000") und den Dezimalseparator vor den zwei letzten Stellen einfügen (= "100.00").
Doch halt: so einfach ist es nicht, weil die Werte im Hexadezimal-Format sind: Man muss also die Zahl vom Hexadezimal-Format (= 00010000) in einen Integer-Wert (= 65536) umrechnen und dann in Prozente verwandeln (= (65536 / 655.35) div 0.01 / 100). Das Resultat = 100.0
Weil dies alles von XPress dank dem 'coerce'-Befehl souverän erledigt wird, erkläre ich den Hexadezimal-Konverter nicht hier, sondern in einem neuen Thema.