[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:
(7891 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: 2500

31. Mai 2019, 12:35
Beitrag # 2 von 57
Beitrag ID: #570467
Bewertung:
(7868 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:
(7853 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: 2500

31. Mai 2019, 14:12
Beitrag # 4 von 57
Beitrag ID: #570469
Bewertung:
(7841 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: [email protected]
// #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:
(7832 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: 2500

31. Mai 2019, 14:34
Beitrag # 6 von 57
Beitrag ID: #570471
Bewertung:
(7822 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: 5786

31. Mai 2019, 20:34
Beitrag # 7 von 57
Beitrag ID: #570472
Bewertung: ||
(7748 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:
(6668 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: 5786

3. Jun 2019, 09:39
Beitrag # 9 von 57
Beitrag ID: #570491
Bewertung: ||
(6659 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: 2500

3. Jun 2019, 10:58
Beitrag # 10 von 57
Beitrag ID: #570492
Bewertung:
(6641 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:
(6590 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: 2500

3. Jun 2019, 17:35
Beitrag # 12 von 57
Beitrag ID: #570505
Bewertung:
(6581 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: 2500

4. Jun 2019, 06:18
Beitrag # 13 von 57
Beitrag ID: #570509
Bewertung:
(6521 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: [email protected]
// #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: 2500

4. Jun 2019, 08:09
Beitrag # 14 von 57
Beitrag ID: #570510
Bewertung:
(6499 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: [email protected]
// #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: 4674

4. Jun 2019, 10:35
Beitrag # 15 von 57
Beitrag ID: #570516
Bewertung:
(6480 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

Aktuell

PDF / Print
pitstopp_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
25.05.2020 - 29.05.2020

Experten teilen mit Dir ihr Wissen

Online
Montag, 25. Mai 2020, 11.00 Uhr - Freitag, 29. Mai 2020, 17.45 Uhr

Seminar

Möchtest du deine Online-Reichweite vergrössern und deine digitale Präsenz optimieren? Dann könnte dich der #DigitalMarketingSummit vom 25. bis 29. Mai 2020 interessieren. An 10 Sessions zu verschiedenen Themen erhältst du je drei sofort umsetzbare Tipps. Montag 25.05.2020 Facebook für Unternehmen LinkedIn Profil und mehr Dienstag 26.05.2020 Twitter für Unternehmen Inhalt & Funktion der Webseite überprüfen Mittwoch 27.05.2020 E-Commerce (mit WooCommerce) Grundlagen für die Digitalisierung Donnerstag 28.05.2020 Google Search Ads (SEA) Google My Business (Maps Eintrag) Freitag 29.05.2020 Xing für Unternehmen Storytelling mit Instagram

Teilnahme Gratis!!
Anmeldung unter: https://digital.rogerruckstuhl.ch/digital-marketing-summit

Ja

Organisator: Roger Ruckstuhl Digital Marketing

Kontaktinformation: Eric Mächler, E-Mailinfo AT ericmaechler DOT com

https://digital.rogerruckstuhl.ch/digital-marketing-summit/

Digital Marketing Summit für Selbständige, Einzelunternehmer Dienstleister & Serviceanbieter
Veranstaltungen
02.06.2020 - 03.06.2020

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Dienstag, 02. Juni 2020, 08.30 Uhr - Mittwoch, 03. Juni 2020, 17.00 Uhr

Kurs

Dieser Basic-Kurs ist der perfekte Einstieg in die Welt von InDesign, dem vielseitigen Layout-Programm. Sie lernen, wie InDesign aufgebaut ist, wie saubere Dokumente erstellt werden und wie man korrekt mit gelieferten InDesign-Projekten umgeht.

Preis: CHF 1'400.–
Dauer: 2 Tage

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.digicomp.ch/weiterbildung/software-anwendungs-trainings/adobe-trainings/desktop-publishing/adobe-indesign-cc/kurs-indesign-cc-basic

Neuste Foreneinträge


Dateien kopieren

Tabulator Tastendruck automatisch einf�gen

Feldberechnung: null ausblenden

Spielentwicklung Deutsch als Zweitsprache Indesign Vorbereitung

Formatierung von eingef�gtem Text

Grobes ICC-Profil aus wenigen gemessenen Farben

Eizo vs. BenQ

Writer / Copywriter

Time Machine l�scht keine alten Dateien mehr

zwei Seiten vertauschen
medienjobs