Come creare e indirizzare dinamicamente gli spazi dei nomi? Handle indipendenti su più grafici GB.Tutto,
Non riesco a capire questo problema:
Devo aggiungere degli handle ai miei grafici GB. Ho più grafici GB in una finestra. Le variabili nello script degli handle si intersecano. Devo usare nuove variabili in ogni script o creare un nuovo namespace per ogni script grafico (sembra la soluzione migliore per me). Ma d'altro canto, non appena creo un namespace, lo indirizza tramite una variabile di riferimento, che viene sovrascritta ogni volta che ne creo uno nuovo.
Nell'esempio seguente utilizzo solo nomi di variabili diversi, ma è necessario crearli dinamicamente e indirizzarli correttamente.
Ricordo che c'era un trucco che usava qualcosa del tipo:
ns = Namespace( Expr( ns << Get Name ) )
ma non sono sicuro che sia applicabile in questo caso e, a dire il vero, non sono sicuro di aver capito come e perché funziona dove lo sto usando attualmente.
Ecco uno script di esempio:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
lub = Lineup Box( N Col( 2 ) );
ns1 = New Namespace(
"height"
);
ns1:_x_location_ = 2;
ns1:_y_location_ = 50;
lub << Append(Graph Builder(
Size( 528, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
Handle(
ns1:_x_location_,
ns1:_y_location_,
ns1:_x_location_ = x;
ns1:_y_location_ = y;
)
)}
)
)
);
);
ns2 = New Namespace(
"weight"
);
ns2:_x_location_ = 2;
ns2:_y_location_ = 50;
lub << Append(Graph Builder(
Size( 528, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
Handle(
ns2:_x_location_,
ns2:_y_location_,
ns2:_x_location_ = x;
ns2:_y_location_ = y;
)
)}
)
)
);
);
win = New Window( "Independent Handles Example",lub);
Automazione e scriptingRe: Come creare e indirizzare dinamicamente gli spazi dei nomi? Handle indipendenti su più grafici GB.Penso che potresti semplicemente saltare gli spazi dei nomi (in questo caso) e utilizzare Context Box
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
lub = Lineup Box(N Col(2));
lub << Append(
cb1 = Context Box(
box:_x_location_ = 2;
box:_y_location_ = 50;,
Graph Builder(
Size(528, 450),
Show Control Panel(0),
Variables(X(:age), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(6))),
SendToReport(
Dispatch({}, "Graph Builder", FrameBox,
{Add Graphics Script(
2,
Description(""),
Handle(
box:_x_location_,
box:_y_location_,
box:_x_location_ = x;
box:_y_location_ = y;
)
)}
)
)
)
)
);
lub << Append(
cb2 = Context Box(
box:_x_location_ = 2;
box:_y_location_ = 50;,
Graph Builder(
Size(528, 450),
Show Control Panel(0),
Variables(X(:age), Y(:weight), Overlay(:sex)),
Elements(Points(X, Y, Legend(6))),
SendToReport(
Dispatch({}, "Graph Builder", FrameBox,
{Add Graphics Script(
2,
Description(""),
Handle(
box:_x_location_,
box:_y_location_,
box:_x_location_ = x;
box:_y_location_ = y;
)
)}
)
)
)
)
);
win = New Window("Independent Handles Example", lub);
Re: Come creare e indirizzare dinamicamente gli spazi dei nomi? Handle indipendenti su più grafici GB.Quindi, se creo dinamicamente questi GB e li aggiungo alla mia Line Up Box, questa Context Box dovrebbe isolare le variabili al suo interno, proprio come fa {Default Local} all'interno di una funzione? Proviamo.
Re: Come creare e indirizzare dinamicamente gli spazi dei nomi? Handle indipendenti su più grafici GB.No, non funziona. Le maniglie non si comportano in modo indipendente. Sposto la maniglia sul grafico 1 e, non appena clicco sulla maniglia del grafico 2, questa salta alla posizione in cui si trova la maniglia sul grafico 1.
Ecco la sceneggiatura:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
lub = Lineup Box( N Col( 2 ) );
lub << Append(
Context Box(
_x_location_ = 2;
_y_location_ = 50;
Graph Builder(
Size( 528, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
Handle(
_x_location_,
_y_location_,
_x_location_ = x;
_y_location_ = y;
)
)}
)
)
);
)
);
lub << Append(
Context Box(
_x_location_ = 2;
_y_location_ = 50;
Graph Builder(
Size( 528, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
Handle(
_x_location_,
_y_location_,
_x_location_ = x;
_y_location_ = y;
)
)}
)
)
);
)
);
win = New Window( "Independent Handles Example", lub );
Re: Come creare e indirizzare dinamicamente gli spazi dei nomi? Handle indipendenti su più grafici GB.Confronta i nostri script e noterai sicuramente la differenza (non basta avere Context Box, devi anche utilizzarlo).
Re: Come creare e indirizzare dinamicamente gli spazi dei nomi? Handle indipendenti su più grafici GB.Oops, mi dispiace...:) Colpa mia:)
Se scritto correttamente, FUNZIONA. Grazie mille!