Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Eine Auswahl (Gruppe) in neues Rectangle einfügen

Eine Auswahl (Gruppe) in neues Rectangle einfügen

tomwal
Beiträge gesamt: 29

2. Jun 2013, 08:35
Bewertung:

gelesen: 4824

Beitrag als Lesezeichen
Hallo Forumsteilnehmer,
eine aktiviertes Objekt (Gruppe) soll in ein neues Rechteck platziert werden.

Das Script habe ich soweit fertig, bis auf:
das "Ausschneiden" + "In die Auswahl einfügen"

// Script:

Code
var _dok = app.activeDocument; 

var _aktuelObj = app.selection[0];
// alert ("Sie haben ein " + _aktuelObj.constructor.name + " ausgewählt!");

var P1 = Math.round(_aktuelObj.geometricBounds[0]);
var P2 = Math.round(_aktuelObj.geometricBounds[1]);
var P3 = Math.round(_aktuelObj.geometricBounds[2]);
var P4 = Math.round(_aktuelObj.geometricBounds[3]);

var _newRect = _dok.rectangles.add();
_newRect.geometricBounds = [P1 -2,P2 -12,P3 +2,P4 +12];
_newRect.select();
_newRect.strokeWeight = 0;

_aktuelObj.select();

// ---> aktuelObj.cut ??? // = (Auswahl ausschneiden")

_newRect.select();

// ---> _aktuelObj.paste() // = (Auswahl in neuen Rahmen einfügen)


Kann mir jemand weiterhelfen?

Grüße
tomwal

Eine Auswahl (Gruppe) in neues Rectangle einfügen

-hans-
Beiträge gesamt: 748

2. Jun 2013, 09:51
Bewertung:

gelesen: 4802

Beitrag als Lesezeichen
Hallo,

sourceSel.cut()

destSel.pasteInto()

-->> http://jongware.mit.edu/...ation.html#pasteInto

Hab's nicht getestet.
Lieben Gruß

Hans-Gerd Claßen

Eine Auswahl (Gruppe) in neues Rectangle einfügen

Hans Haesler
  
Beiträge gesamt: 5826

2. Jun 2013, 10:22
Bewertung:

gelesen: 4780

Beitrag als Lesezeichen
Hallo tomwal,

Code
var _dok = app.activeDocument; 

var _aktuelObj = app.selection[0];

var P1 = Math.round(_aktuelObj.geometricBounds[0]);
var P2 = Math.round(_aktuelObj.geometricBounds[1]);
var P3 = Math.round(_aktuelObj.geometricBounds[2]);
var P4 = Math.round(_aktuelObj.geometricBounds[3]);

var _newRect = _dok.rectangles.add();
_newRect.geometricBounds = [P1 -2,P2 -12,P3 +2,P4 +12];
_newRect.select();
_newRect.strokeWeight = 0;

// Gruppe auswählen
_aktuelObj.select();

// Auswahl ausschneiden
app.cut();

// Zielrahmen auswählen
_newRect.select();

// Inhalt der Zwischenablage in neuen Rahmen einfügen
app.pasteInto();

Ich hab's getestet. ;-)

Gruss, Hans

Eine Auswahl (Gruppe) in neues Rectangle einfügen

-hans-
Beiträge gesamt: 748

2. Jun 2013, 10:29
Bewertung:

gelesen: 4776

Beitrag als Lesezeichen
suppi ;-)
Lieben Gruß

Hans-Gerd Claßen

Eine Auswahl (Gruppe) in neues Rectangle einfügen

Hans Haesler
  
Beiträge gesamt: 5826

2. Jun 2013, 10:36
Bewertung:

gelesen: 4771

Beitrag als Lesezeichen
Hallo tomval,

eine kürzere Version:

Code
var _dok = app.activeDocument; 

var _aktuelObj = app.selection[0];

var P1 = Math.round(_aktuelObj.geometricBounds[0]);
var P2 = Math.round(_aktuelObj.geometricBounds[1]);
var P3 = Math.round(_aktuelObj.geometricBounds[2]);
var P4 = Math.round(_aktuelObj.geometricBounds[3]);

// Auswahl ausschneiden
app.cut();

var _newRect = _dok.rectangles.add();
_newRect.geometricBounds = [P1 -2,P2 -12,P3 +2,P4 +12];
_newRect.select();
_newRect.strokeWeight = 0;

// Zielrahmen auswählen
_newRect.select();

// Inhalt der Zwischenablage in neuen Rahmen einfügen
app.pasteInto();

So muss die Gruppe nicht erneut ausgewählt werden.

Gruss, Hans

Eine Auswahl (Gruppe) in neues Rectangle einfügen

Hans Haesler
  
Beiträge gesamt: 5826

2. Jun 2013, 11:53
Bewertung:

gelesen: 4721

Beitrag als Lesezeichen
Hallo tomval,

noch etwas: Es ist effizienter, wenn das Objekt nur ein Mal angesprochen wird, um die geometricBounds zu erhalten:

