Tengo un BorderBox lleno de Graph Builder, que quiero guardar como imagen.
Tengo un "Agregar script de 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 él:
window = New Window( "My Report", imageForReport );
y luego guarde el informe en la imagen:
imageForReport << save picture( imgPath, "png" );
todo está bien y todo funciona.
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 en 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 se resuelve. Entiendo esto:
Name Unresolved: marginXmin in access or evaluation of 'marginXmin' , marginXmin/*###*/
en la ventana de Registro. ¿Cómo soluciono eso sin abrir y cerrar innecesariamente miles de ventanas?
ACTUALIZAR:
Aquí hay una secuencia de comandos de muestra 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 como está, se abrirá una ventana con la trama y la forma y guardará la imagen PNG con la trama y la forma.
Si comenta la nueva línea de la ventana, se guardará el trazado en la imagen PNG sin abrir una nueva ventana, pero la forma faltará en ella.
¿Alguien puede explicarlo y cómo solucionarlo? ¿Cómo darle forma a la imagen guardada sin tener que abrir / cerrar una nueva ventana con el gráfico?