Estoy intentando automatizar la captura de imágenes de gráficos JMP a través de C #. De lo que encontré a través de la documentación, la forma correcta de hacerlo parece ser obtener un controlador de la gráfica con GetGraphicItemByName o GetGraphicItemByType y luego SaveGraphicItem.
Encontré una guía de este post anterior sobre el tema:
https://community.jmp.com/t5/Discussions/GetGraphicItemByName-Requises-the-name-where-are-the-names/td-p/20947
Específicamente, esta respuesta sobre el uso adecuado de la misma (de lo contrario faltará la documentación).
https://community.jmp.com/t5/Discussions/GetGraphicItemByName-Requires-the-name-where-are-the-names/mp/20950/highlight/true#M19047
Sin embargo... No funciona para nada de lo que he intentado. Todo produce el mismo error poco útil que parece ser una excepción de nivel nativo en JMP:
The server threw an exception. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT))
He intentado con ambas variedades de ByType y ByName usando varios objetos diferentes dentro del árbol. Siento que debo estar perdiendo algo, pero no sé qué podría ser, ya que el error no me da la menor idea de lo que está mal.
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);
Resolví el problema. Resulta que el error estaba en otra parte de mi código. No estoy seguro de por qué tiró el error que lo hizo sin embargo. La tabla que proporcioné no tenía las columnas que esperaba debido a otro error en mi código. Habría esperado que JMP hubiera captado un error tan simple y hubiera lanzado una excepción más relevante, por lo que asumí un problema con la función en sí.
Si alguien más encuentra esto con un problema similar, asegúrese de revisar todos los demás aspectos de su entrada, ya que no puede confiar en JMP para informar una excepción significativa ...