Objekte horizontal anhängen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich habe mir einen kleinen Bildbetrachter geschrieben, der es mir ermöglicht, in JMP 9 einen Ordner mit digitalen Fotos zu durchsuchen, und füge das folgende Skript ein.Mein Problem besteht darin, dass ich die relativen Positionen des Listenfelds und des Diagrammfelds, in denen die Bilder angezeigt werden, beibehalten möchte, während das Tool verwendet wird.Wenn ich im Moment ein Bild aus der Liste auswähle, um das ursprüngliche zu ersetzen, wird das neue Diagrammfeld unterhalb der Liste angehängt, während ich möchte, dass es an der gleichen Position erscheint, an der ich es ursprünglich platziert habe – rechts von der Liste .Ich weiß Warum Es macht es: Die Eigenschaft „<< append“ hängt das neue Diagramm vertikal an.Die Frage ist, wie kann ich das Skript ändern, um es horizontal anzuhängen?
// Programmstart;
Protokoll löschen () ;
Fotoordner = „C:\Meine Fotos\Kamerakarte 1\102_FUJI\“ ;
Bildliste = Dateien im Verzeichnis ( Fotoordner ) ; // Jede Datei ist eine JPEG-Datei, daher ist kein Filtern erforderlich.
Expr_Create_Image = Ausdruck (
Bildname = Fotoordner || Bildliste [ Bildnummer ] ;
GB = Diagrammfeld (
Rahmengröße ( 410 , 308 ) ,
X-Skala ( 0 , 100 ) ,
Y-Skala ( 0 , 100 ) ,
<< Hintergrundfarbe ( { 0,7 , 0,7 , 0,7 } ) ,
<< Bild hinzufügen ( Offen ( Bildname ) , Grenzen ( Links ( 5 ) , Rechts ( 95 ) , Spitze ( 95 ) , Unten ( 5 ) ) )
) ;
// Ich möchte die Äxte nicht sehen, also entferne sie;
GB [ Achsbox ( 2 )] << löschen ;
GB [ Achsbox ( 1 )] << löschen ;
) ;
Expr_Replace_Chart = Ausdruck (
jetzt [ OwnerBox ( 1 )] << löschen ; // Das alte aus dem Fenster löschen;
jetzt << anhängen ( GB ) ; // Das neue anhängen;
) ;
Pfund = Listenfeld (
Bildliste ,
Bildnummer = ( Pfund << Holen Sie sich ausgewählte Indizes )[ 1 ] ;
Bewertung ( Expr_Create_Image ) ; // Neues Diagrammfeld erstellen;
Bewertung ( Expr_Replace_Chart ) ; // Ersetze den neuen Graphen durch den alten;
,
max ausgewählt ( 1 )
) ;
Bildnummer = 1 ; // Zunächst das erste anzeigen;
Bewertung ( Expr_Create_Image ) ; // Diagramm erstellen;
Pfund << Satz ausgewählt ( Bildnummer , 1 ) ; // Das erste Element der Liste vorwählen;
jetzt = Neues Fenster ( "Neues Fenster" , H-Listenfeld ( Pfund , GB ) ) ; // Und das Fenster anzeigen;
// Programmende;
Gibt es allgemeiner gesagt eine Möglichkeit, das ursprüngliche Diagramm einfach durch das neue zu ersetzen, sodass es nicht erforderlich ist, das Anzeigefenster teilweise zu dekonstruieren und dann wiederherzustellen, wie ich es derzeit mache?Die offensichtliche Lösung wäre einfach, das ursprüngliche Bild im Diagrammfeld durch das neue aus dem Listenfeld zu ersetzen, aber das gelingt mir scheinbar nicht: Ich verwende die Eigenschaft „<< Bild hinzufügen“ für dasselbe Diagrammfeld a Das zweite Mal scheint nicht zu funktionieren – weshalb ich im Moment jedes Mal eine neue Diagrammbox erstelle.
Vielen Dank für alle Vorschläge.
Objekte horizontal anhängenNette kleine Anwendung! Ich habe die Verallgemeinerung des Problems (modifizieren statt ersetzen von GB) nicht untersucht, aber ich habe eine kleine Änderung vorgenommen, die das horizontale Layout beizubehalten scheint. Im folgenden Skript zeige ich nur die geänderten Zeilen.
...
Ausdruck_Ersetzen_Diagramm = Ausdruck (
nw [ OwnerBox ( 1 )] << löschen ; // Lösche das Alte aus dem Fenster;
hlb << append ( gb ) ; // Füge das Neue an die H-Listenbox an
);
...
versuchen ( Bewertung ( Expr_Create_Image )) ; // Diagramm erstellen; // Ich habe dies in „try“ eingeschlossen, um eine Fehlermeldung beim ersten Mal zu vermeiden
...
nw = Neues Fenster ( "Neues Fenster" , hlb = H Listbox ( Pfund , gb ) ) ; // Und zeige das Fenster an; gib der H-Listbox eine Referenz
...
Objekte horizontal anhängenAusgezeichnet – vielen Dank! (Eigentlich wäre es noch nützlicher, wenn man die Abmessungen jedes Bildes beim Laden bestimmen könnte: Wenn ich das könnte, könnte ich jedes Diagramm jedes Mal mit dem richtigen Seitenverhältnis erstellen, anstatt alle im Hochformat aufgenommenen Fotos ins Querformat zu quetschen, wie es derzeit der Fall ist. Ich sehe spontan keine Möglichkeit, das zu tun, aber das heißt nicht, dass es nicht möglich ist. Wenn jemand zufällig weiß, wie das geht, könnte er es mir zeigen?)
Nochmals vielen Dank,
David
Betreff: Objekte horizontal anhängenHier ist ein Beispiel (eine Abwandlung Ihrer ursprünglichen Idee), das Bilder verwendet.
Bildliste = Dateien im Verzeichnis ( Fotoordner = Verzeichnis auswählen () ) ;
Bildnummer = 1 ;
Expr_Create_Image = Expr (
Bildname = Fotoordner || Bildliste [ Bildnummer ] ;
img = Offen ( ImageName , jpg ) ;
img_size = img << getsize ;
Wenn ( img_size [ 1 ] > img_size [ 2 ] ,
img << set size ( { 410 , 308 } ) ,
img << set size ( { 308 , 410 } )
);
pb = Bildkasten ( img ) ;
bb = Verteilerkasten ( , pb ) ;
);
Expr_replace_image = Expr (
nw[Verteilerkasten( 1 )] << delete;
hlb << append ( bb ) ;
);
lb = Listenfeld (
Bildliste ,
ImageNumber = ( lb << get selected indices )[ 1 ] ;
Eval ( Expr_Create_Image ) ;
Eval ( Expr_replace_image ) ;,
max ausgewählt ( 1 )
);
Eval ( Expr_Create_Image ) ;
nw = Neues Fenster ( "prüfen" , hlb = H-Listenfeld ( lb , bb ) ) ;
Betreff: Objekte horizontal anhängenPerfekt – genau das habe ich gebraucht, und es vereinfacht die Sache obendrein noch. Vielen Dank!
Objekte horizontal anhängenDas hat Spaß gemacht. Um die App nicht unnötig aufzublähen, stelle ich auch eine Version mit Schaltflächen zum Drehen und Zoomen des aktuellen Bildes bereit. Die Alt-Taste kehrt die Funktion um.
Bildliste = Dateien im Verzeichnis ( Fotoordner = Verzeichnis auswählen () ) ;
Bildnummer = 1 ;
Expr_pb = Expr ( pb = Verteilerkasten ( , Bildkasten ( img ) ) ) ;
Expr_Create_Image = Expr (
Bildname = Fotoordner || Bildliste [ Bildnummer ] ;
img = Offen ( ImageName , jpg ) ;
img_size = img << getsize ;
Wenn ( img_size [ 1 ] > img_size [ 2 ] ,
img << set size ( { 410 , 308 } ) ,
img << set size ( { 308 , 410 } )
);
Expr_pb ;
);
Expr_replace_image = Expr (
nw[Verteilerkasten( 1 )] << delete;
hlb << append ( pb ) ;
);
rotate = Knopfbox ( "Drehen" ,
Wenn ( Ist Alt-Taste () ,
img << rotate ( - 90 ) ,
img << rotate ( 90 )
);
Expr_pb ;
Expr_replace_image ;
);
Zoom = Schaltflächenfeld ( "Zoom" ,
Wenn ( Ist Alt-Taste () ,
img << set size ( Bewertungsliste ( {( img << get size )[ 1 ] / 1,5 , ( img << get size )[ 2 ] / 1,5 } ) ) ,
img << set size ( Bewertungsliste ( {( img << get size )[ 1 ] * 1,5 , ( img << get size )[ 2 ] * 1,5 } ) )
);
Expr_pb ;
Expr_replace_image ;
);
rotate << set tip ( "Drehe um 90° nach rechts, halte die Alt-Taste gedrückt, um um 90° nach links zu drehen" ) ;
Zoom << Tipp festlegen ( "Zum Vergrößern drücken, Alt-Taste gedrückt halten zum Verkleinern" ) ;
lb = Listenfeld (
Bildliste ,
ImageNumber = ( lb << get selected indices )[ 1 ] ;
Expr_Create_Image ;
Expr_replace_image ;,
max ausgewählt ( 1 )
);
Expr_Create_Image ;
nw = Neues Fenster ( "prüfen" , hlb = H-Listenfeld ( V-Listenfeld ( lb , rotate , zoom ) , pb ) ) ;
Betreff: Objekte horizontal anhängenDas ist super ! Ich habe das oben Genannte gerade in eine Anwendung integriert, an der ich momentan arbeite. Sie dient als universeller Grafikdateibrowser. Die einzige Änderung, die ich wahrscheinlich vornehmen werde, ist, das Seitenverhältnis (410 x 308) so anzupassen, dass es alle Eingabedimensionen berücksichtigt. Die Bilder, die ich betrachte, können nämlich exportierte Ausgaben von JMP-Grafikfeldern enthalten, die prinzipiell jede beliebige Größe haben können. Warum laden Sie nicht eine Kopie des obigen Codes in die File Exchange hoch? Dort finden Sie praktische Beispiele für die Verwendung von Bildfeldern, das Austauschen von Komponenten in einem Ausgabefenster und die Nutzung von … Der Schlüssel liegt darin, dass man sich unzählige mögliche Anwendungsgebiete vorstellen kann.
Nochmals vielen Dank!