Graph Builder がいっぱい入った BorderBox があり、それを画像として保存したいと考えています。
フレームボックスに「グラフィックス スクリプトの追加」があります。このスクリプトは変数を使用します:
dt << Graph Builder(
Size( 600, 400 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Title Alignment( "Right" ),
Variables( X( :X ), Y( :Y ), Overlay( :Overlay ) ),
Elements(
Contour( X, Y, Legend( 5 ), Number of Levels( 18 ), Smoothness( -0.8899 ) ),
Points( X, Y, Legend( 4 ) )
),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 1 ), Add Graphics Script(
Transparency( 0.5 );
Fill Color( "Green" );
Pen Color( "Dark Green" );
Line(
{marginXmin, marginYmin},
{marginXmin, marginYmax},
{marginXmax, marginYmax},
{marginXmax, marginYmin}
{marginXmin, marginYmin}
);
)}
)
),この GraphBuilder を含む「imageForReport」という BorderBox を含む新しいウィンドウを開くと、次のようになります。
window = New Window( "My Report", imageForReport );
そしてレポートを画像に保存します。
imageForReport << save picture( imgPath, "png" );
すべて順調で、すべて正常に動作しています。
しかし、そのウィンドウはオンザフライでデバッグするためにのみ必要であり、最終製品は PNG 画像ファイルです。
そのため、何千ものレポートを実行する実稼働バージョンでは、リソースを節約するためにそのウィンドウを開きません。
しかし、この場合、最初の変数 (そしておそらく残りの変数も) が解決されていないため、グラフィック スクリプトは機能しません。次のようになります。
Name Unresolved: marginXmin in access or evaluation of 'marginXmin' , marginXmin/*###*/
ログ ウィンドウに表示されます。何千ものウィンドウを不必要に開いたり閉じたりせずに、これを修正するにはどうすればよいでしょうか?
アップデート:
この動作をテストするためのサンプル スクリプトを次に示します。
Clear Log();
Clear Symbols();
Clear Globals();
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
cutOutX = 20;
cutOutY = 3;
marginXmin = 70;
marginXmax = 160;
marginYmin = 55;
marginYmax = 65;
imageForReport = Border Box(
VLBox = V List Box(
//Zero row
headerTB = Text Box( "Test savingimage" ),
gb = Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 1 ), Add Graphics Script(
Transparency( 0.5 );
Fill Color( "Green" );
Pen Color( "Dark Green" );
Line(
{marginXmin, marginYmin},
{marginXmin, (marginYmax - cutOutY)},
{(marginXmin + cutOutX), (marginYmax - cutOutY)},
{(marginXmin + cutOutX), marginYmax},
{(marginXmax - cutOutX), marginYmax},
{(marginXmax - cutOutX), (marginYmax - cutOutY)},
{marginXmax, (marginYmax - cutOutY)},
{marginXmax, marginYmin},
{marginXmin, marginYmin}
);
)}
)
)
)
)
);
window = New Window( "My Report", imageForReport );
imageForReport << save picture( "C:\temp\testImage.png", "png" );そのまま実行すると、プロットとシェイプを含むウィンドウが開き、プロットとシェイプを含む PNG 画像が保存されます。
新しいウィンドウの行をコメント化すると、新しいウィンドウを開かずにプロットを PNG 画像に保存しますが、その中の図形は失われます。
誰かそれを説明して、解決方法を教えてもらえますか? プロットで新しいウィンドウを開いたり閉じたりせずに、保存した画像の形状を取得するにはどうすればよいですか?