J'essaie d'automatiser la capture d'images graphiques JMP via C #. D'après ce que j'ai trouvé dans la documentation, la bonne façon de procéder semble être d'obtenir un descripteur du graphique avec GetGraphicItemByName ou GetGraphicItemByType, puis SaveGraphicItem.
J'ai trouvé quelques conseils de ce post précédent sur le sujet:
https://community.jmp.com/t5/Discussions/GetGraphicItemByName-Requires-the-name-where-are-are-the-names/td-p/20947
Plus précisément, cette réponse sur la bonne utilisation de celui-ci (la documentation manque vraiment à ce sujet sinon)
https://community.jmp.com/t5/Discussions/GetGraphicItemByName-Requires-the-name-where-are-are-the-names/mp/20950/highlight/true#M19047
Toutefois... ça ne marche pas pour tout ce que j'ai essayé. Tout génère la même erreur inutile qui semble être une exception de niveau natif dans JMP:
The server threw an exception. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT))
J'ai essayé avec les deux variétés de ByType et ByName en utilisant plusieurs objets différents dans l'arbre. J'ai le sentiment qu'il me manque quelque chose mais je ne sais pas ce que cela pourrait être, car l'erreur ne me donne pas le moindre indice sur ce qui ne va pas.
JMP.Contour contour = Doc.CreateContourPlot();
contour.LaunchAddX(X1);
contour.LaunchAddX(X2);
contour.LaunchAddY(Y);
contour.FillAreas(true);
contour.ShowContours(true);
contour.Launch();
int handle = -1;
string errors = string.Empty;
for (int n = 0; n < 11; n++)
{
string name = "outline box";
switch (n)
{
case 1: name = "outlinebox"; break;
case 2: name = "Outline Box"; break;
case 3: name = "Outline box"; break;
case 4: name = "outline box"; break;
case 5: name = "framebox"; break;
case 6: name = "FrameBox"; break;
case 7: name = "Frame Box"; break;
case 8: name = "frame box"; break;
case 9: name = "Frame box"; break;
case 10: name = "Framebox"; break;
}
try
{
handle = contour.GetGraphicItemByType(name, 1);
//handle = contour.GetGraphicItemByName(name);
Console.WriteLine("Success with n = " + n);
break;
}
catch (Exception e)
{
errors += e.Message + Environment.NewLine;
}
}
if (handle == -1) throw new Exception("No handle found, errors: " + Environment.NewLine + errors);
J'ai résolu le problème. Il s'avère que l'erreur était ailleurs dans mon code. Je ne suis pas sûr de savoir pourquoi cela a jeté l'erreur. La table que j'ai fournie ne contenait pas les colonnes auxquelles je m'attendais en raison d'un autre bogue dans mon code. Je me serais attendu à ce que JMP ait détecté une erreur aussi simple et une exception plus pertinente. C'est pourquoi j'ai supposé un problème avec la fonction elle-même.
Si quelqu'un d'autre rencontre un problème similaire, assurez-vous de vérifier tous les autres aspects de votre contribution, car vous ne pouvez pas compter sur JMP pour signaler une exception significative ...