[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

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

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

faxinger666
Beiträge gesamt: 167

19. Mär 2019, 18:08
Beitrag # 1 von 14
Bewertung:
(3537 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebes Forum,
ich komme leider bei folgendem Problem nicht weiter:

Ich habe ein ID-Dokument mit 20 Ebenen und es sollen per script nur die Ebenen sichtbar geschaltet werden die in einem Array hinterlegt sind.
Ich habe leider keine Idee wie ich das umsetzen könnte.

Habt ihr eine Idee?

Mein Code bis jetzt:
Code
var _dok = app.activeDocument; 
var _all_layers_names = _dok.layers.everyItem().name;

var _cur_layer = _all_layers_names[k];
for (var k = 0; k < _all_layers_names; k++)
{
if (_cur_layer == "RW_BG" | "Artikel")
{
_cur_layer.visible = true;
}
else {
_cur_layer.visible = false;
}
};

So funktioniert es leider nicht

Habt ihr eine Idee?

Danke
LG
faxinger
X

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

Martin Fischer
  
Beiträge gesamt: 12783

19. Mär 2019, 18:41
Beitrag # 2 von 14
Beitrag ID: #569338
Bewertung: |||
(3528 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Faxinger,

in Deinem Code sind ein paar Dinge durcheinander geraten.

_cur_layer wird außerhalb der Schleife deklariert.
In der Schleife verwechselst Du die Namen der Ebene mit der Ebene selbst.
Und die Syntax Deiner GREP-Prüfung (match) des Namens passt auch noch nicht so richtig.

Ich spare mir eine lange Ausführung.
Vergleiche mal damit:

Code
var _dok = app.activeDocument;  
var _all_layers_names = _dok.layers.everyItem().name;

for (var k = 0; k < _all_layers_names.length; k++)
{
_cur_layer = _all_layers_names[k];

if (_cur_layer.match(/^(RW_BG|Artikel)$/) != null)
{
_dok.layers.itemByName(_cur_layer).visible = true;
}
else
{
_dok.layers.itemByName(_cur_layer).visible = false;
}
};


Wenn noch Fragen bleiben, her damit. ;-)


als Antwort auf: [#569336]
(Dieser Beitrag wurde von Martin Fischer am 19. Mär 2019, 18:42 geändert)

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

Uwe Laubender
Beiträge gesamt: 5319

19. Mär 2019, 19:02
Beitrag # 3 von 14
Beitrag ID: #569340
Bewertung: |
(3518 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
man könnte auch zu Beginn des Skripts alle Ebenen auf einen Schlag auf unsichtbar setzen:

Code
_dok.layers.everyItem().visible = false; 


Dann brauchts das else{} nicht.


als Antwort auf: [#569338]

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

Martin Fischer
  
Beiträge gesamt: 12783

19. Mär 2019, 19:05
Beitrag # 4 von 14
Beitrag ID: #569341
Bewertung:
(3516 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

Du hast freilich Recht.

Man könnte noch einige andere Dinge (RegExp) straffen.

Aber ich wollte nur das Allernötigste ändern, damit Faxinger seine eigene Struktur darin möglichst wiedererkennt und die Unterschiede leichter nachvollziehen kann.


als Antwort auf: [#569340]

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

Uwe Laubender
Beiträge gesamt: 5319

19. Mär 2019, 19:27
Beitrag # 5 von 14
Beitrag ID: #569343
Bewertung:
(3508 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
ja klar. Doch ich dachte, na, wenn faxinger bereits mit layers.everyItem() gearbeitet hat, dann kann er das gleich nochmal anwenden. :-)


als Antwort auf: [#569341]

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

faxinger666
Beiträge gesamt: 167

19. Mär 2019, 21:08
Beitrag # 6 von 14
Beitrag ID: #569349
Bewertung:
(3490 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Martin für die schnelle und gute Antwort.

Ja so funktioniert es.

Danke und schönen Abend


als Antwort auf: [#569338]

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

faxinger666
Beiträge gesamt: 167

19. Mär 2019, 21:11
Beitrag # 7 von 14
Beitrag ID: #569350
Bewertung:
(3485 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,
danke für deinen Beitrag.

Ja ich könnte zuerst die Sichtbarkeit aller Ebenen auf aus stellen, aber ich frage davor noch den Status einer bestimmten Ebene zu Anfang ab und der Sichtbarkeitsstatus soll erhalten bleiben.

Schönen Abend.


als Antwort auf: [#569343]

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

faxinger666
Beiträge gesamt: 167

19. Mär 2019, 21:21
Beitrag # 8 von 14
Beitrag ID: #569351
Bewertung:
(3481 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

jetzt drängt sich doch noch eine Frage auf:

Wie kann ich bei der Schleife berücksichtigen dass eine Ebene namens "Fond_Kamp" nur eingeblendet wird, wenn sie zu Beginn eingeblendet war und sonst ausgeblendet wird?

Oder etwas detailierter: Blende mir alle Ebenen aus bis auf "RW_BG" und "Artikel" und eventuell (= Ebene "Fond_Kamp" war zum Zeitpunkt des Öffnen des Dokuments sichtbar) die Ebene "Fond_Kamp"

Geht das überhaupt?
Ich habs bei der if Abfrage mit einer und Verknüpfung versucht, aber das war falsch.

Danke für jeden Hinweis.

LG
faxinger


als Antwort auf: [#569349]

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

Uwe Laubender
Beiträge gesamt: 5319

19. Mär 2019, 21:28
Beitrag # 9 von 14
Beitrag ID: #569353
Bewertung:
(3476 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,
geh' mal in Dich :-)

Gibt's sonst noch irgendwelche Anforderungen?


als Antwort auf: [#569351]

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

faxinger666
Beiträge gesamt: 167

19. Mär 2019, 21:32
Beitrag # 10 von 14
Beitrag ID: #569354
Bewertung:
(3472 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

naja in mir finde ich leider net viel ;-)

Nein sonst gibts keine Anforderungen.

Ich habs auch mit einer oder Abfrage probiert, hat auch nicht geklappt :-(.

LG
faxinger


als Antwort auf: [#569353]

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

Uwe Laubender
Beiträge gesamt: 5319

19. Mär 2019, 22:37
Beitrag # 11 von 14
Beitrag ID: #569356
Bewertung: |||
(3452 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,
ich glaube, dann ist's am Besten aus der bisherigen Struktur des Skripts auszubrechen und das Ganze neu zu betrachten.

Beispielsweise wie im Code unten, in dem ich zwei Fälle unterscheide und die zugehörigen Namen in zwei verschiedenen Arrays ablege. Der Clou dabei ist, dass man den Visible-Status zusammen mit dem Namen der Ebene in einem Objekt bequem speichern und auch auswerten kann. Als Key/Value-Paar. Key ist der Name der Ebene, Value ist true oder false, je nachdem ob die Ebene sichtbar ist oder nicht.

Code
// Array 1: All layers with that name, set layer to visible: 
var setToVisible =
[
"RW_BG" ,
"Artikel"
];

// Array 2: All layers with that name, set layer to visible IF initally the layer is visible:
var ifInitiallyIsVisible =
[
"Fond_Kamp"
];

var doc = app.documents[0];
var allLayersNames = doc.layers.everyItem().name;
var allLayersNamesLength = allLayersNames.length;

// Let's store all layer names and their visibility in an object:
var allLayersObject = {};

for( var n=0; n<allLayersNamesLength; n++ )
{
// Key is layer name, value is current visibility ( true or false ):
allLayersObject[ allLayersNames[n] ] = doc.layers.itemByName(allLayersNames[n]).visible ;
};

// Set all layers to invisible; no fear, we have the inital state already saved :-)
doc.layers.everyItem().visible = false;

// Test if names are used and if so set layer to visible:
// ONLY ONE CONDITION:
for( var n=0; n<setToVisible.length; n++ )
{
if( setToVisible[n] in allLayersObject )
{ doc.layers.itemByName( setToVisible[n] ).visible = true };
};

// Test if names are used and if so set layer to visible if the layer initially was visible.
// TWO CONDITIONS:
for( var n=0; n<ifInitiallyIsVisible.length; n++ )
{
if
(
ifInitiallyIsVisible[n] in allLayersObject
&&
allLayersObject[ ifInitiallyIsVisible[n] ]
)
{
doc.layers.itemByName( ifInitiallyIsVisible[n] ).visible = true
};
};



als Antwort auf: [#569354]

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

faxinger666
Beiträge gesamt: 167

19. Mär 2019, 22:48
Beitrag # 12 von 14
Beitrag ID: #569357
Bewertung:
(3445 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja da staune ich aber.

Danke Uwe. Auf so eine Lösung wäre ich nie gekommen.

Vielen vielen Dank.


LG
faxinger


als Antwort auf: [#569356]

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

Uwe Laubender
Beiträge gesamt: 5319

19. Mär 2019, 22:57
Beitrag # 13 von 14
Beitrag ID: #569359
Bewertung:
(3440 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Und die lässt sich, wie Du wahrscheinlich bemerkt hast, ausbauen:

Die beiden Arrays lassen sich leicht mit Namen erweitern.

Wir könnten auch noch eine log-Funktion einbauen, die auswertet, ob die Namen auch gefunden wurden. Und falls nicht, eine log-Datei mit den nicht gefundenen Namen schreiben oder einen Alert zum Abschluß ausgeben.


als Antwort auf: [#569357]

Ebenensichtbarkeit nur für Ebenen mit Namen aus Array

Uwe Laubender
Beiträge gesamt: 5319

19. Mär 2019, 23:06
Beitrag # 14 von 14
Beitrag ID: #569360
Bewertung:
(3430 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Natürlich lässt sich mein Code auch noch auf Geschwindigkeit optimieren, sprich, die Anzahl der DOM-Objekt-Zugriffe vermindern, aber ich lass das mal so stehen…

Man könnte noch ein Array erzeugen:
Code
var layerVisibiltyArray = doc.layers.everyItem().visible; 


und mit diesem dann das allLayersObject füttern, anstatt einen Zugriff direkt auf die Layer-Objekte zu machen.


als Antwort auf: [#569359]
X

Aktuell

PDF / Print
enfocus_300

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!