Sto cercando di automatizzare l'acquisizione di immagini grafiche JMP tramite C #. Da quello che ho trovato attraverso la documentazione, il modo corretto per farlo sembra ottenere un handle del grafico con GetGraphicItemByName o GetGraphicItemByType e quindi SaveGraphicItem.
Ho trovato alcune indicazioni da questo post precedente sull'argomento:
https://community.jmp.com/t5/Discussions/GetGraphicItemByName-Requires-the-name-where-are-the-names/td-p/20947
In particolare, questa risposta sul corretto utilizzo di esso (la documentazione è davvero carente su questo altrimenti)
https://community.jmp.com/t5/Discussions/GetGraphicItemByName-Requires-the-name-where-are-the-names/mp/20950/highlight/true#M19047
Però... non funziona per niente che ho provato. Tutto genera lo stesso errore inutile che sembra essere un'eccezione di livello nativo in JMP:
The server threw an exception. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT))
Ho provato con entrambe le varietà di ByType e ByName usando diversi oggetti all'interno dell'albero. Mi sento come se mi mancasse qualcosa, ma non so come potrebbe essere, dato che l'errore non mi dà la più pallida idea di cosa c'è che non va.
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);
Ho risolto il problema. Risulta che l'errore era altrove nel mio codice. Non sono sicuro del motivo per cui ha gettato l'errore che ha fatto però. La tabella che ho fornito non aveva le colonne che mi aspettavo a causa di un altro bug nel mio codice. Mi sarei aspettato che JMP avrebbe dovuto interpretare un errore così semplice e generare un'eccezione più rilevante, motivo per cui ho assunto un problema con la funzione stessa.
Se qualcun altro si imbatte in questo aspetto con un problema simile, assicurati di controllare tutti gli altri aspetti del tuo input poiché non puoi fare affidamento su JMP per riportare un'eccezione significativa ...