Ich habe eine mit Graph Builder gefüllte BorderBox, die ich als Bild speichern möchte.
Ich habe ein "Grafikskript hinzufügen" in einer FrameBox. Dieses Skript 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 "imageForReport" öffne, in dem sich dieser GraphBuilder befindet:
window = New Window( "My Report", imageForReport );
und speichern Sie dann den Bericht im Bild:
imageForReport << save picture( imgPath, "png" );
Alles ist in Ordnung und alles funktioniert.
Aber ich brauche dieses Fenster nur, um im laufenden Betrieb zu debuggen. Das Endprodukt ist die PNG-Bilddatei.
Für die Produktionsversion, in der Tausende von Berichten ausgeführt werden, spare ich Ressourcen und öffne dieses Fenster nicht.
In diesem Fall funktioniert das Grafikskript jedoch nicht, da die erste Variable (und ich denke der Rest) nicht aufgelöst wird. Ich verstehe das:
Name Unresolved: marginXmin in access or evaluation of 'marginXmin' , marginXmin/*###*/
im Protokollfenster. Wie kann ich das beheben, ohne Tausende von Fenstern unnötig 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, wie es ist, wird das Fenster mit dem Plot und der Form geöffnet und das PNG-Bild mit Plot und Form gespeichert.
Wenn Sie die neue Fensterlinie kommentieren, wird das Diagramm im PNG-Bild gespeichert, ohne dass ein neues Fenster geöffnet wird. Die Form fehlt jedoch darin.
Kann jemand es erklären und wie man es löst? Wie bekomme ich Form in das gespeicherte Bild, ohne ein neues Fenster mit dem Plot öffnen / schließen zu müssen?