So erstellen Sie ein Skript für die Rahmengröße für ein vorhandenes Graph Builder-FensterGibt es eine Möglichkeit, die Rahmengröße für ein vorhandenes Graph Builder-Fenster mit JSL festzulegen?
Angenommen, ich habe ein Graph Builder-Fenster geöffnet und möchte eine JSL-Datei ausführen, die die Gesamtrahmengröße des Diagramms in diesem Fenster auf 800 x 600 festlegt. Ist das möglich, ohne den Verweis auf das GB-Objekt im JSL-Skript zu haben?
Automatisierung und SkripterstellungBetreff: So erstellen Sie ein Skript für die Rahmengröße für ein vorhandenes Graph Builder-FensterDas hat es geschafft!Danke, Jarmo, und an alle, die geantwortet haben!!
Betreff: So erstellen Sie ein Skript für die Rahmengröße für ein vorhandenes Graph Builder-FensterIch rate hier nur... An Fenster anpassen muss an Graph Builder gesendet werden, nicht an Rahmenbox (<< „Get Scriptable Object“ könnte hier hilfreich sein). Wenn Wrap (oder Gruppe X) verwendet wird, müssen Sie die Größe möglicherweise basierend auf der Anzahl der Gruppen berechnen. Oder könnten Sie vielleicht die Größe des Graph Builder-Fensters manipulieren?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Variables(X(:Sex), Y(:Height), Group X(:Age)),
Elements(Box Plot(X, Y))
);
wait(0);
win = Get Window List();
//Find graph builder windows
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
last_gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
last_gb << Fit to Window("On");
last_gb << Size(800,600); // instead of manipulating framebox
//frame = Report(last_gb)[FrameBox(1)];
//frame << Frame Size(800, 600);
XPath ist keine JMP-Sache XPath – Wikipedia , aber es ist eine einfache Möglichkeit, auf verschiedene Objekte in Berichten zuzugreifen. Mithilfe von << Get XML können Sie sehen, was Sie XPathing durchführen
Report(gb) << Get Xml;
Betreff: So erstellen Sie ein Skript für die Rahmengröße für ein vorhandenes Graph Builder-FensterEindrucksvoll.
Beachten Sie, dass diese Rahmengrößen nicht immer funktionieren, wenn „An Fenster anpassen“ nicht deaktiviert ist.Ich habe 30 Minuten lang versucht, diesen Code anzupassen, um auch die Einstellung „An Fenster anpassen“ zu ändern, ohne Erfolg.Irgendwelche Ideen, wie man das macht?
Und wenn das Graph Builder-Fenster mehrere Plots hat, z. B. mit einer Variablen im Feld „Umbruch“, ändert die Rahmengröße seltsamerweise die einzelnen Plotrahmen und nicht den gesamten Plotbereich.Ist es möglich, statt der einzelnen Parzellen die gesamte Grundstücksfläche auf eine bestimmte Größe zu verkleinern?
Und schließlich: Wo haben Sie gelernt, so zu programmieren?Als 10-jähriger Python-Programmierer (und 20-jähriger Perl-Programmierer) würde ich sagen, dass JSL ziemlich schwer zu verstehen ist.Auch nach dem Lesen des Skriptindex für diese Elemente (XPath, Select...) Ich bin mir immer noch nicht sicher, was sie hier bedeuten ...
Danke!
Betreff: So erstellen Sie ein Skript für die Rahmengröße für ein vorhandenes Graph Builder-FensterFür @Mark_Bailey Damit das Skript wie beschrieben funktioniert, müsste das Diagrammfeld das letzte geöffnete Fenster sein. Ich vermute, dass dies beim Starten aus einem separaten Skript nicht mehr der Fall ist.Sie könnten es so ändern, dass nur Graph Builder-Fenster ausgewählt werden. Sie möchten überprüfen, ob mindestens ein Fenster geöffnet ist.
Names Default to Here( 1 );
//Find graph builder windows
graphs = filter each({w}, win,
if(
length(w << XPath("//OwnerBox[@helpKey='Graph Builder']")) > 0 ,
1,
0
)
);
//Choose the last one
frame = (graphs[N Items(graphs)] << XPath( "//FrameBox" ))[1];
//Modify the frame
frame << Select << Frame Size( 800, 600 );
Beachten Sie, dass ich bei der Suche nach 3D-Plotfenstern in diesem Add-In etwas Ähnliches mache: 3D-Plot-Tools , und dort lasse ich den Benutzer auswählen, welche Fenster geändert werden sollen.Der Code ist aktiviert GitHub .
Betreff: So erstellen Sie ein Skript für die Rahmengröße für ein vorhandenes Graph Builder-FensterDiese Antwort gefällt mir, aber es tritt ein Fehler auf, wenn ich die Zeilen „dt =…“ und „obj = …“ herausnehme und „//!“ einfüge. oben und doppelklicken Sie darauf.Hier ist der Fehler:
Subscript Range in access or evaluation of '(win[N Items(win)] << XPath("//FrameBox"))[ /*###*/1]' , (win[N Items( win )] << XPath( "//FrameBox" ))[/*###*/1]Betreff: So erstellen Sie ein Skript für die Rahmengröße für ein vorhandenes Graph Builder-FensterHier ist ein alternativer Ansatz. Sie können eine Liste aller aktuellen Fenster erhalten. Sie sind nach Aussehen sortiert. Wenn Sie Graph Builder also gerade erst geöffnet haben, ist es das letzte Element. Andernfalls können Sie die Liste der Fenster überprüfen, um die gewünschten GB zu finden.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
);
win = Get Window List();
frame = (win[N Items(win)] << XPath( "//FrameBox" ))[1];
frame << Select << Frame Size( 800, 600 );
Ihr Skript könnte als Menü- oder Symbolleistenelement hinzugefügt oder in ein Add-In umgewandelt werden.
Betreff: So erstellen Sie ein Skript für die Rahmengröße für ein vorhandenes Graph Builder-FensterAm einfachsten wäre es, wenn Sie den Verweis auf den Graph Builder erhalten könnten. Sie können beispielsweise << Get Scriptable Object verwenden, nachdem Sie den Verweis auf das Gliederungsfeld haben
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
gb = (nw[OutlineBox("Graph Builder")] << Get Scriptable Object);
fb = Report(gb)[FrameBox(1)];
fb << Frame Size(800,200);
In einigen Fällen können Sie Framebox auch direkt im Fenster finden
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
nw[FrameBox(1)] << Frame Size(800,200);
Und schließlich XPath
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
(nw << XPath("//FrameBox")) << Frame Size(800,200);
Sie können mit „Current Window()“ auf das Fenster verweisen, die Verwendung über das Skriptfenster ist jedoch etwas nervig und funktioniert viel besser über die Symbolleiste/Verknüpfung/das Add-In.