Ich versuche, die Erfassung von JMP-Grafikbildern über C # zu automatisieren. Nach dem, was ich in der Dokumentation gefunden habe, scheint der korrekte Weg, dies zu tun, zu sein, indem man den Graphen mit GetGraphicItemByName oder GetGraphicItemByType und dann SaveGraphicItem abruft.
Ich habe in diesem vorherigen Beitrag einige Hinweise zu diesem Thema gefunden:
https://community.jmp.com/t5/Discussions/GetGraphicItemByName-Requires-the-name-where-are-the-names/td-p/20947
Insbesondere diese Antwort auf die ordnungsgemäße Verwendung (sonst fehlt der Dokumentation wirklich)
https://community.jmp.com/t5/Discussions/GetGraphicItemByName-Requires-the-name-where-are-the-names-/mp/20950/highlight/true#M19047
Jedoch... es funktioniert nicht für alles, was ich versucht habe. Alles wirft den gleichen nicht hilfreichen Fehler ab, der in JMP eine Ausnahme auf nativer Ebene zu sein scheint:
The server threw an exception. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT))
Ich habe es mit beiden Varianten von ByType und ByName ausprobiert, wobei mehrere verschiedene Objekte innerhalb der Baumstruktur verwendet wurden. Ich habe das Gefühl, dass ich etwas verpassen muss, aber ich weiß nicht, was es sein könnte, da der Fehler mir nicht den geringsten Hinweis gibt, was falsch ist.
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);
Ich habe das Problem gelöst. Der Fehler war an anderer Stelle in meinem Code. Ich bin mir nicht sicher, warum es den Fehler geworfen hat. Die Tabelle, die ich angegeben habe, hatte nicht die Spalten, die ich aufgrund eines anderen Fehlers in meinem Code erwartet hatte. Ich hätte erwartet, dass JMP einen so einfachen Fehler hätte abfangen und eine relevantere Ausnahme auslösen können, weshalb ich ein Problem mit der Funktion selbst vermutete.
Wenn jemand anderes auf ein ähnliches Problem stößt, sollten Sie alle anderen Aspekte Ihrer Eingabe überprüfen, da Sie sich nicht darauf verlassen können, dass JMP eine sinnvolle Ausnahme zurückmeldet ...