私はC#を通してJMPグラフ画像のキャプチャを自動化しようとしています。 私がドキュメンテーションを通して見つけたものから、これをする正しい方法はGetGraphicItemByNameまたはGetGraphicItemByTypeとそれからSaveGraphicItemでグラフのハンドルを得ることによるようです。
この件に関して、前回の記事からいくつかのガイダンスが見つかりました。
https://community.jmp.com/t5/Discussions/GetGraphicItemByName-Requires-the-name-where-are-the-the-names/td-p/20947
具体的には、それを適切に使用した上での返信です(それ以外の場合、この文書には本当に欠けています)
https://community.jmp.com/t5/Discussions/GetGraphicItemByName-Requires-the-name-where-are-the-names/mp/20950/highlight/true#M19047
しかしながら... それは私が試したことのすべてにはうまくいきません。 JMPではネイティブレベルの例外であると思われる、同じような有益でないエラーがすべてスローされます。
The server threw an exception. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT))
私はツリー内のいくつかの異なるオブジェクトを使ってByTypeとByNameの両方の種類を試してみました。 私は何かを見逃していなければならないような気がしますが、エラーが私に何が間違っているのかというほんのわずかな手がかりを与えてくれないので、私はそれがどうなるかわかりません。
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);
私は問題を解決しました。 私のコードのどこかにエラーがあることがわかりました。 なぜそれがそれがしたというエラーを投げたのかはっきりしない。 私が提供したテーブルには、コードに別のバグがあったために期待したカラムがありませんでした。 私は、JMPがそのような単純なエラーをキャッチし、より関連性の高い例外をスローしたはずであると予想していました。そのため、関数自体に問題があると思いました。
他の誰かが同様の問題を抱えてこれに遭遇した場合、意味のある例外を報告するためにJMPに頼ることはできないので、あなたの入力の他のすべての側面を必ずチェックしてください。