[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt einfachste methode um objekte einer auswahl anhand des Objektformats zu selektieren

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

einfachste methode um objekte einer auswahl anhand des Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

20. Sep 2018, 16:32
Beitrag # 1 von 26
Bewertung:
(8145 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, ich steh mal wieder aufm Schlauch und brauche bitte ein paar Denkanstöße.

Ich habe 3 Textrahmen ausgewählt. Jeder von den 3 Textrahmen hat ein anderes Objektformat zugewiesen.

Wie kann ich den jeweiligen Textrahmen abhängig vom ihm zugewiesenen Objektformat als variable abspeichern bzw. darauf zugreifen?

toll wäre eine ganz einfache Lösung.

Vielen Dank

Ps. mit appliedObjectStyle.itemByName komme ich leider nicht weiter...
faxinger

(Dieser Beitrag wurde von Urs Gamper am 24. Sep 2018, 17:35 geändert)
X

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

20. Sep 2018, 17:03
Beitrag # 2 von 26
Beitrag ID: #566412
Bewertung:
(8132 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Hallo, ich steh mal wieder aufm Schlauch und brauche bitte ein paar Denkanstöße.

Ich habe 3 Textrahmen ausgewählt. Jeder von den 3 Textrahmen hat ein anderes Objektformat zugewiesen.

Wie kann ich den jeweiligen Textrahmen abhängig vom ihm zugewiesenen Objektformat als variable abspeichern bzw. darauf zugreifen?

toll wäre eine ganz einfache Lösung.

Vielen Dank


Ps. mit appliedObjectStyle.itemByName komme ich leider nicht weiter...
faxinger


Ps: Mein Ziel ist:
Auswahl per maus von:
textrahmen 1 mit objektformat X
textrahmen 2 mit objektformat Y
textrahmen 3 mit objektformat Z

variable a = textrahmen 1 mit objektformat X
variable b = textrahmen 2 mit objektformat Y
variable c = textrahmen 3 mit objektformat Z


als Antwort auf: [#566410]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

21. Sep 2018, 09:24
Beitrag # 3 von 26
Beitrag ID: #566419
Bewertung:
(8078 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
mein ansatz war:

Code
var doc = app.documents[0];  
var auswahl = doc.selection[0];
// Auswahl = händische auswahl der gewünschten Textrahmen

var frame1 = auswahl && appliedObjectStyle = ("Objektformat1");
var frame2 = auswahl && appliedObjectStyle = ("Objektformat2");
var frame3 = auswahl && appliedObjectStyle = ("Objektformat3");


Nur so einfach geht das leider nicht.
Wo ist mein Denkfehler?

Ob die Objektformate vorhanden sind oder nicht muss nicht überprüft werden.
Mir geht es rein um die Speicherung in einer Variablen und den einzelnen Zugriff auf die jeweiligen Textrahmen abhängig vom zugewiesenen Objektformat.

LG faxinger


als Antwort auf: [#566412]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

Gerald Singelmann
  
Beiträge gesamt: 6269

22. Sep 2018, 11:45
Beitrag # 4 von 26
Beitrag ID: #566442
Bewertung:
(8052 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich glaube, die Antworten bleiben aus, weil keiner versteht, was genau da eigentlich passieren soll.

Ich habe zwei Assoziationen
Code
var frame1 = auswahl.appliedObjectStyle.name == "OF1" ? auswahl : null; 


oder

Code
var frame1, frame2, frame3; 
var of = auswahl.appliedObjectStyle.name;
switch( of ) {
case "OF1":
frame1 = auswahl
break;
case "OF2":
frame2 = auswahl
break;
case "OF3":
frame3 = auswahl
break;
}



als Antwort auf: [#566419]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

22. Sep 2018, 16:00
Beitrag # 5 von 26
Beitrag ID: #566448
Bewertung:
(8033 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sehr geehrter Herr Singelmann,

danke für Ihre Antwort.

Gerne umreisse ich meine Absicht:

Es werden mit der Maus mehrere Textrahmen ausgewählt, wobei jeder einzelne davon ein anderes Objektformat bereits hat.
Mein Ziel ist jeden dieser Textrahmen einzeln ansprechen zu können um dann die genaue Position des jeweiligen Textrahmmens festzulegen.

Damit es etwas plastischer wird:
Mit der Maus wurden 3 Textrahmen ausgewählt: (Manchmal sind es vielleicht auch nur 2, in anderen Fällen können es mehr sein, und jeder hat ein anderes Objektformat)
Textrahmen 1 hat bereits Objektformat X
Textrahmen 2 hat bereit Objektformat Y
Textrahmen 3 hat bereits Objektformat Z

Jetzt soll aus meiner Auswahl der Textrahmen 1 eben weil er dieses Objektformat X hat in einer variablen gespeichert werden.
Textrahmen 2 und 3 genauso jeweils in einer eigenen Variablen.

Ziel ist genau jenen Textrahmen mit Objektformat Y auf eine vorher definierte Position links neben den Textrahmen 1 mit Objektformat X zu stellen und den Textrahmen mit Objektformat Z rechts auf eine vorher definierte Position neben den Textrahmen mit Objektformat Y zu stellen.

Mit geht es wie gesagt darum, die Auswahl die mit der Maus gemacht wurde, aufzuteilen, sodass ich auf die einzelnen Textrahmen über die Variable zugreifen kann. Und das Unterscheidungsmerkmal ist numal das bereits von Anfang an zugewiesene Objektformat.

Ich hoffe es ist jetzt etwas verständlicher.

LG
faxinger


als Antwort auf: [#566442]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

Gerald Singelmann
  
Beiträge gesamt: 6269

22. Sep 2018, 19:26
Beitrag # 6 von 26
Beitrag ID: #566449
Bewertung:
(8017 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ich habs jetzt nur getippt, nicht getestet, aber knobeln Sie doch mal auf diesem ansatz rum:

Code
if ( app.selection.length ) main(); 

function main() {
var format_namen = [ "mein erstes Objektformat", "Format2", "object_style3"]
var rahmen = [ null, null, null ];
var koordinaten = [ [10,10], [110, 10], [210, 10] ];
for ( var n = 0; n < app.selection.length; n++) {
var name = app.selection[n].appliedObjectStyle.name;
for ( var m = 0; m < format_namen.length; m++) {
if ( name == format_namen[m] ) rahmen[m] = app.selection[n];
}
}
for (var n = 0; n < rahmen.length; n++) {
if ( rahmen[n] != null ) rahmen[n].move( koordinaten[n] );
}
}



als Antwort auf: [#566448]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

22. Sep 2018, 19:31
Beitrag # 7 von 26
Beitrag ID: #566450
Bewertung:
(8013 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sehr geehrter Herr Singelmann,

vielen Dank für Ihren Beitrag.

Aber leider durchblicke ich diesen Ansatz gar nicht.

Daher wollte ich ja vielleicht einen skripttechnisch holprigen und umständlichen, aber für mich nachvollziehbaren Weg gehen.

LG
faxinger


als Antwort auf: [#566449]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

23. Sep 2018, 09:25
Beitrag # 8 von 26
Beitrag ID: #566457
Bewertung:
(7968 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sehr geehrter Herr Singelmann,

ich habe mir diese Version des Skriptes nochmal angesehen:
Code
if ( app.selection.length ) main();  

function main() {
var format_namen = [ "A", "B", "C"]
var rahmen = [ null, null, null ];
var koordinaten = [ [10,10], [50, 10], [60, 10] ];
for ( var n = 0; n < app.selection.length; n++) {
var name = app.selection[n].appliedObjectStyle.name;
for ( var m = 0; m < format_namen.length; m++) {
if ( name == format_namen[m] ) rahmen[m] = app.selection[n];
}
}
for (var n = 0; n < rahmen.length; n++) {
if ( rahmen[n] != null ) rahmen[n].move( koordinaten[n] );
}
};


Die Herausforderung liegt darin, dass ich die Koordinaten des Rahmens mit zugewiesenem OF "B" zuerst heraus finden muss. Leider kann ich das so über fixe Koordinaten nicht lösen.

Mein Verständnisproblem liegt darin in welchen Variablen denn nun die Rahmen mit den jeweiligen Objektformaten abgespeichert sind.
Was bedeutet
Code
var rahmen = [ null, null, null ]; 

?

Mit freundlichen Grüßen
faxinger


als Antwort auf: [#566449]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

Gerald Singelmann
  
Beiträge gesamt: 6269

23. Sep 2018, 11:30
Beitrag # 9 von 26
Beitrag ID: #566459
Bewertung:
(7949 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Aber leider durchblicke ich diesen Ansatz gar nicht


OK, scusi. Ich dachte, etwas fortgeschritteneres JS sei eine interessante Lernübung.

Daher noch mal so einfach, wie es mir möglich erscheint:

Code
if ( app.selection.length > 1) main( app.selection ); 

function main( sel ) {

// Rahmen mit Format finden und entsprechend speichern
var rahmen1, rahmen2, rahmen3;
for (var n = 0; n < sel.length; n++) {
if ( sel[n].appliedObjectStyle.name == "A" ) {
rahmen1 = sel[n];
} else if ( sel[n].appliedObjectStyle.name == "B" ) {
rahmen2 = sel[n];
} else if ( sel[n].appliedObjectStyle.name == "C" ) {
rahmen3 = sel[n];
}
}

// Die Koordinaten für rahmen1
var x1 = 20, y1 = 30;

// Jetzt zeigen die drei Variablen entweder auf einen Rahmen oder sind undefined
// Das undefined müssen wir im Folgenden abfangen
if ( rahmen1 != undefined ) {
$.writeln( "1 nach " + x1 + "/" + y1 + " bewegen" );
rahmen1.move( [ x1, y1 ] );
var gb = rahmen1.visibleBounds;
$.writeln( "1 ist " + rd(gb[3]-gb[1]) + "/" + rd(gb[2]-gb[0]) + " groß" );

// rahmen zwei 10mm rechts von rahmen1
if ( rahmen2 != undefined ) {
$.writeln( "2 nach " + rd(gb[3]+10) + "/" + rd(gb[0]) + " bewegen" );
rahmen2.move( [ gb[3] + 10, gb[0] ] );
gb = rahmen2.visibleBounds;
$.writeln( "2 ist " + rd(gb[3]-gb[1]) + "/" + rd(gb[2]-gb[0]) + " groß" );

if ( rahmen3 != undefined ) {
$.writeln( "3 nach " + rd(gb[3]+10) + "/" + rd(gb[0]) + " bewegen" );
rahmen3.move( [ gb[3] + 10, gb[0] ] );
}
}
}

function rd( x ) {
return Math.round( x * 10 ) / 10;
}
}



als Antwort auf: [#566450]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

Gerald Singelmann
  
Beiträge gesamt: 6269

23. Sep 2018, 11:38
Beitrag # 10 von 26
Beitrag ID: #566460
Bewertung:
(7946 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Und hier noch ein Ansatz, der mit beliebig vielenFormaten und Objekten funktioniert.

Code
if ( app.selection.length > 1) main( app.selection ); 

function main( sel ) {

// Rahmen mit Format finden und entsprechend speichern
var rahmen = [];
var formate = ["A", "B", "C", "D", "E"];

for (var n = 0; n < sel.length; n++) {
for ( var m = 0; m < formate.length; m++ ) {
if ( sel[n].appliedObjectStyle.name == formate[m] ) {
rahmen[m] = sel[n];
}
}
}

// Die Koordinaten für rahmen[0]
var x = 20, y = 30;
var vb;

// Wenn ein Objektformat gefunden wurde, wird er platziert, sonst übergangen
for ( var n = 0; n < rahmen.length; n++) {
if ( rahmen[n] != undefined ) {
rahmen[n].move( [x, y] );
vb = rahmen[n].visibleBounds;
x = vb[3] + 10;
y = vb[2] - (vb[2] - vb[0])/2;
}
}

}



als Antwort auf: [#566459]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

23. Sep 2018, 12:39
Beitrag # 11 von 26
Beitrag ID: #566462
Bewertung:
(7936 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sehr geehrter Herr Singelmann,

vielen Dank für die rasche Antwort und die beiden Ansätze.

Das ist mehr als genug Material an dem ich nun zu arbeiten habe.
:-)
Vielen Dank.

LG
faxinger


als Antwort auf: [#566460]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

24. Sep 2018, 14:38
Beitrag # 12 von 26
Beitrag ID: #566478
Bewertung:
(7846 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich würde nun doch gerne lieber selber das Skript von Hand neu schreiben und nicht auf das leider für mich nicht in allen Schritten nachvollziehbare Skript von Herrn Singelmann zurückgreifen.

Also nochmal langsam zum Mitschreiben (für mich)
Code
//Das aktive Dokument// 
var doc = app.activeDocument;
//aktuelle Auswahl mit Maus aufgezogen, es entsteht ein Array mit allen ausgewählten Elementen //
var auswahl = doc.selection;


Was ich möchte ist auf jedes einzelne Element des Arrays zugreifen und als eine Variable abpeichern, wobei die Elemente des Arrays (Textrahmen) bereits ein Objektformat besitzen.

Mit anderen Worten:
Der Textrahmen aus meiner Auswahl mit dem Objektformat A ist jetzt in der Variablen Textrahmen_OF_A gespeichert.

Der Textrahmen aus meiner Auswahl mit dem Objektformat B ist jetzt in der Variablen Textrahmen_OF_B gespeichert.



Es tut mir leid wenn ich euch damit nerve, aber irgendwie bekomm ich das so nicht hin.

LG
faxinger


als Antwort auf: [#566462]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

Kai Rübsamen
Beiträge gesamt: 4684

24. Sep 2018, 15:35
Beitrag # 13 von 26
Beitrag ID: #566479
Bewertung:
(7839 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Faxe, als erstes fehlt mal dein aussagekräftiges Beispiel als idml mit Schritt 1 (drei Objekte) und Schritt 2, was am Schluss mit deinen drei Objekten passieren soll. Das mit dem Verschieben ist offenbar nicht klar!

Dann finde ich den zweiten Ansatz von Herrn Singelmann schon recht einfach bzw. gut. Das mit den Koordinaten kann man ja erstmal weglassen. Im 3. Beispiel von Gero liegt der Rahmen in keiner Variablen. Dafür ist dieses Beispiel flexibel.

Also einen Schritt zurück:
Du wählst ein, zwei, drei oder fünf Rahmen aus. Wenn alle fünf ausgewählt sind, brauchst du fünf Variablennamen. Wenn du nur drei ausgewählt hast, nur drei. Du müsstest jetzt eine maximale Anzahl von Namen definieren und wenn du dann weniger hast, ist die Differenz "undefined".

Neulich habe ich dir ein paar Zeilen geschrieben, die waren dir zu umständlich, weil ich ein paar Sachen geprüft habe. Wenn du aber hier auf diese Prüfungen verzichtest, rennt das Skript möglicherweise in einen Fehler.


als Antwort auf: [#566478]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

24. Sep 2018, 15:55
Beitrag # 14 von 26
Beitrag ID: #566480
Bewertung:
(7830 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

danke für deine Antwort. Das mit dem idml wird noch dauern bis ich wieder als Premiummitglied Anhänge raufladen darf. (Sollte bis nächste Woche funktionieren)

Schritt 1 ist: es werden von mir mehrere Textrahmen per Mouse ausgewält. Das können 2,3, oder mehr Rahmen sein.

Jeder dieser Textrahmen besitzt bereits ein ihm zugewiesenes Objektformat.

Was ich möchte ist innerhalb meiner Auswahl (Array) nach und nach jeden Textrahmen in einer eigenen Variablen speichern um später darauf zurückgreifen zu können.

Aber ich muss dabei wissen welche Variable auf welchen Textrahmen verweist bzw. welches Objektformat dieser eine Textrahmen aus dem Array hat.

Daher auch der Ansatz mit
Code
var rahmen_OF_A = auswahl[] && (appliedObjectStyle.("A") = true); 


Das Problem ist, dass ich ja durch meine Mouse-Auswahl einen Array habe.
Wenn nur ein Objekt per Mouse ausgewält wäre, muss ich ja nicht nach dem ihm zugewiesenen Objektformat fragen.

Im zweiten Schritt sollen dann die einzelnen Elemente des Arrays abhängig vom jeweiligen Objektformat und ein paar anderen Faktoren wie z.B Schriftgröße von dem Textrahmen mit Objektformat B positioniert werden.

Danke
LG
faxinger


als Antwort auf: [#566479]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

Kai Rübsamen
Beiträge gesamt: 4684

24. Sep 2018, 16:16
Beitrag # 15 von 26
Beitrag ID: #566482
Bewertung:
(7827 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Also, wenn deine Objekte in einer Variablen liegen, arbeitest du ja gar nicht mehr mit dem Array, sondern mit dem Inhalt der Variablen. Das hatte Gero dir eigentlich oben gezeigt.

Das Problem ist jetzt, dass man Variablen nicht dynamisch generieren kann. D.h. du musst dir vorher einen Namen vergeben (Var 1 von Gero) oder du nimmst die Infos in ein Array auf (Var 2).

Mal angenommen, du wählst drei Objekte aus. Dann kannst du dir sicher sein, dass in rahmen_B nachher das Objektformat "B" drin steckt.

Ich habe versucht, dass Ganze durch ein paar mehr Variablen und Weglassen von ein paar Klammern noch übersichtlicher zu schreiben:

Code
// die Auswahl 
var sel = app.selection;

// eine Liste mit Variablen-Name vorbereiten
var rahmen_A,
rahmen_B,
rahmen_C,
rahmen_D,
rahmen_E;

// eine Scheife durch die Auswahl
for (var i = 0; i < sel.length; i++) {
// das gerade untersuche Objekt in der Auswahl
var curSel = sel[i];
// das gerade verwendete Objektformat
var objStyleName = curSel.appliedObjectStyle.name;

//den Namen des Objektformats prüfen und der Variablen zuweisen
if (objStyleName == "A") rahmen_A = curSel;
else if (objStyleName == "B") rahmen_B = curSel;
else if (objStyleName == "C") rahmen_C = curSel;
else if (objStyleName == "D") rahmen_D = curSel;
else if (objStyleName == "E") rahmen_E = curSel;
}

alert (rahmen_A + "\r" + rahmen_B + "\r" + rahmen_C +"\r" + rahmen_D +"\r" + rahmen_E);


Die Auswahl ist von der Reihenfolge abhängig, in der du etwas auswählst. Du kannst also nicht davon ausgehen, dass in der Variablen A auch immer das Objektformat A landet. Daher prüft man das. In dem alert werden dir jetzt zwei undefined angezeigt, weil du nur drei Rahmen ausgewählt hast. Das ist nicht schön, aber auch nicht schlimm. In den Variablen A,B,C steckt jetzt jeweils ein Objekt mit dem du was machen kannst …

edit: Ich sehe gerade, dass Beispiel mit switch/case von Gero oben ist eigentlich noch übersichtlicher ;-)


als Antwort auf: [#566480]
(Dieser Beitrag wurde von Kai Rübsamen am 24. Sep 2018, 16:18 geändert)

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

24. Sep 2018, 17:09
Beitrag # 16 von 26
Beitrag ID: #566484
Bewertung:
(5745 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,
vielen vieln Dank, ja das trifft es ziemlich genau was ich möchte.

Allerdings erhalte ich einen Fehler wenn ich nur den Rahmen A und C auswähle.

Ich habe mal durchgetestet:
Auswahl von
A funktioniert
B funktioniert
C funktioniert

A + B funktioniert
B + C funktioniert
A + C funktioniert nicht

A + B + C funktioniert.

Ich weiss allerdings nicht woran das liegt.

LG
faxinger


als Antwort auf: [#566482]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

Kai Rübsamen
Beiträge gesamt: 4684

24. Sep 2018, 17:28
Beitrag # 17 von 26
Beitrag ID: #566485
Bewertung:
(5741 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hm, da sollte eigentlich gar nichts passieren. Mach mal einen Screenshot aus dem ESTK und schick ihn mir per pm.


als Antwort auf: [#566484]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

25. Sep 2018, 08:51
Beitrag # 18 von 26
Beitrag ID: #566494
Bewertung:
(5699 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

ich habs jetzt nochmal überprüft.
Das Problem ist wenn ich bei den rahmen ein contents dranhänge
"rahmen_A.contents"

Das funktioniert nur wenn auch der rahmen_A in der Auswahl enthalten ist.

Selbiges gilt für B, C etc..


LG
faxinger


als Antwort auf: [#566485]
(Dieser Beitrag wurde von faxinger am 25. Sep 2018, 08:54 geändert)

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

Kai Rübsamen
Beiträge gesamt: 4684

25. Sep 2018, 10:02
Beitrag # 19 von 26
Beitrag ID: #566500
Bewertung:
(5681 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Faxe. Ist es denn so schwer, mal einen Screenshot oder ein Beispiel zu schicken bzw. ein Problem richtig zu formulieren?

Wenn du nur zwei auswählst und dann den contents von einem prüfst, sollte es da normalerweise keinen Fehler geben, s. screenshot.


als Antwort auf: [#566494]
Anhang:
Bildschirmfoto 2018-09-25 um 09.57.08.png (103 KB)

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

Kai Rübsamen
Beiträge gesamt: 4684

25. Sep 2018, 13:58
Beitrag # 20 von 26
Beitrag ID: #566503
Bewertung:
(5656 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Faxe,

danke für den Screenshot, den ich hier für Alle anhänge. Der interessante Teil mit der Fehlermeldung am Fuß fehlt allerdings ;-)

Sie lautet sehr wahrscheinlich "undefined is not an object". Du versuchst, den contents von C auszulesen, hast aber nur A+B markiert. Dass das nicht funktioniert, hatte ich dir bereits oben erklärt und Gerald hatte auch schon eine Lösung geliefert.

Du musst mit einer if-Anweisung prüfen, ob der Rahmen in der Variablen liegt:

if (rahmen_C != undefined) alert(rahmen_C.contents);


als Antwort auf: [#566500]
(Dieser Beitrag wurde von Kai Rübsamen am 25. Sep 2018, 14:03 geändert)

Anhang:
Bildschirmfoto 2018-09-25 um 13.44.31.JPG (258 KB)

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

26. Sep 2018, 10:29
Beitrag # 21 von 26
Beitrag ID: #566527
Bewertung:
(5595 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

ja das mit der Prüfung ist mir nun klar geworden. Danke.

Jetzt hakt es woanders:
Ich wähle einen Rahmen aus und lasse mir das erste Zeichen ausgeben, das funktioniert auch. Jedoch kann ich nicht die pointSize auslesen.

Code
var preis_erste_zahl = preis.contents[0]; 
alert (preis_erste_zahl);
// das funktioniert
var font_groesse_preis = preis_erste_zahl.pointSize;
alert (font_groesse_preis);

Das funktioniert nicht, hier erhalte ich ein undefined.

LG
faxinger


als Antwort auf: [#566503]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

Kai Rübsamen
Beiträge gesamt: 4684

26. Sep 2018, 14:41
Beitrag # 22 von 26
Beitrag ID: #566536
Bewertung:
(5573 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Faxe,

du könntest im ESTK untersuchen, welche Eigenschaften dein 'contents[0] hat und von welchem Typ es ist:

Code
var sel = app.selection[0]; 

var t1 = sel.contents[0];
var t2 = sel.characters[0];
alert("t1\r" + t1.constructor.name);
alert("t2\r" +t2.constructor.name);

alert(t2.pointSize);





als Antwort auf: [#566527]
Anhang:
screenESTK.png (170 KB)

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

26. Sep 2018, 15:24
Beitrag # 23 von 26
Beitrag ID: #566540
Bewertung:
(5562 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

ich habs schon gelöst:
Code
 var preis_erste_zahl = preis.contents[0]; 
//alert (preis_erste_zahl);
var font_groesse_preis = preis.characters[0].pointSize;


Es muss natürlich das erste Zeichen als solches ausgewählt sein...

Danke
faxinger


als Antwort auf: [#566536]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

12. Okt 2018, 15:49
Beitrag # 24 von 26
Beitrag ID: #566841
Bewertung:
(5349 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

nochmals ein großes Dankeschön an alle die mich bei des Skript so tatkräftig unterstützt haben.
Aber leider gibt es noch zwei Punkte die noch nicht in mein Hirn durchgedrungen sind.

1. Ich möchte den Grundpreiszusatz am Punkt des Preises ausrichten
2. Wie kann ich eine optionale Auswahl treffen? Sprich es müssen nicht alle Objektformate ausgewählt sein.

Das ist mein Code bisher:
[code]// die Auswahl
var sel = app.selection;

// eine Liste mit Variablen-Namen vorbereiten
var
preis,
streichpreis,
preishit,
streichpreis_hit,
preiszusatz,
preiszusatz_palettenabnahme,
grundpreis_zusatz,
grundpreis_zusatz_palette,
palettenpreis,
palettenpreis_einzelabnahme,
feature_1,
feature_2,
feature_3,
feature_4,
feature_hit_1,
feature_hit_2,
feature_hit_3;

// eine Scheife durch die Auswahl
for (var i = 0; i < sel.length; i++) {
// das gerade untersuche Objekt in der Auswahl
var curSel = sel[i];
// das gerade verwendete Objektformat
var objStyleName = curSel.appliedObjectStyle.name;

//den Namen des Objektformats prüfen und der Variablen zuweisen
if (objStyleName == "preis") preis = curSel;
else if (objStyleName == "streichpreis") streichpreis = curSel;

else if (objStyleName == "preishit") preishit = curSel;
else if (objStyleName == "streichpreis_hit") streichpreis_hit = curSel;

else if (objStyleName == "preiszusatz") preiszusatz = curSel;
else if (objStyleName == "preiszusatz") preiszusatz_palettenabnahme = curSel;

else if (objStyleName == "grundpreis_zusatz") grundpreis_zusatz = curSel;
else if (objStyleName == "grundpreis_zusatz") grundpreis_zusatz_palette = curSel;

else if (objStyleName == "palettenpreis") palettenpreis = curSel;
else if (objStyleName == "palettenpreis") palettenpreis_einzelabnahme = curSel;
else if (objStyleName == "grundpreis_zusatz") grundpreis_zusatz_palette = curSel;

else if (objStyleName == "feature") feature_1 = curSel;
else if (objStyleName == "feature") feature_2 = curSel;
else if (objStyleName == "feature") feature_3 = curSel;

else if (objStyleName == "feature_hit") feature_hit_1 = curSel;
else if (objStyleName == "feature_hit") feature_hit_2 = curSel;
else if (objStyleName == "feature_hit") feature_hit_3 = curSel;
};


/* PREISZUSATZ A U S R I C H T E N A M P R E I S */
if (preiszusatz.isValid)
{
var preis_erste_zahl = preis.contents[0];
//alert (preis_erste_zahl);
var font_groesse_preis = preis.characters[0].pointSize;
//alert (font_groesse_preis);
var faktor = font_groesse_preis*0.001;
//alert (faktor);
var abstand_preis = preis_erste_zahl;
switch(preis_erste_zahl) {
case "0":
abstand_preis = faktor*0.9
break;
case "1":
abstand_preis = faktor*-31.2
break;
case "2":
abstand_preis = faktor*10
break;
case "3":
abstand_preis = faktor*10.75
break;
case "4":
abstand_preis = faktor*7.5
break;
case "5":
abstand_preis = faktor*13.1
break;
case "6":
abstand_preis = faktor*1
break;
case "7":
abstand_preis = faktor*-18
break;
case "8":
abstand_preis = faktor*10.5
break;
case "9":
abstand_preis = faktor*-0.75
break;
};
var preiszusatz_gb = preiszusatz.geometricBounds;
var preiszusatz_breite = preiszusatz_gb[3] - preiszusatz_gb[1];
var preiszusatz_hoehe = preiszusatz_gb[2] - preiszusatz_gb[0];
var preis_hoehe = preis.geometricBounds[2] - preis.geometricBounds[0];
var preisgbX = preis.geometricBounds[1];
var preisgbY = preis.geometricBounds[0];
//alert (preisgbX);
//alert (preiszusatz_gb);
preiszusatz.move([preisgbX - preiszusatz_breite - abstand_preis, preisgbY + preis_hoehe - preiszusatz_hoehe]) ;
}
else
{};



/* GRUNDPREISZUSATZ A U S R I C H T E N A M P R E I S */
if (grundpreis_zusatz.isValid)
{
var preis_inhalt = preis.contents;
var kommaindex = preis_inhalt.indexOf("\.");
var kommaposition = preis_inhalt[kommaindex];
alert (kommaposition);
var x_koord_preis_komma_stelle = kommaposition.endhorizontalOffset;
alert (x_koord_preis_komma_stelle);
/*
var grundpreis_zusatz_gb = grundpreis_zusatz.geometricBounds;
var grundpreis_zusatz_hoehe = grundpreis_zusatz_gb[2] - grundpreis_zusatz_gb[0];
var preis_hoehe = preis.geometricBounds[2] - preis.geometricBounds[0];
var preisgbX = preis.geometricBounds[1];
var preisgbY = preis.geometricBounds[0];
// alert (preisgbX);
// alert (preiszusgb);
// grundpreis_zusatz.move([x_koord_preis_komma_stelle, preisgbY + preis_hoehe - grundpreis_zusatz_hoehe]) ;
*/
};
else
{};
[/code]


Wenn ich den Preis und den Preiszusatz auswähle funktioniert es, wenn ich den Preis und den Grundpreiszusatz auswähle bekomme ich ein undefined.


als Antwort auf: [#566540]
Anhang:
test.idml (36.5 KB)

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

faxinger
Beiträge gesamt: 246

16. Okt 2018, 14:18
Beitrag # 25 von 26
Beitrag ID: #566876
Bewertung:
(5255 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

leider hat bisher noch niemand geantwortet auf diese Frage:
Wie kann ich den Grundpreiszusatz am Punkt des Preises ausrichten?

Der Punkt selbst wird richtig abgefragt, wo es scheitert ist
kommaposition.endhorizontalOffset

Hier bekomme ich ein undefined.

Und die 2. Sache wäre noch mit der Auswahl.
Es kann sein dass der Grundpreiszusatz in meiner Auswahl enthalten ist muss aber nicht.
Habs schon mit if else probiert, das hat aber nicht funktioniert.

Bitte um eure Inputs.
Danke

LG
faxinger


als Antwort auf: [#566841]

einfachste methode um objekte einer auswahl anhand es Objektformats zu selektieren

Gerald Singelmann
  
Beiträge gesamt: 6269

17. Okt 2018, 09:55
Beitrag # 26 von 26
Beitrag ID: #566898
Bewertung: ||
(5200 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zwei Tipps für höhere Antwort-Chancen:

Machen Sie bitte für neue Fragen ein neues Thema auf.

Und finden Sie bitte raus, wie der code-Tag in diesem Forum funktioniert.


als Antwort auf: [#566876]
X