[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Objekte löschen anhand einer Farbe

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

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 241

31. Mai 2019, 11:23
Beitrag # 1 von 57
Bewertung:
(4757 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebes Forum,

ich bitte euch wieder mal um eure Mithilfe.

Mein Ziel ist:
Ich habe ein Dokument mit einer Doppelseite oder Einzelseite (das kann von Dokument zu Dokument variieren) und mehreren Ebenen. In diesem Dokument sollen alle Elemente (Polygone) die mit 100 % Yellow gefüllt sind gelöscht werden.

Nur ist mir nicht klar wie ich diese Elemente auswählen könnte. Das Gelb ist zwar in den Farbfeldern definiert, hat aber keinen "richtigen" Namen sondern nur die Farbwerte als Namen.



Habt ihr eine Idee?

Vielen Dank.
LG faxinger
X

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2384

31. Mai 2019, 12:35
Beitrag # 2 von 57
Beitrag ID: #570467
Bewertung:
(4734 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Zitat Nur ist mir nicht klar wie ich diese Elemente auswählen könnte. Das Gelb ist zwar in den Farbfeldern definiert, hat aber keinen "richtigen" Namen sondern nur die Farbwerte als Namen.

Das was Du siehst, ist der Name, also wo genau ist Dein Problem?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570465]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 241

31. Mai 2019, 13:38
Beitrag # 3 von 57
Beitrag ID: #570468
Bewertung:
(4719 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Werner,

ich habe mich geirrt, ich muss nur alle Polygone auswählen und löschen unabhängig von der Farbe.

Was ich noch wissen müsste ist wie ich an alle Polygone rankomme.
Also alle Polygone auf allen Seiten und allen Ebenen.
Ich habe zwar schon etwas Code aber der funktioniert schon von der Auswahl her nicht:
Code
var _dok= app.activeDocument; 

var _polys = _dok.polygons.everyItem().getElements();
alert (_polys.length);



if(!_polys.parentPage == null){_polys.remove()};


Bitte um kurze Antwort.

Danke
LG
faxinger


als Antwort auf: [#570467]
(Dieser Beitrag wurde von faxinger am 31. Mai 2019, 13:40 geändert)

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2384

31. Mai 2019, 14:12
Beitrag # 4 von 57
Beitrag ID: #570469
Bewertung:
(4707 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Bitte,

also dann vielleicht so:
Code
main(); 

function main() {
try{
var /*Array*/pIs = app.documents[0].allPageItems, /*Int*/l = pIs.length,
/*Array*/allPolygons = [];

for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
allPolygons.push(pIs[i]);
}
}
alert(allPolygons.length);
}
catch (error){
alert(error.message + "\nin Zeile: \n" + error.line);
}
// DESCRIPTION gets the inner constructor name of an object, e. g. pageItem -> TextFrame, Rectangle ...
// Dateiname: wpsInnerConstructorName.jsx
// [modified]
// created:Fri Aug 25 2017 15:31:53 GMT+0200
// for this Script
// © 2017 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: werner.perplies@weepee.de
// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/wpsInnerConstructorName.jsx";
// [end of header]


// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/ErrorHandling/wpsHandleError.jsx";

/*String*/function wpsInnerConstructorName(/*Object*/o)
{
try
{
if (typeof(o) != "object")
{
var r = (typeof o ).toString().split("");
r[0] = r[0].toUpperCase();
return r.join("");
}
var constructorName = o.constructor.name;
if (!("getElements" in o))
return constructorName;
while (constructorName != o.getElements()[0].constructor.name)
{
if (!("getElements" in o))
break;
o = o.getElements()[0];
constructorName = o.constructor.name;
}
return constructorName;
}
catch (error)
{
if (error.number == 21)
return "Null";
// throw wpsHandleError(error, $.stack, "wpsInnerConstructorName");
// throw error;
}
}
}


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570468]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 241

31. Mai 2019, 14:20
Beitrag # 5 von 57
Beitrag ID: #570470
Bewertung:
(4698 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Werner,

aber leider funktioniert das Skript nicht. Es werden keine polygone gelöscht.

Die anzahl der Polygone wird ausgegeben.

LG
faxinger


als Antwort auf: [#570469]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2384

31. Mai 2019, 14:34
Beitrag # 6 von 57
Beitrag ID: #570471
Bewertung:
(4688 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Darauf habe ich Dir geantwortet:

Zitat Was ich noch wissen müsste ist wie ich an alle Polygone rankomme.


löschen müsste so funktionieren:
Code
... 
for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
pIs[i].remove();
}
}
...


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570470]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5747

31. Mai 2019, 20:34
Beitrag # 7 von 57
Beitrag ID: #570472
Bewertung: ||
(4614 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Antwort auf: Was ich noch wissen müsste ist wie ich an alle Polygone rankomme.

Versuche es bitte mal damit:

Code
var allPolys = app.documents[0].polygons; 
var nPolys = allPolys.length;
for (var p=nPolys-1; p>-1; p--) {
allPolys[p].remove();
}

Auch mit diesem Einzeiler sollte es klappen:

Code
app.documents[0].polygons.everyItem().remove(); 

Voraussetzungen: Die Objekte sind nicht gruppiert. Weder Ebenen noch Objekte sind gesperrt.

Gruss, Hans


als Antwort auf: [#570470]
(Dieser Beitrag wurde von Hans Haesler am 1. Jun 2019, 08:03 geändert)

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 241

3. Jun 2019, 09:06
Beitrag # 8 von 57
Beitrag ID: #570489
Bewertung:
(3534 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans, hallo Werner,

vielen Dank für eure Antworten. Ich muss gestehen dass mir der Einzeiler bzw. das Kurzscript von Hans besser gefällt, da ich dabei auch navollziehen kann was genau passiert, was ich bei Werners Script leider nicht kann. Das ist für mich zu hoch. ;-)

Es ist zwar schön etwas Einblick in die Hohe Kunst des JS zu bekommen, aber Verständnis geht für mich vor.

Danke für eure Bemühungen.

@Hans: Die Variable runterzuzählen in der for-Schleife hat wahrscheinlich den Grund das Objekte gelöscht werden und somit die Anzahl der zu löschenenden Objekte bei jedem Durchgang kleiner wird, oder?

LG
faxinger


als Antwort auf: [#570472]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5747

3. Jun 2019, 09:39
Beitrag # 9 von 57
Beitrag ID: #570491
Bewertung: ||
(3525 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

bitte sehr. Und Deine Auslegung ist richtig.

Wenn die Schleife durch den Array vorwärts läuft ...

Code
var allPolys = app.documents[0].polygons; 
var nPolys = allPolys.length;
for (var p=0; p<nPolys; p++) {
allPolys[p].remove();
}

... kommt eine Fehlermeldung, wenn mehr als ein Polygon vorhanden ist.

Angenommen, im Dokument sind drei Polygons:
– Beim ersten Durchgang wird ein Polygon entfernt. Es verbleiben zwei.
– Beim zweiten Durchgang wird eines davon entfernt. Es verbleibt eines.
– Beim dritten Durchgang versucht das Script das dritte Polygon (von dreien) zu löschen.
Aber das gelingt nicht, weil nur noch eines vorhanden ist.

Bitte ausprobieren!

*****
Wenn die Schleife rückwärts läuft, muss als Startwert die Anzahl Objekte minus eins verwendet werden, weil das letzte Objekt mit "0" adressiert wird:
– Durchgang 1: lösche Objekt 2;
– Durchgang 2: lösche Objekt 1;
– Durchgang 3: lösche Objekt 0;

Also nochmals:
Code
var allPolys = app.documents[0].polygons; 
var nPolys = allPolys.length;
for (var p=nPolys-1; p>-1; p--) {
allPolys[p].remove();
}

Gruss, Hans


als Antwort auf: [#570489]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2384

3. Jun 2019, 10:58
Beitrag # 10 von 57
Beitrag ID: #570492
Bewertung:
(3507 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

jetzt muss ich doch mal nachfragen:

Hans Beispiel zeigt wirklich alle Polygone einer Datei an?

Bei meiner Beispieldatei gilt:

Hans Methode: 3

Meine Methode: 40!

Und Du fragtest doch nach allen Polygonen, oder?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570489]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 241

3. Jun 2019, 17:20
Beitrag # 11 von 57
Beitrag ID: #570504
Bewertung:
(3456 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

du hast Recht, mit deiner Methode bekomme ich mehr Ergebnisse.

Aber ich bin zu blöd den "Löschcode" richtig einzusetzen.

Code
for (var i = 0; i < l; i++){  
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
pIs[i].remove();
}
}


Ersetzt dieser Code den Code ?:
Code
     for (var i = 0; i < l; i++){  
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
allPolygons.push(pIs[i]);
}
}


Falls ja hat das bei mir nicht geklappt.

Und wofür benötige ich den "InnerConstructionName"?


Danke
LG
faxinger


als Antwort auf: [#570492]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2384

3. Jun 2019, 17:35
Beitrag # 12 von 57
Beitrag ID: #570505
Bewertung:
(3447 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Zitat du hast Recht, mit deiner Methode bekomme ich mehr Ergebnisse.

Ich weiß! :-)

Ich hätte jetzt gerne den Block zitiert, aber wieder einmal schafft das der Editor des Forums nicht.

Also Kurzfassung:

Ja, so müsste es eigentlich klappen:
Code
 allPolygons.push(pIs[i]);  wird durch pIs[i].remove(); 

ersetzt.

Was klappt denn nicht, wird ein Fehler geworfen?
Mit welchem Polygon klappt es nicht?

Zitat Und wofür benötige ich den "InnerConstructionName"?


In PageItem ist ein Sammelbegriff für Rectangles, Textframes, Polygons usw.

InnerConstructorName ermittelt den Typ des PageItems.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570504]
(Dieser Beitrag wurde von Gerald Singelmann am 7. Jun 2019, 12:19 geändert)

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2384

4. Jun 2019, 06:18
Beitrag # 13 von 57
Beitrag ID: #570509
Bewertung:
(3387 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin faxinger,

ich habe es gereade noch einmal selbst ausprobiert, bei mir klappt alles wie gewünacht:
Code
function main() { 
try{
var /*Array*/pIs = app.documents[0].allPageItems, /*Int*/l = pIs.length,
/*Array*/allPolygons = [];

for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
// allPolygons.push(pIs[i]); // entkommentieren zur Ermittlung der Anzahl, kommentieren zum Löschen
// pIs[i].remove(); // kommentieren zur Ermittlung der Anzahl, entkommentieren zum Löschen
}
}
alert(allPolygons.length);
}
catch (error){
alert(error.message + "\nin Zeile: \n" + error.line);
}
// DESCRIPTION gets the inner constructor name of an object, e. g. pageItem -> TextFrame, Rectangle ...
// Dateiname: wpsInnerConstructorName.jsx
// [modified]
// created:Fri Aug 25 2017 15:31:53 GMT+0200
// for this Script
// © 2017 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: werner.perplies@weepee.de
// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/wpsInnerConstructorName.jsx";
// [end of header]


// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/ErrorHandling/wpsHandleError.jsx";

/*String*/function wpsInnerConstructorName(/*Object*/o){
...


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570505]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2384

4. Jun 2019, 08:09
Beitrag # 14 von 57
Beitrag ID: #570510
Bewertung:
(3365 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Und um auf das ursprüngliche Thema zurückzukommen:
Zitat Objekte löschen anhand einer Farbe

Code
main(); 

function main() {
try{
var /*Array*/pIs = app.documents[0].allPageItems, /*Int*/l = pIs.length,
/*Array*/allPolygons = [], /*Array*/allPolygonsWithDefinedFillColor = [],
/*Array*/allPolygonsWithDefinedStrokeColor = [], /*Array*/deletedItems = [];

for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
// allPolygons.push(pIs[i]); // entkommentieren zur Ermittlung der Anzahl, kommentieren zum Löschen
// pIs[i].remove(); // kommentieren zur Ermittlung der Anzahl, entkommentieren zum Löschen
// allPolygonsWithDefinedFillColor.push(pIs[i].fillColor.name);
// allPolygonsWithDefinedStrokeColor.push(pIs[i].fillColor.name);
// Polygon mit einer bestimmten StrokeColor löschen
// detect collection of pIs[i].strokeColor:
if (pIs[i].strokeColor == app.activeDocument.colors.itemByName("Black"))
{
deletedItems.push(pIs[i].strokeColor.name);
pIs[i].remove();
}
}
}
// alert(allPolygons.length);
// alert(allPolygonsWithDefinedFillColor.join("\n"));
// alert(allPolygonsWithDefinedStrokeColor.join("\n"));
alert(deletedItems.join("\n"));
}
catch (error){
alert(error.message + "\nin Zeile: \n" + error.line);
}
// DESCRIPTION gets the inner constructor name of an object, e. g. pageItem -> TextFrame, Rectangle ...
// Dateiname: wpsInnerConstructorName.jsx
// [modified]
// created:Fri Aug 25 2017 15:31:53 GMT+0200
// for this Script
// © 2017 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: werner.perplies@weepee.de
// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/wpsInnerConstructorName.jsx";
// [end of header]


// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/ErrorHandling/wpsHandleError.jsx";

/*String*/function wpsInnerConstructorName(/*Object*/o){
...


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570509]

Objekte löschen anhand einer Farbe

Uwe Laubender
Beiträge gesamt: 4493

4. Jun 2019, 10:35
Beitrag # 15 von 57
Beitrag ID: #570516
Bewertung:
(3346 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: … Und wofür benötige ich den "InnerConstructionName"? …


Hallo Faxinger,
wenn Du nach pageItems fahndest, bekommst Du pageItems zurück.
Die Oberklasse gewissermaßen von "Rectangles", "Ovals", "Polygons" etc.pp.

Willst Du nun wissen, was ein bestimmtes pageItems nun eigentlich ist, kannst Du das beispielsweise so machen:

Code
pageItem.getElements()[0] 


InDesign ist dann gezwungen genau nachzusehen, um was es sich handelt.
Also haben wir's mit einem Rechteck, Polygon etc.pp. zu tun.

Code
var doc = app.documents.add(); 
var objectOnPage = doc.rectangles.add({geometricBounds: [0,0,100,100]});

$.writeln( doc.pageItems[0] ); // [object PageItem]
$.writeln( doc.pageItems[0].getElements()[0] ); // [object Rectangle]

*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#570504]
X
Hier Klicken

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
17.10.2019

Digicomp Academy AG, Limmatstrasse 50, Zürich
Donnerstag, 17. Okt. 2019, 18.00 - 20.30 Uhr

Vortrag

Farben sind ein wichtiges Gestaltungselement in Corporate Design und Branding. Als Sinneseindruck, der von Beleuchtung, Materialeigenschaften und Kontext abhängt, ist eine Farbe jedoch schwer zu fassen. Der Verein freieFarbe setzt sich für eine offene, digitale Farbkommunikation ein und hat hierzu das HLC-Farbsystem entwickelt. Dieses hilft, zwischen Gestaltung am Computer, physischen Farbmustern und unterschiedlichen Verfahren in der Produktion eine Brücke zu schlagen. Es basiert zudem auf bestehenden ISO-Standards für die Druckindustrie.

Donnerstag, 17. Oktober 2019, 18 bis 20.30 Uhr

Ja

Organisator: Digicomp Academy AG

https://www.meetup.com/de-DE/Publishing-Group-Switzerland/events/264611769/

Freie Farbe für die digitale Zukunft
Veranstaltungen
21.10.2019 - 22.10.2019

München
Montag, 21. Okt. 2019, 09.30 Uhr - Dienstag, 22. Okt. 2019, 17.30 Uhr

Schulung, Seminar

Wer hochwertige und farbechte Ergebnisse im Digitaldruck erzielen will, der braucht umfassende Colormanagemement- und PDF-Kenntnisse. Selbst wenn die Maschine kalibriert und das Rip richtig konfiguriert ist, lassen die Ergebnisse oft zu wünschen übrig. Der Grund hierfür liegt zu 90 % in den Daten und in falsch eingestellten Anwendungsprogrammen, auch in falschen Einstellungen im Druckmenü.

Nein

Organisator: Cleverprinting.de

https://www.cleverprinting.de/zweitaegige-weiterbildung-zum-digitaldruck-operator/

Zweitägige Weiterbildung zum Digitaldruck-Operator