[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

WernerPerplies
Beiträge gesamt: 2762

4. Jun 2019, 10:56
Beitrag # 16 von 57
Beitrag ID: #570517
Bewertung:
(5525 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Uwe,

und weil das nicht nur für PageItems gilt, sondern auch für eine Reihe von anderen Objekten (z. B. Colors), verwende ich meine Funktion InnerConstructorName, die, wenn immer möglich, einen ConstuctorName zurückgibt.


als Antwort auf: [#570516]
X

Objekte löschen anhand einer Farbe

Uwe Laubender
Beiträge gesamt: 5318

4. Jun 2019, 13:22
Beitrag # 17 von 57
Beitrag ID: #570518
Bewertung:
(5510 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,
danke für den Hinweis!

So, und jetzt machen wir mal 'was wirklich Lustiges:

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]

objectOnPage.convertShape( ConvertShapeOptions.CONVERT_TO_OVAL );

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


Gell, da staunt ihr.

InDesign behauptet nach der Aktion mit convertShape() immer noch, es handelt sich um ein Rechteck. Optisch wird das allerdings keinesfalls unterstützt. Die Seite zeigt einen Kreis!

Werners Funktion hilft dagegen leider auch nicht. Die arbeitet ja auch mit getElements()[0].
Ist aber nicht Werners Schuld. Möglicherweise beruht das Problem auf einem Bug in der Scripting-Engine.


als Antwort auf: [#570517]

Objekte löschen anhand einer Farbe

Uwe Laubender
Beiträge gesamt: 5318

4. Jun 2019, 13:54
Beitrag # 18 von 57
Beitrag ID: #570519
Bewertung:
(5499 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ach ja. Das noch nachgereicht:

InDesign behauptet fälschicherweise selbst nach Speichern und Wiederöffnen der Datei, es läge ein Rechteck vor. Obwohl doch jeder sehen kann, dass es sich bei pageItems[0] um einen Kreis handelt.

Diese Faxen hören auch dann nicht auf, wenn wir die Datei nach IDML exportieren und mit der IDML-Datei weiterarbeiten.


als Antwort auf: [#570518]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2762

4. Jun 2019, 14:07
Beitrag # 19 von 57
Beitrag ID: #570520
Bewertung:
(5490 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
:-)

Du ungläubiger Thomas!

objectOnPage sieht nur wie ein Kreis aus, ist aber ein Rectangle.

doc.rectangles.length -> 1
doc.ovals.length -> 0

Die Konvertierung bezieht sich nur auf das Aussehen, der Datentyp auf den Zeitpunkt der Entstehung.


als Antwort auf: [#570519]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2762

4. Jun 2019, 14:22
Beitrag # 20 von 57
Beitrag ID: #570521
Bewertung: |||
(5483 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich finde, richtig spannend wird es hier:
Code
var doc = app.documents.add();  
var objectOnPage = doc.rectangles.add({geometricBounds: [0,0,100,100]});
objectOnPage.convertShape( ConvertShapeOptions.CONVERT_TO_OVAL );
doc.rectangles[0].contentType = ContentType.TEXT_TYPE;
alert(wpsInnerConstructorName(objectOnPage));

// 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;
}
}



als Antwort auf: [#570519]

Objekte löschen anhand einer Farbe

Uwe Laubender
Beiträge gesamt: 5318

4. Jun 2019, 14:33
Beitrag # 21 von 57
Beitrag ID: #570522
Bewertung:
(5481 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von Werner der Datentyp auf den Zeitpunkt der Entstehung.


Tja, wenn's für den Anwender nur so einfach wär:
Das Ebenen-Bedienfeld zeigt schließlich ein generisches <Kreis> an.

Möglicherweise auch nur die halbe Wahrheit :-)


als Antwort auf: [#570520]

Objekte löschen anhand einer Farbe

Uwe Laubender
Beiträge gesamt: 5318

4. Jun 2019, 14:36
Beitrag # 22 von 57
Beitrag ID: #570523
Bewertung:
(5479 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Ich finde, richtig spannend wird es hier:


Nun, da stimmt's wiederum.
Wir haben nun einen kreisförmigen Textrahmen.


als Antwort auf: [#570521]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 246

4. Jun 2019, 17:31
Beitrag # 23 von 57
Beitrag ID: #570527
Bewertung:
(5438 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

so jetzt kam ich dazu es zu testen.

Es werden tatsächlich nicht alle Polygone gelöscht.

Die Ursache ist, dass der Inhalt der Polygone ja auch ein Textframe oder ein Grafikrahmen sein kann in Polygonform.

Ich glaube es muss ein neuer Ansatz her:
Anbei mal ein Beispiel als idml.


Die Ausgangssituation: Ich habe eine Doppelseite oder Einselseite (von Fall zu Fall unterschiedlich). Darauf befinden sich Polygone auf verschiedenen Ebenen.

(Im Original habe ich natürlich noch andere Elemente auf der Seite.)

Ziel: Die Polygone sollen gelöscht werden.

Das Problem dabei: meine "Polygone" könnten ja eigentlich Textrahmen oder Grafikrahmen oder Rahmen mit nicht zugewiesenem Inhalt mit vielen Pfadpunkten sein.

Ich ging davon aus dass man mit PageItems.polygons alle Rahmen mit vielen Pfadpunkten erwischt.

Aber da liegt der Fehler.

Ich glaube man muss die Auswahl über das Kriterium der Pfadpunkte (Anzahl größer als z.B 10 Punkte) treffen unabhängig vom jeweiligen Inhalt.

Vielleicht gibt es auch noch eine andere Möglichkeit.

Bin gespannt auf euren Input.

Danke
LG
faxinger


als Antwort auf: [#570505]
Anhang:
polygons_test.idml (212 KB)

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2762

4. Jun 2019, 18:08
Beitrag # 24 von 57
Beitrag ID: #570532
Bewertung:
(5428 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Du musst einfach innerhalb der Schleife mit einer oder mehrer If-Bedingungen die gewünschten PageItems herausfiltern und dann löschen.

Bitte habe Verständnis dafür, dass ich Dir gerne bei exakt definierten Teilproblemen Lösungsvorschläge mache, aber Dir kostenlos keine Komplettlösungen liefere.

So, wie Du vermutlich von Deiner Arbeit lebst, lebe ich von der Programmierung von Skripten.

Ich denke, wir haben Dir hier reichlich Tipps für Deine Problemstellung gegeben.

Viel Erfolg wünscht

Werner


als Antwort auf: [#570527]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 246

5. Jun 2019, 17:04
Beitrag # 25 von 57
Beitrag ID: #570581
Bewertung:
(5327 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner und Hallo auch an alle anderen die sich so intensiv mit der Fragestellung auseinandergesetzt haben.

Danke für eure vielen und ausführlichen Antworten.

Natürlich verstehe ich, dass mir hier für so ein umfangreiches Problem keine Komplettlösung unentgeltlich geliefert werden kann.

Jeder muss seine Brötchen verdienen.

Ich glaube auch dass ich mit diesen vielen Beispielen mich schon weiterhanteln kann.


Danke nochmals und schönen Abend.
LG
faxinger


als Antwort auf: [#570532]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5826

6. Jun 2019, 08:21
Beitrag # 26 von 57
Beitrag ID: #570591
Bewertung: |||
(5289 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Du hast richtig erkannt, dass nur durch die Prüfung der Pfadpunkte alle Polygons erwischt werden. Allerdings muss der Grenzwert tiefer als die genannten 10 angesetzt werden. Sonst wird ein normales Fünfeck nicht erfasst.

Wenn Gruppierungen vorkommen, müssen diese zuerst aufgehoben werden. Es sei denn man verwende allPageItems für den Array der Objekte, statt pageItems.

Weil mit 'allPageItems' nebst den Rahmen einer Gruppe auch eventuelle Bilder und die Gruppe selbst aufgelistet werden, muss die Pfadpunkte-Prüfung in einen try-Wickel gepackt werden. Sonst kommt eine Fehlermeldung, sobald die Gruppe an der Reihe ist.

Doch eine Pfadpunkte-Prüfung ist nicht so einfach zusammenzusetzen. Deshalb folgende kleine Hilfestellung:

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) {
}
}

Damit werden sowohl geschlossene als auch offene Pfade erfasst. Sollten letztere erhalten bleiben, müsste eine Prüfung eingefügt werden.

Gruss, Hans


als Antwort auf: [#570581]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 246

6. Jun 2019, 15:10
Beitrag # 27 von 57
Beitrag ID: #570611
Bewertung:
(5232 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

jawohl, genau jetzt bin ich am Ziel. Vielen Dank!!!!

Es werden alle Polygone gelöscht.


Perfekt.

Ganz liebe Grüße
faxinger


als Antwort auf: [#570591]

Objekte löschen anhand einer Farbe

Uwe Laubender
Beiträge gesamt: 5318

6. Jun 2019, 16:36
Beitrag # 28 von 57
Beitrag ID: #570612
Bewertung:
(5203 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

denkt auch mal drüber nach, dass ein Objekt mehrere Pfade enthalten kann.


als Antwort auf: [#570611]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5826

6. Jun 2019, 17:41
Beitrag # 29 von 57
Beitrag ID: #570618
Bewertung:
(5185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

daran hatte ich (ganz kurz :-) gedacht. Aber auch, dass ...
1. Solche Objekte sehr selten sind;
2. der gute Faxinger ein entsprechendes Versagen schon melden wird.

Gruss, Hans


als Antwort auf: [#570612]

Objekte löschen anhand einer Farbe

Thomas Richard
Beiträge gesamt: 19334

7. Jun 2019, 11:06
Beitrag # 30 von 57
Beitrag ID: #570622
Bewertung:
(5097 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sobald in Kurven gewandelte Schriften vorkommen, sind mehrere Pfade in einem Objekt aber das 'A' und 'O'.

Sorry, den Buchstabenkalauer konnt ich jetzt nicht für mich behalten ;-)


als Antwort auf: [#570618]
X