Ich habe eine mit Graph Builder gefüllte BorderBox, die ich als Bild speichern möchte.
Ich habe ein "Add Graphics Script" für eine FrameBox darin. Dieses Script verwendet Variablen:
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}
);
)}
)
),Wenn ich ein neues Fenster mit der BorderBox namens „imageForReport“ öffne, das diesen GraphBuilder enthält:
window = New Window( "My Report", imageForReport );
und speichern Sie anschließend den Bericht im Bild:
imageForReport << save picture( imgPath, "png" );
alles ist ok und alles funktioniert.
Aber ich brauche dieses Fenster nur zum sofortigen Debuggen, das Endprodukt ist die PNG-Bilddatei.
Deshalb spare ich bei der Produktionsversion, die Tausende von Berichten ausführt, Ressourcen und öffne dieses Fenster nicht.
Aber in diesem Fall funktioniert das Grafikskript nicht, weil die erste Variable (und ich vermute auch der Rest) nicht aufgelöst wird. Ich bekomme folgendes:
Name Unresolved: marginXmin in access or evaluation of 'marginXmin' , marginXmin/*###*/
im Protokollfenster. Wie behebe ich das, ohne unnötig Tausende von Fenstern zu öffnen und zu schließen?
AKTUALISIEREN:
Hier ist ein Beispielskript zum Testen dieses Verhaltens:
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" );Wenn es so ausgeführt wird, wird ein Fenster mit der Zeichnung und der Form darin geöffnet und ein PNG-Bild mit Zeichnung und Form gespeichert.
Wenn Sie die neue Fensterzeile kommentieren, wird der Plot als PNG-Bild gespeichert, ohne ein neues Fenster zu öffnen, aber die Form fehlt darin.
Kann das jemand erklären und wie man es löst? Wie bekomme ich die Form in das gespeicherte Bild, ohne ein neues Fenster mit der Darstellung öffnen/schließen zu müssen?