[GastForen Programme Print/Bildbearbeitung Adobe InDesign Interaktives Skript ... WOW!

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

Interaktives Skript ... WOW!

Stephan_M
Beiträge gesamt: 480

8. Aug 2008, 23:13
Beitrag # 1 von 11
Bewertung:
(5291 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
Wow! Ein interaktives Script für Indesign mit ScriptUI, das Änderungen sofort(!) an Objekten ausführt.

Verzeiht das ungefragte Posting, aber ich muss von meinem Lernerfolg berichten *freu*. Ich poste, damit zu dem Thema im Forum mehr gefunden werden kann.

Das Beispiel unten (in Indesign CS3 5.03_win läufts) öffnet einen nicht modalen Dialog (genauer, eine Palette) mit einem Slider. Während diese Palette offen ist kann der User weiter mit InDesign interagieren, beispielsweise andere Objekte selektieren. Der Slider rotiert alle selektierten Objekte.
Wahnsinn!

Code
#targetengine "session"  
#target indesign

function SnpCreateSlider () {
this.windowRef = null;
}

SnpCreateSlider.prototype.run = function() {
var retval = true;

// Create a palette-type window (a modeless or floating dialog),
var win = new Window("palette", "SnpCreateSlider", [150, 150, 600, 300]);
this.windowRef = win;

// Add a panel to contain the components
win.pnl = win.add("panel", [10, 10, 440, 100], "Move slider around");
// Add some labels that describe the state of the slider
win.pnl.minLbl = win.pnl.add("statictext", [10, 47, 35, 60], "-180");
win.pnl.curLbl = win.pnl.add("statictext", [121, 47, 170, 60], "0");
win.pnl.maxLbl = win.pnl.add("statictext", [210, 47, 250, 60], "180");
win.pnl.displayTextLbl = win.pnl.add("statictext", [290, 20, 380, 40], "Current value:");
win.pnl.displayLbl = win.pnl.add("statictext", [385, 20, 425, 40], "0");
// Add a slider control
win.pnl.sliderCtrl = win.pnl.add("slider", [20, 20, 230, 45], 0, -180, 180);

// Add buttons
win.doneButton = win.add("button",[320, 110, 420, 140] , "Close");

// Define behavior for when the slider value changes
win.pnl.sliderCtrl.onChanging = function() {
var val = Math.round(win.pnl.sliderCtrl.value);
// Update the label text with the current slider value.
win.pnl.displayLbl.text = val;
};
// Define behavior for when the slider is released
win.pnl.sliderCtrl.onChange = function() {
var val = Math.round(win.pnl.sliderCtrl.value);
rotateIt(val);
};
// Define behavior for the "Exit" button
win.doneButton.onClick = function () {
win.close();
};
// Display the window
win.center();
win.show();
return retval;
}

function checkSelection() {
if (app.documents.length == 0 || app.selection.length == 0) {
alert("Please select an object."); return false;
}
return true;
}

function rotateIt(Angle) {
if (!checkSelection()) return;
var myItems = app.selection;
var myAnchor = app.layoutWindows[0].transformReferencePoint;

for (var j = myItems.length - 1; j >= 0; j--) {
var myItem = myItems[j];
var myTransformationMatrix = app.transformationMatrices.add();
var itemAngle = myItem.rotationAngle;
myTransformationMatrix = myTransformationMatrix.rotateMatrix(Angle-itemAngle);
myItem.transform(CoordinateSpaces.pasteboardCoordinates, myAnchor, myTransformationMatrix);
}
}

/**
"main program": construct an anonymous instance and run it
as long as we are not unit-testing this snippet.
*/
if(typeof(SnpCreateSlider_unitTest) == "undefined") {
new SnpCreateSlider().run();
}


Ansonsten gab's dazu schonmal hier was:
http://www.hilfdirselbst.ch/...heckbox_P359812.html



Frage an Martin und andere Skripter:
Wie würde man es nun geschickt anstellen, das das Skript mehr wie eine Preview wirkt. Das es bei einem "Done"-Button die Änderung durchführt, und auf Cancel Button alle Rotationen Rückgängig macht?

Würded Ihr die alle Slider-Änderungswerte in ein CustomLabel schreiben? Und bei 'Cancel' die Werte im CustomLabel zusammenaddieren und dann einmal wieder das Objekt (zurück)rotieren? Oder geht's geschickter?

Das alles ist ein "Proof of Concept" und soll mal in mein verbessertes "ScatterSelected"-Skript münden, mit dem man Objekte ein bisschen Zufällig anschubsen und verteilen kann.
(http://www.hilfdirselbst.ch/...tring=Scatter#344366)

Herzlichste Grüße,
Stephan
X

Interaktives Skript ... WOW!

Gerald Singelmann
  
Beiträge gesamt: 6268

9. Aug 2008, 13:28
Beitrag # 2 von 11
Beitrag ID: #362011
Bewertung:
(5206 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Wie würde man es nun geschickt anstellen, das das Skript mehr wie eine Preview wirkt

Kann man nicht die Liste der markierten Objekte und ihre zu ändernden Eigenschaften einfach in ein Array speichern, bevor die UI aufgebaut wird? Das Script läuft ja die ganze Zeit und verliert damit seine Variablen nicht.


als Antwort auf: [#361989]

Interaktives Skript ... WOW!

Stephan_M
Beiträge gesamt: 480

9. Aug 2008, 19:59
Beitrag # 3 von 11
Beitrag ID: #362026
Bewertung:
(5153 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja, sehr gute Idee. Damit probier ich herum.
Und der Dialog, fällt mir dabei auf, muss erstmal modal sein, damit der User nicht zwischendurch andere Objekte auswählen kann.
Gruß, Stephan


als Antwort auf: [#362011]

Interaktives Skript ... WOW!

Gerald Singelmann
  
Beiträge gesamt: 6268

9. Aug 2008, 20:14
Beitrag # 4 von 11
Beitrag ID: #362028
Bewertung:
(5150 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Und der Dialog, fällt mir dabei auf, muss erstmal modal sein

Also "Window ('dialog'..:" statt "Window ('palette' ...", oder?
Dann braucht man das Script auch nicht in dem "session" target laufen zu lassen.


als Antwort auf: [#362026]

Interaktives Skript ... WOW!

Stephan_M
Beiträge gesamt: 480

10. Aug 2008, 00:36
Beitrag # 5 von 11
Beitrag ID: #362044
Bewertung:
(5110 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das klappt aber leider nicht. Wenn ich von "Palette" auf "Dialog" stelle, dann spricht das Skript die selektierten Indesign Objekte nicht mehr an. Es passiert dann beim Slider gar nichts. Mit Sessiontarget oder ohne. *ratlos*


als Antwort auf: [#362028]

Interaktives Skript ... WOW!

Marc Sidon
Beiträge gesamt: 262

11. Aug 2008, 13:03
Beitrag # 6 von 11
Beitrag ID: #362127
Bewertung:
(4991 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

kann mir jemand mal verraten, wo ich diese ganzen "Snp..."-Skripte finde?

Im JAVASCRIPT TOOLS GUIDE wird immer davon geredet, dass die beim ExtendScript Toolkit dabei sind. Konnte sie aber bisher nirgendwo finden....
Auch eine Google-Suche half bisher nicht...

Gruß,
Marc


als Antwort auf: [#362044]

Interaktives Skript ... WOW!

Stephan_M
Beiträge gesamt: 480

11. Aug 2008, 13:20
Beitrag # 7 von 11
Beitrag ID: #362136
Bewertung:
(4981 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
http://www.adobe.com/devnet/bridge/
Download Bridge CS3 SDK anklicken.


als Antwort auf: [#362127]

Interaktives Skript ... WOW!

Marc Sidon
Beiträge gesamt: 262

11. Aug 2008, 14:51
Beitrag # 8 von 11
Beitrag ID: #362155
Bewertung:
(4943 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Super, danke....

Gruß,
Marc


als Antwort auf: [#362136]

Interaktives Skript ... WOW!

Marc Sidon
Beiträge gesamt: 262

12. Aug 2008, 10:10
Beitrag # 9 von 11
Beitrag ID: #362229
Bewertung:
(4877 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo nochmal,

gibt es irgendwie die Möglichkeit, dass das Skript mitbekommt, wenn ein anderes Objekt markiert wird? Also einen "onClickOnObjectInDocument"-Event.... oder so!?!?

Oder ist das nur per C++ möglich?

Gruß,
Marc


als Antwort auf: [#362155]

Interaktives Skript ... WOW!

Stephan_M
Beiträge gesamt: 480

25. Aug 2008, 02:03
Beitrag # 10 von 11
Beitrag ID: #363693
Bewertung:
(4665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier die Anwendung des obigen Snippets in einem viel komplexeren Beispiel-Skript:
http://www.hilfdirselbst.ch/...;;page=unread#unread

@Marc, das wüsste ich auch sehr gerne. Das könnte ich verdammt gut gebrauchen für das gerade genannte Script.


als Antwort auf: [#362229]

Interaktives Skript ... WOW!

Gerald Singelmann
  
Beiträge gesamt: 6268

28. Aug 2008, 16:31
Beitrag # 11 von 11
Beitrag ID: #364152
Bewertung:
(4527 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Von Rorohiko gibt es eine ExtendScript-Erweiterung namens APID, die eine ganze Reihe interessanter Features bietet. Unter anderem steht da dieser Passus:
Zitat - APID defines an 'event model', where one page item can 'observe' another, and page items can 'listen' to events like open, close, save, idle, context menu,... For example, simply moving one page item can automatically trigger the execution of a script that makes other page items 'follow'. Without APID, ExtendScripts are 'static' entities - i.e. they need to be launched by the user via the Scripts palette, and are cannot be activated in an event-driven way.

Ob damit ein angeklicktes Object der offenen Palette Bescheid geben kann, weiß ich allerdings auch nicht.

Edit: http://www.rorohiko.com/products.html


als Antwort auf: [#363693]
(Dieser Beitrag wurde von Gerald Singelmann am 28. Aug 2008, 16:32 geändert)
X