Code
var _dok = app.activeDocument; 

var _aktuelObj = app.selection[0];

var _gB = _aktuelObj.geometricBounds;
var _y1 = Math.round(_gB[0]);
var _x1 = Math.round(_gB[1]);
var _y2 = Math.round(_gB[2]);
var _x2 = Math.round(_gB[3]);

// Auswahl ausschneiden
app.cut();

var _newRect = _dok.rectangles.add();
_newRect.geometricBounds = [_y1-2, _x1-12, _y2+2, _x2+12];
_newRect.select();
_newRect.strokeWeight = 0;

// Zielrahmen auswählen
_newRect.select();

// Inhalt der Zwischenablage in neuen Rahmen einfügen
app.pasteInto();

Gruss, Hans

Eine Auswahl (Gruppe) in neues Rectangle einfügen

tomwal
Beiträge gesamt: 29

4. Jun 2013, 22:47
Bewertung:

gelesen: 4591

Beitrag als Lesezeichen
ich bin erst jetzt dazu gekommen,
nun gab ich es eingebaut.

Super wie es funtioniert. Danke!

Gruß
tomwal

Eine Auswahl (Gruppe) in neues Rectangle einfügen

Hans Haesler
  
Beiträge gesamt: 5826

4. Jun 2013, 22:51
Bewertung:

gelesen: 4584

Beitrag als Lesezeichen
Hallo tomwal,

(jetzt habe ich Dein Pseudo mal wieder richtig getippt ...).

Bitte sehr!

Gruss, Hans

Eine Auswahl (Gruppe) in neues Rectangle einfügen

tomwal
Beiträge gesamt: 29

5. Jun 2013, 08:48
Bewertung:

gelesen: 4533

Beitrag als Lesezeichen
Danke sehr,
noch ne Frage:

der neue Rahmen ist selektiert:
Code
_newRect.select(); 


wie kann ich den Inhalt des neuen Rahmens auswählen,
und verschieben?
([i]Inhalt ist jenachdem eine Gruppe, od ein Image);

Code
_newRect.[i]Inhalt.move(undefined, [10,0]); 


Gruß
tomwal

Eine Auswahl (Gruppe) in neues Rectangle einfügen

Hans Haesler
  
Beiträge gesamt: 5826

5. Jun 2013, 09:22
Bewertung:

gelesen: 4519

Beitrag als Lesezeichen
Hallo tomwal,

am einfachsten wäre, die Werte beim Zuweisen der geometricBounds entsprechend anzupassen:

Code
_newRect.geometricBounds = [_y1-2, _x1-22, _y2+2, _x2+2]; 

Falls das Ergebnis nicht wie erwartet ist, dann sende mir doch bitte ein Dokument mit genauen Angaben.

Gruss, Hans

Eine Auswahl (Gruppe) in neues Rectangle einfügen

tomwal
Beiträge gesamt: 29

5. Jun 2013, 16:01
Bewertung:

gelesen: 4473

Beitrag als Lesezeichen
Hallo Hans,

das "_newRect" beinhaltet eine Gruppe (die wurde per pasteInto() eingefügt)
nun möchte ich die Gruppe auswählen und verschieben.

manuell kann ich im Steuerungsbedienfeld "Inhalt auswählen"
und komme so an die Gruppe.

Wie komme ich per Script an den inhalt/Gruppe?

Gruß
tomwal

Eine Auswahl (Gruppe) in neues Rectangle einfügen

Hans Haesler
  
Beiträge gesamt: 5826

5. Jun 2013, 16:19
Bewertung:

gelesen: 4465

Beitrag als Lesezeichen
Hallo tomwal,

hast Du meinen Vorschlag ausprobiert?

Aber okay, so hast Du Dir das wahrscheinlich vorgestellt:

Code
var _dok = app.activeDocument; 

var _aktuelObj = app.selection[0];

var _gB = _aktuelObj.geometricBounds;
var _y1 = Math.round(_gB[0]);
var _x1 = Math.round(_gB[1]);
var _y2 = Math.round(_gB[2]);
var _x2 = Math.round(_gB[3]);

// Auswahl ausschneiden
app.cut();

var _newRect = _dok.rectangles.add();
_newRect.geometricBounds = [_y1-2, _x1-12, _y2+2, _x2+12];
//_newRect.geometricBounds = [_y1-2, _x1-22, _y2+2, _x2+2];
_newRect.select();
_newRect.strokeWeight = 0;

// Zielrahmen auswählen
_newRect.select();

// Inhalt der Zwischenablage in neuen Rahmen einfügen
app.pasteInto();

// den Inhalt verschieben
var curCont = _newRect.pageItems.everyItem();
curCont.move(undefined, [10, 0]);

Das funktioniert auch, wenn nur ein einzelner Bildrahmen einkopiert wurde.

Gruss, Hans

Eine Auswahl (Gruppe) in neues Rectangle einfügen

