La referencia del marco del cuadro de gráficos se 'pierde' al agregar un script de gráficos.Estoy tratando de dibujar un Wafermap simple que funciona bien con el siguiente código.
Sin embargo, cuando sustituyo las variables por los números, aparece un error de referencia faltante y no puedo entender por qué sucede esto. Necesito un poco de sabiduría experta de JSL 
F_makeWaferMap = function({myScale, myWhiteSpace, myWaferDiameter},{},
myKeepOutZone = 2000;
myGraphBox = graphBox(
frameSize( (myWaferDiameter/2)/myScale, (myWaferDiameter/2)/myScale ),
xScale( -myWhiteSpace, myWaferDiameter + myWhiteSpace),
yScale( -myWhiteSpace, myWaferDiameter + myWhiteSpace)
);
frame = myGraphBox[FrameBox(1)];
frame << Add Graphics Script(penColor( "red" ); circle( {150000,150000}, 150000));
frame << Add Graphics Script(penColor( "red" ); circle( {150000,150000}, 150000-2000));
return(myGraphBox);
);
myWmDispObj = F_makeWaferMap(200, 20000, 300000); // Scale, Whitespace, Wafer Diameter
newWindow("Test", vListBox(myWmDispObj));
Estoy felizmente haciendo referencias al cuadro de marco como puede ver en el registro:</CODE></P><P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thickey_1-1647940813033.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="thickey_1-1647940813033.png" style="width: 347px;"><img src="https://us.v-cdn.net/6038925/uploads/images/41020iDC2927C13A39326F/thickey_1-1647940813033.png" role="button" title="thickey_1-1647940813033.png" alt="thickey_1-1647940813033.png" /></span></SPAN></P><P><CODE class=" language-jsl">
Entonces, ahora sustituyamos algunas variables.
frame << Add Graphics Script(penColor( "red" ); circle( {myWaferDiameter/2, myWaferDiameter/2}, myWaferDiameter/2));
frame << Add Graphics Script(penColor( "red" ); circle( {myWaferDiameter/2, myWaferDiameter/2}, (myWaferDiameter/2) - myKeepOutZone));Y obtengo el siguiente error, lo que sugiere que he perdido la referencia a mis variables pasadas cuando intento agregarlas al cuadro de marco.

Estoy perplejo 
secuencias de comandosRe: La referencia del marco del cuadro de gráficos se 'pierde' al agregar un script de gráficos.Es posible que deba usar algo de magia Eval (EvalExpr ()) Inserte una expresión en otra usando Eval Insert, Eval Expr, Parse y Substitute
Eval(EvalExpr(
frame << Add Graphics Script(
Pen Color("red");
Circle({Expr(myWaferDiameter) / 2, Expr(myWaferDiameter) / 2}, Expr(myWaferDiameter) / 2);
);
));Re: La referencia del marco del cuadro de gráficos se 'pierde' al agregar un script de gráficos.Hola, Jarmo, sí, simplemente puedo hacer una evaluación (parse()), sustituyendo mi variable en la cadena para convertirla a JSL, pero en mi opinión, no es la forma "adecuada" de hacerlo. Seguramente, hay un mecanismo para esto de una manera más 'directa'.
eval(parse("frame << Add Graphics Script(penColor( \!"red\!" ); circle( {150000,150000}, " || char(myWaferDiameter/2) || "))"));Re: La referencia del marco del cuadro de gráficos se 'pierde' al agregar un script de gráficos.El parámetro Diámetro de la oblea en la función HacerWaferMapa solo existe mientras la función se está ejecutando. La fórmula suministrada a <
También me gusta el método eval(evalexpr( ... expr() ... expr() ... ) ) para convertir las variables transitorias en piedra, principalmente porque el editor JSL seguirá haciendo todas las comprobaciones de sintaxis para ( y ).
Re: La referencia del marco del cuadro de gráficos se 'pierde' al agregar un script de gráficos.Hola, no estoy exactamente seguro de por qué esto funciona, pero agradecería cualquier información. Parece que si configura otra variable en su función (en este caso, solo myWaferDiameter1), ¿parece pasar bien a los mensajes del marco?
Names Default to Here( 1 );
F_makeWaferMap = function({myScale, myWhiteSpace, myWaferDiameter},{},
myWaferDiameter1 = myWaferDiameter; //new variable here?
myKeepOutZone = 2000;
<BR /> //Use myWaferDiameter1 instead
myGraphBox = graphBox(
frameSize( (myWaferDiameter1/2)/myScale, (myWaferDiameter1/2)/myScale ),
xScale( -myWhiteSpace, myWaferDiameter1 + myWhiteSpace),
yScale( -myWhiteSpace, myWaferDiameter1 + myWhiteSpace)
);
frame = myGraphBox[FrameBox(1)];<BR />
frame << Add Graphics Script(penColor( "red" ); circle( {myWaferDiameter1/2, myWaferDiameter1/2}, myWaferDiameter1/2));
frame << Add Graphics Script(penColor( "red" ); circle( {myWaferDiameter1/2, myWaferDiameter1/2}, (myWaferDiameter1/2) - myKeepOutZone));
return(myGraphBox);
);
myWmDispObj = F_makeWaferMap( 200, 20000, 300000 ); // Scale, Whitespace, Wafer Diameter
newWindow("Test", vListBox( myWmDispObj ));