Comment créer un script sur la taille du cadre pour la fenêtre Graph Builder existanteExiste-t-il un moyen de définir la taille du cadre d'une fenêtre Graph Builder existante avec JSL ?
Par exemple, supposons que j'ai une fenêtre Graph Builder ouverte et que je souhaite exécuter un fichier JSL qui définira la taille globale du cadre du graphique dans cette fenêtre sur 800x600. Est-ce possible sans avoir la référence à l'objet GB dans le script JSL ?
Automatisation et scriptsRe : Comment créer un script sur la taille du cadre pour la fenêtre Graph Builder existanteC'est fait !Merci, Jarmo, et à tous ceux qui ont répondu !!
Re : Comment créer un script sur la taille du cadre pour la fenêtre Graph Builder existanteJe suppose juste ici... Ajuster à la fenêtre doit être envoyé à Graph Builder et non à la zone de cadre (<< Obtenir un objet scriptable peut aider ici). Si Wrap est utilisé (ou Groupe X), vous devrez peut-être calculer la taille en fonction du nombre de groupes. Ou pourriez-vous peut-être manipuler la taille de la fenêtre du générateur de graphiques ?
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 n'est pas un truc de JMP XPath — Wikipédia , mais c'est un moyen simple d'accéder à différents objets dans les rapports. Utiliser << Get XML vous aide à voir ce que vous êtes XPathing
Report(gb) << Get Xml;
Re : Comment créer un script sur la taille du cadre pour la fenêtre Graph Builder existanteGénial.
Notez que si « Ajuster à la fenêtre » n'est pas « désactivé », ces tailles de cadre ne fonctionnent pas toujours.J'ai essayé pendant 30 minutes d'adapter ce code pour modifier également le paramètre "Ajuster à la fenêtre" sans succès.Des idées sur la façon de faire ça ?
Et, curieusement, si la fenêtre Graph Builder comporte plusieurs tracés, par exemple avec une variable dans le champ Wrap, la taille du cadre modifie les cadres de tracé individuels au lieu de la zone de tracé entière.Est-il possible de redimensionner la zone entière de la parcelle à une taille donnée au lieu des parcelles individuelles ?
Enfin, où as-tu appris à coder comme ça ?En tant que codeur Python depuis 10 ans (et codeur Perl depuis 20 ans), je dirai que JSL est assez difficile à comprendre.Même après avoir lu l'index de script sur ces éléments (XPath, Select...) Je ne suis toujours pas sûr de ce qu'ils veulent dire ici...
Merci!
Re : Comment créer un script sur la taille du cadre pour la fenêtre Graph Builder existantePour @Mark_Bailey Pour que le script fonctionne tel qu'il est écrit, la boîte graphique devrait être la dernière fenêtre ouverte, je suppose que lors de son lancement à partir d'un script séparé, ce n'est plus le cas.Vous pouvez le modifier comme ceci pour sélectionner uniquement les fenêtres du générateur de graphiques, vous voudriez vérifier qu'au moins une fenêtre est ouverte.
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 );
Notez que je fais quelque chose de similaire à ceci lorsque je recherche des fenêtres de tracé 3D dans ce complément : Outils de tracé 3D , et là je laisse l'utilisateur choisir la ou les fenêtres à modifier.Le code est activé GitHub .
Re : Comment créer un script sur la taille du cadre pour la fenêtre Graph Builder existanteJ'aime cette réponse, mais des erreurs apparaissent lorsque je supprime les lignes "dt =..." et "obj = ..." et que je mets "//!" en haut et double-cliquez dessus.Voici l'erreur :
Subscript Range in access or evaluation of '(win[N Items(win)] << XPath("//FrameBox"))[ /*###*/1]' , (win[N Items( win )] << XPath( "//FrameBox" ))[/*###*/1]Re : Comment créer un script sur la taille du cadre pour la fenêtre Graph Builder existanteVoici une approche alternative. Vous pouvez obtenir une liste de toutes les fenêtres actuelles. Ils sont classés par apparence, donc si vous venez d'ouvrir Graph Builder, ce sera le dernier élément. Sinon, vous pouvez inspecter la liste des fenêtres pour trouver le Go souhaité.
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 );
Votre script peut être ajouté en tant qu'élément de menu ou de barre d'outils, ou transformé en complément.
Re : Comment créer un script sur la taille du cadre pour la fenêtre Graph Builder existanteLe plus simple serait si vous pouviez obtenir la référence au Graph Builder. Vous pouvez par exemple utiliser << Get Scriptable Object après avoir obtenu la référence à la boîte de contour
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);
Ou dans certains cas, vous pourrez peut-être trouver framebox directement depuis la fenêtre
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);
Et enfin 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);
Vous pouvez obtenir une référence à la fenêtre en utilisant Current Window(), mais c'est un peu ennuyeux à utiliser depuis la fenêtre de script et fonctionne beaucoup mieux depuis la barre d'outils/raccourci/complément.