tomwal
Beiträge gesamt: 29

5. Jun 2013, 22:05
Bewertung:

gelesen: 4409

Beitrag als Lesezeichen
Hallo Hans,

ja, habe es ausprobiert, aber der Inhalt wurde nicht verschoben nur das übergeornete Rechteck hat sich geändert.

Dein aktuelles Script funktioniert wie gedacht.

nochmal vielen Dank!
tomwal

Eine Auswahl (Gruppe) in neues Rectangle einfügen

Hans Haesler
  
Beiträge gesamt: 5826

5. Jun 2013, 22:15
Bewertung:

gelesen: 4401

Beitrag als Lesezeichen
Hallo tomwal,

ja, klar, ändert sich die Position des umfassenden Rechtecks.
Doch dann könnte man das Ganze verschieben (statt den Inhalt):

Code
var _dok = app.activeDocument; 

var _aktuelObj = app.selection[0];

var _gB = _aktuelObj.geometricBounds;
var _y1 = Math.round(_gB[0]);
var _x1 = Math.round(_gB[1]);
var _y2 = Math.round(_gB[2]);
var _x2 = Math.round(_gB[3]);

// Auswahl ausschneiden
app.cut();

var _newRect = _dok.rectangles.add();
_newRect.geometricBounds = [_y1-2, _x1-22, _y2+2, _x2+2];
_newRect.select();
_newRect.strokeWeight = 0;

// Zielrahmen auswählen
_newRect.select();

// Inhalt der Zwischenablage in neuen Rahmen einfügen
app.pasteInto();

// das Ganze verschieben
_newRect.move(undefined, [10, 0]);

Alles klar? :-)

Gruss, Hans

Eine Auswahl (Gruppe) in neues Rectangle einfügen

tomwal
Beiträge gesamt: 29

12. Jun 2013, 23:04
Bewertung:

gelesen: 4259

Beitrag als Lesezeichen
Alles klar !

Nun gibt es ein Problem bei Dokumenten mit mehreren Doppelseiten, das "newRect" wird immer auf der ersten DS eingefügt!?

viele Grüße
tomwal

Eine Auswahl (Gruppe) in neues Rectangle einfügen

Hans Haesler
  
Beiträge gesamt: 5826

12. Jun 2013, 23:21
Bewertung:

gelesen: 624

Beitrag als Lesezeichen
Hallo tomwal,

nachstehend wird der Name der Seite festgestellt, auf welcher sich das Objekt befindet.

Code
var _dok = app.activeDocument; 

var _aktuelObj = app.selection[0];
try {
var _aktuelPage = _aktuelObj.parentPage.name;
}
catch (e) {
alert ("Das Objekt muss sich auf einer Seite befinden.", "Stop");
exit();
}

var _gB = _aktuelObj.geometricBounds;
var _y1 = Math.round(_gB[0]);
var _x1 = Math.round(_gB[1]);
var _y2 = Math.round(_gB[2]);
var _x2 = Math.round(_gB[3]);

// Auswahl ausschneiden
app.cut();

var _newRect = _dok.pages.itemByName(_aktuelPage).rectangles.add();
_newRect.geometricBounds = [_y1-2, _x1-22, _y2+2, _x2+2];
_newRect.select();
_newRect.strokeWeight = 0;

// Zielrahmen auswählen
_newRect.select();

// Inhalt der Zwischenablage in neuen Rahmen einfügen
app.pasteInto();

// das Ganze verschieben
_newRect.move(undefined, [10, 0]);

So sollte es funktionieren.

Gruss, Hans

Eine Auswahl (Gruppe) in neues Rectangle einfügen

Uwe Laubender
Beiträge gesamt: 5319

12. Jun 2013, 23:59
Bewertung:

gelesen: 613

Beitrag als Lesezeichen
Hallo, Hans!

Anstatt mit der "name" property des Page objects würde ich lieber mit dem "documentOffset" arbeiten, um Verwechslungen ganz auszuschließen.

Der Name kann schließlich öfter als einmal im Dokument vorkommen.
Und "_dok.pages.itemByName(_aktuelPage)" erwischt dann immer den ersten besten Fall.

Code
var _aktuelPageIndex = _aktuelObj.parentPage.documentOffset; 

//…

var _newRect = _dok.pages[_aktuelPageIndex].rectangles.add();

*****
Mit herzlichem Gruß,
Uwe Laubender

Eine Auswahl (Gruppe) in neues Rectangle einfügen

Hans Haesler
  
Beiträge gesamt: 5826

13. Jun 2013, 08:45
Bewertung:

gelesen: 575

Beitrag als Lesezeichen
Hallo, Uwe!

Stimmt! Leider lässt InDesign das zu.
Doch so was wird nur ausnahmsweise benutzt.

Aber tomwal wird seine Dokumente kennen und wissen, ob diese Vorsichtsmassnahme notwendig ist.

Gruss, Hans