hilfdirselbst.ch
Facebook Twitter gamper-media

**********************************************
        Facelifting HDS: Danke für deine Unterstützung!

**********************************************


faxinger S
Beiträge: 138
3. Aug 2017, 09:47
Beitrag #1 von 10
Bewertung:
(2514 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auf Objekte innerhalb von Gruppen zugreifen


Hallo,

ich habe schon ein Skript das mir alle Objekte auf dem Druckbogen die das Objektformat "A" haben um 90 Grad dreht. Das funktioniert solange gut sofern diese Objekte ungruppiert auf dem Druckbogen herumliegen.

Mein Fall ist aber leider so, dass diese Objekte eigentlich Teile von mehreren Gruppen sind.
Daher muss ich immer zuerst alle Gruppierungen auflösen das Skript ausführen und dann die Gruppierungen händisch wieder umsetzen.

Ginge das auch per Skript dass ich auf alle Elemente die Objektformat A haben innerhalb der Gruppe drehe und somit die Gruppierungen nicht auflösen müsste?

Danke
Top
 
X
Uwe Laubender S
Beiträge: 4039
3. Aug 2017, 11:25
Beitrag #2 von 10
Beitrag ID: #558908
Bewertung:
(2508 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auf Objekte innerhalb von Gruppen zugreifen


Hallo,
( nahezu* ) alle Objekte einer Seite bekommst Du so:

Code
var objStyleName = "Mein Objektformatname"; 

var doc = app.activeDocument;
var objectStyle = doc.objectStyles.itemByName( objStyleName );
if(!objectStyle.isValid){ alert("Objektformat nicht gefunden. Abbruch."); exit() };

// Beispiel Seite 1 des aktiven Dokuments:
var allPageItemsOfPage1 = doc.pages[0].allPageItems;

// Schleife:
for(var n=0;n<allPageItemsOfPage1.length;n++)
{
if(allPageItemsOfPage1[n].appliedObjectStyle == objectStyle)
{
// Was mit dem gefundenen Objekt passieren soll:
doSomethingReasonable( allPageItemsOfPage1[n] );
};
}

function doSomethingReasonable( pageItem )
{
alert("Rotate me!"+"\r"+pageItem.id+"\r"+pageItem.parent.constructor.name);
};


( nahezu* ) alle Objekte eines Druckbogens:

Code
var allPageItemsOfSpread1 = doc.spreads[0].allPageItems; 


nahezu*
nahezu deswegen, weil allPageItems einer Seite, Druckbogen oder Dokuments nur den aktiven Status eines Mehrstatusobjekts erfassen kann.
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#558906] Top
 
faxinger S
Beiträge: 138
3. Aug 2017, 13:17
Beitrag #3 von 10
Beitrag ID: #558911
Bewertung:
(2494 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auf Objekte innerhalb von Gruppen zugreifen


Hallo Uwe,

vielen Dank.

Ich werde es dann gleich testen und Feedback geben.

LG
faxinger
als Antwort auf: [#558908] Top
 
faxinger S
Beiträge: 138
3. Aug 2017, 13:21
Beitrag #4 von 10
Beitrag ID: #558912
Bewertung:
(2492 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auf Objekte innerhalb von Gruppen zugreifen


Ich glaube da kollidiert etwas:

das war mein skript dass die Gruppen unberücksichtigt ließ:
Code
 // Allen vorhandenen Textrahmen  mit Objektformat  "artikelnummer" um 90° drehen // 
var allFrames = app.activeDocument.textFrames;
var nFrames = allFrames.length;

for (var n=0; n<nFrames; n++) {
var curFrame = allFrames[n];
if (curFrame.appliedObjectStyle.name == "artikelnummer") {
curFrame.rotationAngle = 90;
}
}

als Antwort auf: [#558911] Top
 
Uwe Laubender S
Beiträge: 4039
3. Aug 2017, 13:45
Beitrag #5 von 10
Beitrag ID: #558913
Bewertung:
(2490 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auf Objekte innerhalb von Gruppen zugreifen


Nun ja, wenn Du das gesamte Dokument im Fokus hast (inkl. aller Musterseitenelemente), dann musst Du eben den allPageItems Array des Dokuments durchsuchen.
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#558912] Top
 
faxinger S
Beiträge: 138
22. Aug 2017, 16:41
Beitrag #6 von 10
Beitrag ID: #559170
Bewertung:
(2060 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auf Objekte innerhalb von Gruppen zugreifen


Hallo Uwe,

ich wollte dein skript adaptieren, bin aber gescheitert.

Wo muss ich bei meinem skript ansetzen um direkt innerhalb der Gruppen auf meine Objekt mit dem Objektformat "artikelnummer" zuzugreifen?

Code
 // Allen vorhandenen Textrahmen  mit Objektformat  "artikelnummer" um 90° drehen // 
var allFrames = app.activeDocument.textFrames;
var nFrames = allFrames.length;

for (var n=0; n<nFrames; n++) {
var curFrame = allFrames[n];
if (curFrame.appliedObjectStyle.name == "artikelnummer") {
curFrame.rotationAngle = 90;
}
}


Ich schätze mal dass nicht textframes angesprochen werden sollen sondern allPageItems...

Nur ich dreh mich da etwas im Kreis
Danke
als Antwort auf: [#558913]
(Dieser Beitrag wurde von faxinger am 22. Aug 2017, 16:42 geändert)
Top
 
Uwe Laubender S
Beiträge: 4039
22. Aug 2017, 18:05
Beitrag #7 von 10
Beitrag ID: #559171
Bewertung:
(2044 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auf Objekte innerhalb von Gruppen zugreifen


Hallo,
also, da gibt's zwei Wege:

1. Alle pageItems des Dokuments adressieren und die TextFrames aussortieren und prüfen.

2. Alle stories des Dokuments adressieren und über die jeweiligen textContainers der Story die Textrahmen mit dem zugewiesenen Objektformat ausfiltern.

Auf die Schnelle:

Code
// The active document: 
var doc = app.documents[0];
var nameOfObjectStyle = "artikelnummer";

// Where is the rotation's center?
doc.layoutWindows[0].transformReferencePoint = AnchorPoint.CENTER_ANCHOR;

var allStories = doc.stories.everyItem().getElements();
var objectStyle = doc.objectStyles.itemByName(nameOfObjectStyle);

// In case you run this script the first time and are too lazy to add an object style:
if(!objectStyle.isValid)
{
var objectStyle = app.documents[0].objectStyles.add({name : nameOfObjectStyle});
};

// Loop all stories:
for(var n=0;n<allStories.length;n++)
{
var textContainers = allStories[n].textContainers;

// Loop all text containers of a particular story:
for(var c=0;c<textContainers.length;c++)
{
// Only text frames, no text paths
// And only text frames with our defined object style applied from above:
if(textContainers[c].constructor.name == "TextFrame" && textContainers[c].appliedObjectStyle == objectStyle)
{
// Rotate the text container:
textContainers[c].rotationAngle = 90;
};
};
};


Wenn Du ausschließlich Textrahmen einer Gruppe bearbeiten möchtest, müssen noch ein paar Zeilen rein, die untersuchen, ob der anvisierte Textrahmen teil einer Gruppe ist.
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#559170] Top
 
faxinger666
Beiträge: 58
23. Aug 2017, 08:59
Beitrag #8 von 10
Beitrag ID: #559174
Bewertung:
(1993 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auf Objekte innerhalb von Gruppen zugreifen


Vielen Dank Uwe,

so funktioniert es. Ich dachte zwar es ginge auch mit weniger Code, bzw. Code den ich größtenteils nachvollziehen könnte.

Aber dein Skript fragt ja auch Eventualitäten ab.
Jedenfalls funktioniert es genauso wie ich es brauche. Nochmals vielen Dank.

Ein kleiner Nachtrag - die Kür wäre es wenn alle Rahmen (Egal ob Text oder Bildrahmen in den Gruppen noch auf den Inhalt beschränkt / zugeschnitten würden.

Also dass z.B. alle Textrahmen nur die Größe des Inhalts verbrauchen würden. (fit to frame oder sowas in der Richtung)

Ginge das gleich in einem Aufwasch?

Danke
LG
faxinger
als Antwort auf: [#559171] Top
 
Uwe Laubender S
Beiträge: 4039
23. Aug 2017, 09:14
Beitrag #9 von 10
Beitrag ID: #559175
Bewertung:
(1988 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auf Objekte innerhalb von Gruppen zugreifen


Hallo Faxinger,
schau' mal hier:

http://jongware.mit.edu/...c_TextFrame.html#fit

Oder hier ( CS6 und höher) für das automatische Anpassen:
http://jongware.mit.edu/...FramePreference.html
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#559174] Top
 
Uwe Laubender S
Beiträge: 4039
23. Aug 2017, 09:16
Beitrag #10 von 10
Beitrag ID: #559176
Bewertung:
(1987 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auf Objekte innerhalb von Gruppen zugreifen


Oder Du machst das bereits im Objektformat.
Das wäre die elegantere Methode.
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#559175] Top
 
X