Tengo un BorderBox lleno de Graph Builder, que quiero guardar como imagen.
Tengo un "Script para agregar gráficos" en un FrameBox. Este script usa variables:
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}
);
)}
)
),Si abro una nueva ventana con el BorderBox llamado "imageForReport" que tiene este GraphBuilder en ella:
window = New Window( "My Report", imageForReport );
y luego guarda el informe en la imagen:
imageForReport << save picture( imgPath, "png" );
Todo está bien y todo está funcionando.
Pero solo necesito esa ventana para depurar sobre la marcha, el producto final es el archivo de imagen PNG.
Entonces, para la versión de producción que ejecuta miles de informes, ahorro recursos y no abro esa ventana.
Pero en este caso el script gráfico no funciona porque la primera variable (y supongo que el resto) no está resuelta. Me sale esto:
Name Unresolved: marginXmin in access or evaluation of 'marginXmin' , marginXmin/*###*/
en la ventana de Registro. ¿Cómo puedo solucionarlo sin tener que abrir y cerrar miles de ventanas innecesariamente?
ACTUALIZAR:
A continuación se muestra un ejemplo de script para probar este comportamiento:
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" );Si se ejecuta tal como está, se abrirá una ventana con el gráfico y la forma y guardará la imagen PNG con el gráfico y la forma.
Si comenta la nueva línea de la ventana, guardará el gráfico como imagen PNG sin abrir una nueva ventana, pero la forma no aparecerá en ella.
¿Alguien puede explicarlo y cómo solucionarlo? ¿Cómo obtener la forma en la imagen guardada sin tener que abrir o cerrar una nueva ventana con el gráfico?