[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

Uwe Laubender
Beiträge gesamt: 5316

7. Jun 2019, 12:37
Beitrag # 31 von 57
Beitrag ID: #570626
Bewertung:
(5893 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,
ich weiss ja nicht, ob ihr mal in die von faxinger angehängte IDML-Datei reingeschaut habt, aber dort sind vier Objekte vertreten. Mit jeweils 114 oder 77 Pfaden pro Objekt.

https://www.hilfdirselbst.ch/...ostatt_id=9333;t=def


als Antwort auf: [#570622]
X

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 246

7. Jun 2019, 14:37
Beitrag # 32 von 57
Beitrag ID: #570628
Bewertung:
(5874 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo ihr Lieben,

nun ist der Fall eingetreten, dass sich manche Polygone nicht per Skript löschen lassen.

Siehe anhängliche idml:

Alle roten Polygone werden nicht gelöscht nur das blaue Polygon wird gelöscht.
Meine Fragen: wieso und warum?
Hier nochmal das Skript das hier zur Anwendung kommt:
Code
var allObj = app.documents[0].allPageItems;  
var nObj = allObj.length;

for (var n=nObj-1; n>-1; n--) {
try {
if (allObj[n].paths[0].pathPoints.length > 4) {
allObj[n].remove();
}
}
catch (e) {
}
}


Vielen Dank und schönes Wochenende
LG
faxinger


als Antwort auf: [#570626]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5826

7. Jun 2019, 15:00
Beitrag # 33 von 57
Beitrag ID: #570630
Bewertung:
(5867 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Antwort auf: Siehe anhängliche idml:

Das erwähnte Dokument ist nicht angehängt.

Würdest Du es bitte nochmals anhängen und den Button "Anhang speichern" betätigen?

@ Uwe: Ja das erste IDML habe ich angeschaut. Mit der aktuellen Version des Scripts werden alle vier Objekte entfernt.

Gruss, Hans


als Antwort auf: [#570628]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 246

7. Jun 2019, 15:12
Beitrag # 34 von 57
Beitrag ID: #570631
Bewertung:
(5861 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke für den Hinweis,

ja ich hatte nicht auf die Dateigrößenbeschränkung geachtet.


die Datei ist jetzt dabei.


LG
faxinger


als Antwort auf: [#570630]
Anhang:
test3.idml (271 KB)

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2762

7. Jun 2019, 15:14
Beitrag # 35 von 57
Beitrag ID: #570632
Bewertung:
(5860 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Zitat
catch (e) {
}


Immer wenn ich so etwas sehe, sträuben sich meine Haare, so etwas macht man einfach nicht!

Code
	}   
catch (e) {
if ((error.number == ?) || (error.number == ?) ||((error.number == ?))){
// diese Fälle dürfen hier übersprungen werden,
}
else{
// hier geht etwas fürchterlich schief!
alert(error.message);
}
}


Prüfe doch erst einmal, ob Fehler geworfen werden, und ob einer davon vielleicht die Antwort auf Deine Frage enthält!


als Antwort auf: [#570628]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5826

7. Jun 2019, 15:31
Beitrag # 36 von 57
Beitrag ID: #570633
Bewertung:
(5850 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

danke für die Datei. Eines der Objekte hat 46 Pfade!
Und der erste Pfad hat nur 3 Pfadpunkte. Deshalb wird das Objekt nicht entfernt.

Bevor ich versuche, eine Lösung zu finden, gehe ich jetzt auf eine Ausfahrt mit dem Rennrad.

Auf die Gefahr hin, dass mir Werner zuvorkommt ... :-))

Gruss, Hans


als Antwort auf: [#570631]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 246

7. Jun 2019, 15:32
Beitrag # 37 von 57
Beitrag ID: #570634
Bewertung:
(5849 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

Der Fehler lautet: "Ergebnis: undefined"

Wenn ich die pathPoints.length von 5 auf 2 vermindere werden alle Objekte gelöscht. Aber leider auch Objekte die nicht gelöscht werden sollen.

Es erschließt sich mir leider nicht wieso die Objekte die eigentlich wesentlich mehr als 5 Pfadpunkte haben erst bei einer Abfrage ob sie mehr als 2 Pfadpunkte haben gelöscht werden.


als Antwort auf: [#570632]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 246

7. Jun 2019, 15:36
Beitrag # 38 von 57
Beitrag ID: #570635
Bewertung:
(5847 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans, du bist mir zuvorgekommen mit der Antwort.

Ah ich verstehe. Aber es sind doch verknüpfte Pfade. -> somit ein Objekt.

Viel Spass beim Radfahren.

LG
faxinger

Ps. ich bin dann auch mal weg.
Schönes WE.


als Antwort auf: [#570633]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2762

7. Jun 2019, 15:51
Beitrag # 39 von 57
Beitrag ID: #570636
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

probiere es mal so:
Code
var allObj = app.documents[0].allPageItems;   
var nObj = allObj.length;

for (var n=nObj-1; n>-1; n--) {
try {
if ("paths" in allObj[n]){
for (var i = 0; i < allObj[n].paths.length; i++)
{
if (allObj[n].paths[i].pathPoints.length > 4) {
allObj[n].remove();
break;
}
}
}
}
catch (e) {
alert(e.message)
}
}



als Antwort auf: [#570635]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5826

8. Jun 2019, 10:17
Beitrag # 40 von 57
Beitrag ID: #570637
Bewertung:
(5751 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

geprüft und für recht gut befunden :-)

Der geniale if-Test von "path" vermeidet eine Fehlermeldung, wenn das aktuelle Objekt eine Gruppe oder ein Bild ist.

Die 'alert(e.message)' meldet eigentlich nur gesperrte Objekte, weil sich diese nicht entfernen lassen. Doch sie könnten vorher entsperrt werden. Mit oder ohne vorhergehende Gesperrt-Prüfung. Das wird funktionieren. Aber nur wenn sich solche Objekte nicht in einer Gruppe befinden.

*****
Deshalb ein neuer Ansatz: Vorgängig die Ebenen entsperren und alle Gruppen auflösen. Somit wäre 'allPageItems' nicht mehr zwingend. Aber mit 'pageItems' erreicht man verankerte Rahmen nicht.

Code
// das aktuelle Dokument 
var curDoc = app.documents[0];

// die Ebenen vorsorglich entsperren
var nLayers = curDoc.layers.length;
for (var n=0; n<nLayers; n++) {
curDoc.layers[n].locked = false;
}

// eventuelle Gruppen zählen
var nGroups = curDoc.groups.length;
// eine Schleife, bis keine Gruppe mehr da ist
while (nGroups > 0) {
for (var g=nGroups-1; g>-1; g--) {
curDoc.groups[g].ungroup();
}
nGroups = curDoc.groups.length;
}

// die 'allPageItems' auflisten und zählen
var allObj = curDoc.allPageItems;
var nObj = allObj.length;

// eine Schleife durch die 'allPageItems'
for (var n=nObj-1; n>-1; n--) {
// das aktuelle Objekt
var curObj = allObj[n];
// prüfen, ob das Objekt einen Pfad hat
if ("paths" in curObj) {
// die Pfade zählen
var nPaths = curObj.paths.length;
// eine Schleife durch die Pfade
for (var p=0; p<nPaths; p++) {
// wenn der aktuelle Pfad mehr als vier Pfadpunkte hat ...
if (curObj.paths[p].pathPoints.length > 4) {
// ist der Rahmen gesperrt ...
if (curObj.locked == true) {
// ... den Rahmen entsperren
curObj.locked = false;
}
// ... das Objekt entfernen
try {
curObj.remove();
}
catch (e) {
alert (e.message);
}
// die Schleife verlassen
break;
}
}
}
}

Den try-Wickel braucht es eigentlich nicht mehr. Aber vielleicht ist in den zu behandelnden Dokumenten nichts gesperrt und die vorsorglichen Zeilen zum Entsperren der Ebenen und Entgruppieren werden entfernt. Aber dann ist doch irgendwo etwas gesperrt.

Es kann auch sein, dass gewisse Objekte nicht entfernt werden dürfen. Dann kann man sie sperren und die Zeilen 36 bis 40 des Scripts entfernen. Oder den Test benutzen und nur löschen, wenn das Objekt nicht gesperrt ist.

Noch nicht gelöst ist das von Thomas Richard gemeldete Problem mit in Kurven gewandelten Schriften. Aber vielleicht kommen solche gar nicht vor. Zudem tritt es nur auf, wenn diese Objekte nicht in einem Textrahmen stecken.

Gruss, Hans


als Antwort auf: [#570636]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2762

8. Jun 2019, 10:38
Beitrag # 41 von 57
Beitrag ID: #570638
Bewertung:
(5740 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

noch eine kurze Anmerkung zu Deinem "try-Wickel".

Meiner Meinung nach sollte immer eine Fehlerbehandlung vorgenommen werden, damit man überhaupt merkt, dass ein unerwarteter Fehler aufgetreten ist.

Erwartete Fehlermöglickeiten sollten durch eine vorausschauende Prüfung, wie z. B. oben mit der "Path-Prüfung" ausgeschlossen werden, also die von Dir genannte Fehlermöglichkeit des gesperrten Seitenobjektes.

In seltenen Fällen lässt sich in InDesign keine vorausschauende Prüfung vornehmen, dann landet das Skript in der Fehlerbehandlungsroutine, und man kann mit Hilfe der Fehlermeldung/-nummer ermitteln, ob in diesen wenigen Ausnahmefällen der Fehler ignoriert werden darf.

Try-Catch kostet ohne Auftreten eines Fehles extrem wenig Zeit, bei Auftreten eines Fehlers steigt die Laufzeit eines Skriptes erheblich an.

Auch deswegen ist leere Fehlerbehandlungsroutine (Catchzweig) ein Unding!


als Antwort auf: [#570637]

Objekte löschen anhand einer Farbe

Uwe Laubender
Beiträge gesamt: 5316

8. Jun 2019, 14:19
Beitrag # 42 von 57
Beitrag ID: #570640
Bewertung:
(5710 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: …Deshalb ein neuer Ansatz: Vorgängig die Ebenen entsperren und alle Gruppen auflösen.


Hallo Hans,

alle Gruppen auflösen?
Vorsicht, das kann unschöne Auswirkungen haben.

Welche Probleme hast Du genau mit gesperrten Objekten?
Wann lassen sich gesperrte Objekte im Schleifendurchgang mit allPageItems nicht entsperren?


als Antwort auf: [#570637]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5826

8. Jun 2019, 14:52
Beitrag # 43 von 57
Beitrag ID: #570641
Bewertung:
(5701 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

ich bin unterwegs. Werde mich im Laufe des Abends nochmals melden.

Gruss, Hans


als Antwort auf: [#570638]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5826

8. Jun 2019, 14:58
Beitrag # 44 von 57
Beitrag ID: #570642
Bewertung:
(5698 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

nur kurz: Wenn sich ein zu entfernendes Objekt in einer gesperrten Gruppe befindet, dann kann es nicht gelöscht werden. Ausprobieren! :-)

Habe Allerlei versucht, aber es nicht geschafft.

Abgesehen davon wird Faxinger wissen, ob das Auflösen notwendig ist.

Gruss, Hans


als Antwort auf: [#570640]

Objekte löschen anhand einer Farbe

Uwe Laubender
Beiträge gesamt: 5316

8. Jun 2019, 19:29
Beitrag # 45 von 57
Beitrag ID: #570644
Bewertung:
(5668 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
ok. Stimmt.

Gilt beispielsweise auch für Objekte, die in einen gesperrten Grafikrahmen eingefügt wurden.

Was hilft, ohne dass irgendwelche Gruppen auseinandergenommen werden müssen: Zunächst mal den allPageItems array durchgehen und alle pageItems.locked auf false setzen.

Code
var doc = app.documents[0]; 
var allPageItemsArray = doc.allPageItems;
for( var n=0; n<allPageItemsArray.length; n++ )
{
try{ allPageItemsArray[n].locked = false }catch(e){};
};


Und in diesem Fall sollte es kein Problem machen, wenn der catch leer bleibt.
Ästhetisch unbefriedigend, meinetwegen…


als Antwort auf: [#570642]
X