[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Objekte in regelmäßigen Abständen erstellen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Objekte in regelmäßigen Abständen erstellen

Kai Rübsamen
Beiträge gesamt: 4684

2. Dez 2009, 12:22
Beitrag # 1 von 4
Bewertung:
(2823 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Auf mediengestalter.info wurde die Tage gefragt, ob man auf einer Strecke in regelmäßigen Abständen eine bestimmte Anzahl von Objekten erstellen und verteilen könnte. Z.B. ein Kreis links oben und einen rechts oben und InDesign sollte automatisch den Zwischenraum mit den gleichen Kreisen füllen.

Meine Lösung sah hier wie folgt aus:

1. Erstelle den ersten Kreis
2. Erstelle den letzten Kreis
3. Wähle den ersten Kreis aus > Bearbeiten | Duplizieren und versetzt einfügen | Wdh. 18, x/y 0
> Jetzt liegen 19 Kreise direkt übereinander
4. Fenster | Objekt und Layout | Ausrichten
5. ALLE Kreise markieren und bei eingeblendeten Optionen auf Abstand verteilen | Zwischenraum horizontal verteilen klicken

Vorgestern Abend habe ich dann beim fernsehen angefangen das ganze als Übung zu skripten. Ich gehe hier davon aus das die Objekte (eins links, eins rechts und ausgewählt) gleich groß sind und horizontal auf der gleichen Höhe liegen.

Da der Umgang mit Breiten, Zwischenräumen, Duplikaten usw. sicher für alle Skriptanfänger interessant ist, habe ich Hans gebeten ein paar kosmetische Korrekturen vorzunehmen u. kleine Fehler aus dem Skript zu entfernen. Zum besseren Nachvollziehen sind die meisten Zeilen kommentiert.

Hier also die Skriptversion:

Code
if (app.selection.length != 2) { 
alert ("Bitte 2 Objekte auswählen")
exit();
}

var curSel = app.selection;

// speichert die "geometricBounds" der beiden ausgewählten Objekte
// Wichtig: curSel[0] ist hierbei nicht das zuletzt gezeichnete,
// sondern das älteste innerhalb der "selection"
var aGb = curSel[0].geometricBounds;
var bGb = curSel[1].geometricBounds;

// prüft bei welchem Rahmen der x-Wert kleiner ist
if (aGb[1]<bGb[1]) {
// ergibt den Raum zwischen rechter Kante linkes Objekt u. linker Kante rechtes Objekt
var gap = bGb[1]-aGb[3];
// ergibt die Breite eines Objekts
var frWdth = aGb[3]-aGb[1];
var x = 0;
}
else {
var gap = aGb[1]-bGb[3];
var frWdth = bGb[3]-bGb[1];
var x = 1;
}

// teilt den zur Verfügung stehenden Raum durch die Breite
// das Ergebnis wird zu einer ganzen Zahl abgerundet
var nItems = Math.floor(gap/frWdth);

// Zwischenraum = gesamter Raum minus (Anzahl Objekte mal Breite)
var curSpace = gap - (nItems * frWdth);
// gesamter Zwischenraum / Anzahl der möglichen einzufügenden Objekte +1
// ergibt die Breite eines Zwischenraums
var oneSpace = curSpace / (nItems+1);
// um diesen Wert muss jedes duplizierte Objekt verschoben werden
var xOffset = oneSpace + frWdth;

// mit "curSel[x]" wird das Objekt, das auf jeden Fall links steht,
// der Variablen zugewiesen (Index [0] oder [1] wird übergeben)
// damit habe ich mein Startobjekt für das erste Duplikat
var curFrame = curSel[x];

// Die Schleife läuft solange wie i < nItems (Anzahl der möglichen Duplikate) ist.
for (var i=0; i<nItems; i++) {
// im ersten Durchlauf wird das linke Objekt mit den angegebenen Versatz dupliziert
// dieses Ergebnis (neues Objekt) wird dann erneut der Variable curFrame zugewiesen usw.
curFrame = curFrame.duplicate(undefined,[xOffset,0]);
}


Das Script in der jetzigen Version hat noch einen kleinen Schönheitsfehler den ich aber in Kauf nehme:

Wenn der Zwischenraum z.B. 170 mm beträgt und ein Kreis eine Breite von 10 mm hat, sollten in den Zwischenraum eigentlich 17 weitere Kreise passen. Es gehen aber im Skript nur 16 rein, weil InDesign intern nicht mit 170 mm sondern mit 169,999999 rechnet. Da ich aber generell mit Math.floor abrunde kommen nur 16 mögliche Duplikate raus.

Mögliche Lösung:Den Distanz-Wert aufrunden.

169.9999999 * 1000 = 169999.9999
0.5 dazuzählen = 170000.4999
abrunden = 170000
durch 1000 teilen = 170.000

Die o.g. if else - Anweisung könnte daher auch so aussehen:

Code
if (aGb[1]<bGb[1]) { 
var gap = Math.floor((((bGb[1]-aGb[3])*1000)+0.5))/1000;
var frWdth = aGb[3]-aGb[1];
var x = 0;
}
else {
var gap = Math.floor((((aGb[1]-bGb[3])*1000)+0.5))/1000;
var frWdth = bGb[3]-bGb[1];
var x = 1;
}


Ich hoffe ich hab beim kopieren keine Fehler gemacht und mein Beispiel bringt dem einen oder anderen was. Ich konnte jedenfalls viel dabei lernen. Danke Hans! :)

(Dieser Beitrag wurde von Kai Rübsamen am 2. Dez 2009, 12:25 geändert)
X

Objekte in regelmäßigen Abständen erstellen

Martin Fischer
  
Beiträge gesamt: 12783

2. Dez 2009, 12:48
Beitrag # 2 von 4
Beitrag ID: #426104
Bewertung:
(2802 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Rübi,

danke für die Beispiele und die Ausführungen.

Vielleicht interessiert Dich auch noch der Thread "Objekte verteilen" per Script.

Dort sind Beispiele für das Verteilen von Objekten genannt.


als Antwort auf: [#426100]

Objekte in regelmäßigen Abständen erstellen

Kai Rübsamen
Beiträge gesamt: 4684

2. Dez 2009, 13:57
Beitrag # 3 von 4
Beitrag ID: #426115
Bewertung:
(2775 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

danke für den Link. Den Beitrag kannte ich noch nicht. :)


als Antwort auf: [#426104]

Objekte in regelmäßigen Abständen erstellen

Hans Haesler
  
Beiträge gesamt: 5826

2. Dez 2009, 23:19
Beitrag # 4 von 4
Beitrag ID: #426173
Bewertung:
(2735 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

bitteschön.

Die von Martin erwähnte Diskussion kannte ich. Hatte aber nichts gesagt, weil die Ausgangslage anders ist.

Gruss, Hans


als Antwort auf: [#426115]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
14.05.2024

Online
Dienstag, 14. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Prozessoptimierung ist ein Teamsport! Keine Software und keine Maschine allein kann Ihnen helfen, die Effizienzpotenziale Ihres Betriebes maximal auszuschöpfen. Von der Auftragsannahme über die Vorstufe und den Druck bis hin zur Weiterverarbeitung – alles muss optimal ineinandergreifen. Apropos Weiterverarbeitung – in vielen Druckbetrieben fristet sie in Sachen Prozessoptimierung immer noch ein Schattendasein. Dabei liegen hier mittlerweile die größten Einsparpotenziale! In einem Webinar von Horizon und Impressed erfahren Sie, wie Sie diese Einsparungen realisieren können. Horizon, bekannt für innovative Lösungen in der Druckweiterverarbeitung, bietet mit iCE LiNK eine Workflowlösung für die Weiterverarbeitung. iCE LiNK überwacht, visualisiert und analysiert Produktionsabläufe und unterstützt bei der Wartung – damit immer alles reibungslos läuft. Den gleichen Anspruch hat der von Impressed entwickelte Impressed Workflow Server – er ist die smarte PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt. Im Webinar zeigen Ihnen die Experten von Horizon und Impressed, wie beide Lösungen im Team die Effizienz und Produktivität Ihres Betriebes steigern können. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Horizon

https://www.impressed.de/schulung.php?c=sDetail&sid=327

Einsparpotenziale in der Weiterverarbeitung
Veranstaltungen
16.05.2024

Online
Donnerstag, 16. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Nein

Organisator: Impressed / Günther Business Solutions

https://www.impressed.de/schulung.php?c=sDetail&sid=326

Und es geht doch: Automatisierung im Großformatdruck!