[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt try- und catch-statement | layer anlegen und fuellen

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

try- und catch-statement | layer anlegen und fuellen

julez
Beiträge gesamt: 15

19. Mai 2016, 12:41
Beitrag # 1 von 3
Bewertung:
(681 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo zusammen,

ich versuche via try und catch mehrere ebenen anzulegen, um dort dann das ein oder andere objekte zu platzieren. beim ersten mal ausfuehren funktioniert das auch. bei jedem weiteren mal, landet allerdings alles in der obersten ebene. a) ist das nicht gewuenscht und b) ist mir nicht ganz klar warum.
ich wende das selbe prinzip fuer das anlegen von farbfeldern und formaten an. und da funktioniert es auch?! irgendwo ist da sicher ein denkfehler, der wahrscheinlich das nachfragen hier nicht mal wert ist. komme aber leider trotzdem nicht drauf ;(

vielen dank vorab.


gruesse
julian


siehe code:
Code
var dok = app.activeDocument; 

try {
var ebene_1 = dok.layers.item("ebene eins");
ebene_1.name;
}
catch (error_speicher) {
ebene_1 = dok.layers.add();
ebene_1.name = "ebene eins";
}

var textfeld_1 = dok.textFrames.add ({
geometricBounds: [10, 5, 15, 10],
contents: "ebene 1"
});

try {
var ebene_2 = dok.layers.item("ebene zwei");
ebene_2.name;
}
catch (error_speicher) {
ebene_2 = dok.layers.add();
ebene_2.name = "ebene zwei";
}

var textfeld_2 = dok.textFrames.add ({
geometricBounds: [15, 10, 20, 15],
contents: "ebene 2"
});

X

try- und catch-statement | layer anlegen und fuellen

Hans Haesler
  
Beiträge gesamt: 5822

19. Mai 2016, 13:49
Beitrag # 2 von 3
Beitrag ID: #549771
Bewertung:
(633 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo julian,

das ist alles ganz logisch. :-)

Bei der ersten Ausführung wird die erste Ebene erzeugt. Und ist zugleich die aktive.
Der Textrahmen 1 wird darauf positioniert.
Dann wird die zweite Ebene hinzugefügt. Und ist die aktive.
Der Textrahmen 2 wird auf Ebene 2 gezeichnet.

Diese Ebene 2 bleibt aber die aktive Ebene.

Beim zweiten Abspielen werden nur die Rahmen erzeugt. Auf Ebene 2.

Abhilfe: Zeilen einfügen, welche die aktive Ebene bestimmen:

Code
var dok = app.activeDocument; 

try {
var ebene_1 = dok.layers.item("ebene eins");
ebene_1.name;
}
catch (error_speicher) {
ebene_1 = dok.layers.add();
ebene_1.name = "ebene eins";
}

app.activeDocument.activeLayer = ebene_1;

var textfeld_1 = dok.textFrames.add ({
geometricBounds: [10, 5, 15, 10],
contents: "ebene 1"
});

try {
var ebene_2 = dok.layers.item("ebene zwei");
ebene_2.name;
}
catch (error_speicher) {
ebene_2 = dok.layers.add();
ebene_2.name = "ebene zwei";
}

app.activeDocument.activeLayer = ebene_2;

var textfeld_2 = dok.textFrames.add ({
geometricBounds: [15, 10, 20, 15],
contents: "ebene 2"
});

Anstelle von 'try/catch()' kann auch 'isValid' eingesetzt werden:

Code
var dok = app.activeDocument; 

var ebene_1 = dok.layers.item("ebene eins");
if (!ebene_1.isValid) {
ebene_1 = dok.layers.add();
ebene_1.name = "ebene eins";
}

app.activeDocument.activeLayer = ebene_1;

var textfeld_1 = dok.textFrames.add ({
geometricBounds: [10, 5, 15, 10],
contents: "ebene 1"
});

var ebene_2 = dok.layers.item("ebene zwei");
if (!ebene_2.isValid) {
ebene_2 = dok.layers.add();
ebene_2.name = "ebene zwei";
}

app.activeDocument.activeLayer = ebene_2;

var textfeld_2 = dok.textFrames.add ({
geometricBounds: [15, 10, 20, 15],
contents: "ebene 2"
});

Das Ausrufezeichen vor 'isValid' bedeutet "nicht", also "nicht gültig".

Noch eine Variante: Statt die aktive Ebene zu definieren, kann beim Erzeugen
der Textrahmen die Präzisierung 'itemLayer' eingesetzt werden:

Code
var dok = app.activeDocument; 

var ebene_1 = dok.layers.item("ebene eins");
if (!ebene_1.isValid) {
ebene_1 = dok.layers.add();
ebene_1.name = "ebene eins";
}

var textfeld_1 = dok.textFrames.add ({
geometricBounds: [10, 5, 15, 10],
contents: "ebene 1",
itemLayer:ebene_1
});

var ebene_2 = dok.layers.item("ebene zwei");
if (!ebene_2.isValid) {
ebene_2 = dok.layers.add();
ebene_2.name = "ebene zwei";
}

var textfeld_2 = dok.textFrames.add ({
geometricBounds: [15, 10, 20, 15],
contents: "ebene 2",
itemLayer:ebene_2
});

Alles klar?

Gruss, Hans


als Antwort auf: [#549767]
(Dieser Beitrag wurde von Hans Haesler am 19. Mai 2016, 15:05 geändert)

try- und catch-statement | layer anlegen und fuellen

julez
Beiträge gesamt: 15

19. Mai 2016, 15:20
Beitrag # 3 von 3
Beitrag ID: #549776
Bewertung:
(594 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo hans,

jetzt leuchtet es auch mir ein ;D dankeschoen fuer die ausfuehrliche antwort. du hast recht – logisch, wenn man es erst mal weiss. variante 1 scheint mir vom aufwand die praktikabelste zu sein.

super! danke.


gruesse
julian


als Antwort auf: [#549771]