[GastForen Programmierung/Entwicklung AppleScript script fuer "falsche outline"

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

script fuer "falsche outline"

Anonym
Beiträge gesamt: 22827

24. Mai 2004, 09:42
Beitrag # 1 von 9
Bewertung:
(1637 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo forum!
hallo hans !!

script fuer "falsche outline"

xp 4.1  // 9.22 // 1.83  // oax-menü-erweiterung

ich moechte das ein ausgewaehlter textrahmen 8x dupliziert wird. dabei wird vom script der versatz und die farbe des textes fuer die duplizierte box abgefragt.  die box wird 4x im angegebenen versatz rund um die auswahl dupliziert (bei versatz ,5 mm also: x:,5 mm y:,5 mm // x:-,5 mm y:,5 mm // x:-,5 mm y:-,5 mm // x:,5 mm y:-,5  mm// ) und 4x mit versatz /2. die duplizierten rahmen werden gruppiert, der originalrahmen wird der gruppe hinzugefuegt.

damals mit 3.32 und win 3.1 liess sich das mit abstrichen ganz leicht mit dem recorder aufzeichnen und wunderbar jederzeit anwenden.

auf mac + applescript waere es natuerlich komfortabler, da eine abfrage der positionen moeglich ist.

mit dieser methode arbeitet wohl auch die bildzeitung zum teil, und ich denke bei schriftgroessen bis ca. 32 pt stellt das optisch kein problem dar.

text in rahmen kommt nicht unbedingt in frage, da eventuell mehrere zeilen betroffen sind …

ich hoffe diese aufgabe ist des meisters wuerdig ;-)

cu

hans-gerd
X

script fuer "falsche outline"

Hans Haesler
  
Beiträge gesamt: 5826

24. Mai 2004, 11:22
Beitrag # 2 von 9
Beitrag ID: #418772
Bewertung:
(1636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans-Gerd,
Zitat ich hoffe diese aufgabe ist des meisters wuerdig

:-) er fühlt sich sogar überfordert!

Im Ernst: Es hört sich kompliziert an, und mit der Abfragerei und dem
Umsetzen des Duplizierens wird es vermutlich schon nicht allzu leicht sein.

Fragen: Wird für die versetzten Boxen nur eine Farbe verwendet? Ist der Tonwert
der Farbe immer gleich? Würdest Du mir bitte ein Muster zustellen?

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418771]

script fuer "falsche outline"

Hans Haesler
  
Beiträge gesamt: 5826

26. Mai 2004, 13:03
Beitrag # 3 von 9
Beitrag ID: #418773
Bewertung:
(1636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans-Gerd,

eine erste Version des Scripts ist bereit. Ich habe ganz einfach mein bestehendes Script zur Erzeugung eines Textschattens erweitert.

Na... so einfach war es nicht... Denn dort wo das Textschatten-Script fertig ist, geht es erst richtig los. Die Box muss noch sieben Mal kopiert und verschoben werden.

Das Script ist noch nicht fertig, aber es kann schon eine ganze Menge.
&#150; Es können mehrere Boxen ausgewählt werden.
&#150; Eine Box kann auch mit anderen Boxen verkettet sein.
&#150; Die farbige Schrift wird auf "Aussparen" gesetzt.
&#150; Es werden auch Textpfade akzeptiert (aber keine B&eacute;zier-Kurven).
&#150; Die gewählte Farbe wird gespeichert und beim nächsten Abspielen (falls verfügbar) an den Beginn der Liste gesetzt.
&#150; Der Tonwert und der Versatz werden ebenfalls gespeichert und wieder vorgeschlagen.

Was noch fehlt:
&#150; Die Boxen werden am Schluss gruppiert.
&#150; Ausführungszeit verringern.
&#150; Prüfungen der Eingaben optimieren.
&#150; Auch B&eacute;zier-Textpfade behandeln.

Die Farbe, der Tonwert und der Versatz werden per Dialog-Director-Dialog durch den Anwender eingegeben. Hier ein Auszug (wie meistens ist das ganze zu lang, aber Interessierte können das Script bei mir verlangen).

Nachdem die ausgewählte Box kopiert, verschoben und der Inhalt eingefärbt ist, wird ein Handler aufgerufen, in welchem eine Wiederholungsschleife die Box kopiert und verschiebt, immer ausgehend von den 'origin of bounds' (die Y- und -X-Werte der linken oberen Ecke) der Originalbox (= orY und orX). Die Variable 'v' enthält den vom Anwender eingegebenen Versatz. Die Elemente der Listen 'vList' und 'hList' sind vorbereitet: Versatz positiv (= v), Versatz negativ (= -v) oder Versatz null (= 0).
---
on duplicateRect()
  set vList to {0, v, v, v, -v, -v, -v}
  set hList to {-v, 0, v, -v, 0, v, -v}
  tell document 1 of application "QuarkXPress 4.11"
    repeat with i from 1 to 7
      try
        set {y, x} to {orY + (item i of vList), orX + (item i of hList)}
        set selected of text box "o_u_t_l_i_n_e" to true
        copy current box to after current box
        set name of current box to ""
        tell text box "o_u_t_l_i_n_e"
          set origin of bounds to {y, x}
        end tell
      end try
    end repeat
  end tell
end duplicateRect
---
Das Problem ist, dass eine neu erzeugte Box wieder adressierbar wird. Hier wird es so gelöst, dass die aktuelle Box ausgewählt und einen Namen hat. Nach dem Kopieren wird der Name der aktiven Box gelöscht, das vorher erzeugte Duplikat wird selektiert, dupliziert usw.

Ich werde versuchen, das Benennen und Auswählen zu vermeiden und stattdessen die 'uniqueID' (also einzigartige Indexnummer) einzusetzen.

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418771]

script fuer "falsche outline"

Anonym
Beiträge gesamt: 22827

27. Mai 2004, 08:59
Beitrag # 4 von 9
Beitrag ID: #418774
Bewertung:
(1636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo hans,

das wird ja mal wieder besser und komfortabler als vorgeschlagen :)

was meinst du mit: "Eine Box kann auch mit anderen Boxen verkettet sein" ?
werden dann alle verketteten boxen bearbeitet?

etwas anderes: ab und zu haengt sich ein ordnerueberwachungsscript auf (freeze). mit apfel-alt-esc kann ich die ordneraktion killen, aber sie laeuft erst wieder wenn der rechner komplett neu hochgefahren wird. geht das auch anders/schneller?

cu

hans-gerd


als Antwort auf: [#418771]

script fuer "falsche outline"

Hans Haesler
  
Beiträge gesamt: 5826

27. Mai 2004, 10:23
Beitrag # 5 von 9
Beitrag ID: #418775
Bewertung:
(1636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans-Gerd,
Zitat das wird ja mal wieder besser und komfortabler als vorgeschlagen

:-) Ich versuche, es so benutzerfreundlich wie möglich anzubieten.

Ich habe gestern Abend noch weiter daran gearbeitet. Jetzt ist die Prüfung der Eingaben verbessert. Vor allem der Dezimal-Trenner (Komma oder Punkt) sollte keine Probleme mehr verursachen. Die Reihenfolge der Erzeugung ist auch geändert. Jetzt werden die Boxen im Uhrzeigersinn angelegt. Im Moment habe ich noch keine Lösung, um das Benennen und Auswählen zu vermeiden. Die Gruppierung sollte machbar sein, kommt aber erst heute Abend daran. Ich sende Dir jetzt die aktuelle Version.

Zum Fall einer verketteten Box: Nein, nur die ausgewählten Boxen werden dupliziert. Wie schon erwähnt, ist das Script eine Erweiterung meines Textschatten-Scripts. Weil unsere Layouter manchmal alle Boxen verketten (Titel, Einleitung, Text), aber dann nur beim Titel einen Schatten hinterlegen wollen, ist das Script so angelegt, dass es prinzipiell die ausgewählte Box dupliziert, in dieser Kopie allen Text entfernt, dann nur den Text der ausgewählten Box (und nicht die ganze Story) kopiert, eventuelle abschliessende Returns oder sonstige Nächste-Box-Zeichen abschneidet und in die leere Box einsetzt.

Wenn die Box tatsächlich verkettet ist, dann ist dies notwendig. Sonst hätte jede der acht Outlineboxen einen Überlauf. In den meisten Fällen wird die Box nicht verkettet sein. Man könnte zwar eine einfachere Variante einsetzen, aber dies würde aufwendigeren Code bedingen.

Zu Deiner Ordnerüberwachungsfrage habe ich ein neues Thema eröffnet.

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418771]

script fuer "falsche outline"

Hans Haesler
  
Beiträge gesamt: 5826

28. Mai 2004, 00:20
Beitrag # 6 von 9
Beitrag ID: #418776
Bewertung:
(1636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans-Gerd,

es ist geschafft! Alle Ziele sind erreicht: Die Boxen werden am Schluss gruppiert; die  Ausführungszeit ist stark verringert (dank den 'uniqueID' und dem Einsatz von Script-Objekten); die Prüfungen der Eingaben sind optimiert; auch B&eacute;zier-Textpfade werden behandelt (recht schwierig, weil jeder Ankerpunkt samt Anfassern einzeln verschoben werden muss).

Die uniqueID-Nummern ermöglichen, die Boxen ohne Benennen und Auswählen zu adressieren. Der oben gezeigte Handler wurde in ein Script-Objekt verwandelt und sieht jetzt so aus:
---
script duplicateRect
  tell document 1 of application "QuarkXPress 4.11"
    repeat with i from 1 to 7
      try
        set {y, x} to {orY + (item i of vList), orX + (item i of hList)}
        copy generic box id newID to after generic box id newID
        set newID to uniqueID of text box after generic box id newID
        tell generic box id newID
          set origin of bounds to {y, x}
        end tell
        set end of boxList to newID
      end try
    end repeat
  end tell
  return boxList
end script
---
Das Schlüsselstück ist das Kopieren der 'generic box id newID' hinter sich selbst. In der nächsten Zeile wird die 'uniqueID' der soeben erzeugten Textbox in die Variable newID gegeben. Ich hatte nicht so recht daran geglaubt, dass diese Konstruktion funktionieren würde.

Das Gruppieren der Boxen geschieht auch mit einem Script-Objekt:
---
script groupBoxes
  tell application "QuarkXPress 4.11"
    tell document 1
      repeat with i from 1 to count of boxList
        set selected of generic box id (item i of boxList) to true
      end repeat
      set x to object reference of every generic box whose selected is true
    end tell
    set selection to item 1 of x
  end tell
end script
---
In der Liste 'boxList' sind die neun 'uniqueID'-Nummern gespeichert, z.B. {596, 626, 628, 630, 632, 634, 636, 638, 640}. Anhand dieser Liste werden die Boxen ausgewählt, dann wird die Objektreferenz der Boxen in eine Variable gegeben und schliesslich die Auswahl des ersten Elementes der Liste verlangt. Resultat: alle neun Boxen sind gruppiert.

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418771]

script fuer "falsche outline"

Hans Haesler
  
Beiträge gesamt: 5826

28. Mai 2004, 18:50
Beitrag # 7 von 9
Beitrag ID: #418777
Bewertung:
(1636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wieder einmal zu früh gefreut... :-((

Hans-Gerd teilte mir mit, dass die finale Version sein XPress zielsicher zum Absturz bringt. Woran es liegt, weiss ich nicht. Denn ich habe während des Entwickelns und Testens unzählige Läufe mit bis zu 10 gleichzeitig ausgewählten Boxen gemacht. Und auch mit Textpfaden und sogar B&eacute;zier-Kurven. Ohne jeden Zwischenfall.

Kann sein, dass XPress von einem anderen Absturz schon leicht ausser Kurs gebracht war. Und empfindlicher gegen rasche Script-Aktionen.

Wie dem auch sei: nach jedem Absturz sollte man den Programmordner öffnen, eine eventuell vorhandene temporäre Datei (welche XPress nicht löschen konnte) entfernen. Und auch die Präferenzen-Datei durch eine frische Kopie ersetzen. Im gleichen Zug wechsle ich auch jedes Mal die Wörterbücher aus. Auch sie können beschädigt sein und weitere Abstürze begünstigen.

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418771]

script fuer "falsche outline"

Anonym
Beiträge gesamt: 22827

31. Mai 2004, 20:26
Beitrag # 8 von 9
Beitrag ID: #418778
Bewertung:
(1636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo hans,


ich habe die "XPress Preferences" mal verschoben und die woerterbuecher ersetzt, komme aber zu dem selben ergebnis.

auffaellig: steht der originaltextrahmen auf umfliessen, dann erscheint noch deine meldung, das das geaendert wurde und beim bestaetigen sagt xpress leise (aber rasch ;-) servus &#133;
d.h. ja meiner laienmeinung nach, das das script erst nachdem es komplett fertig ist, xpress abstuerzen laesst.

vielleicht sagt dir das etwas?

cu
hans-gerd


als Antwort auf: [#418771]

script fuer "falsche outline"

Hans Haesler
  
Beiträge gesamt: 5826

31. Mai 2004, 20:50
Beitrag # 9 von 9
Beitrag ID: #418779
Bewertung:
(1636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans-Gerd,

ja, das Umfliessen ist schon seit langem eine heikle (sprich absturzförderende) Eigenschaft. Doch so wie dessen Handling im Script definiert ist, wird es bei uns seit Jahren (im Textschatten-Script) eingesetzt. Sollte eigentlich keinen Absturz auslösen. Aber ich werde es nochmals in dieser Hinsicht nachprüfen.

Und wenn Du eine "normale" Box auswählst, d.h. deren Umfluss auf "Keine" steht? Funktioniert es damit problemlos?

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418771]
X