Controllo delle dimensioni e del posizionamento del testo delle annotazioni di testo: è necessario aiutoTutto,
Ho bisogno di inserire diverse annotazioni di testo su un grafico.
Sono monorighe, ma di lunghezza diversa. Ecco perché devo usare Fixed Size(0) per adattare la lunghezza dell'etichetta al testo.
Ma quando lo faccio, regola anche la dimensione verticale e posiziona il testo troppo in alto, il che per qualche motivo mi dà molto fastidio (grafico a sinistra). Se imposto Dimensione Fissa(1), posso controllare direttamente la dimensione dell'etichetta e il posizionamento del testo sembra corretto (grafico a destra), ma ho del testo di lunghezza diversa, o l'etichetta è troppo lunga, oppure se il testo supera la dimensione dell'etichetta, scatta al comportamento "Dimensione Fissa(0)", con un aspetto davvero sgradevole.


Avete qualche idea su come regolare il posizionamento del testo all'interno dell'etichetta e utilizzare la dimensione fissa (0)?
<< L'allineamento verticale ("bottom") non funziona.
Ecco il codice:
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 20;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )/*<
<SET wrap=""></SET>
<BR /> <BR />
<LINGO-LABS id="lingo-labs-913210" slang="en-US" mode="CREATE">
<LINGO-LABEL>Automazione e scripting</LINGO-LABEL>
</LINGO-LABS>
Re: Controllo delle dimensioni delle annotazioni di testo e del posizionamento del testo: aiuto necessarioNon sono sicuro che sia possibile controllare questa cosa nell'annotazione del testo, a meno che non si calcolino autonomamente le dimensioni della casella di testo.
Potresti usare Graphic Script?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << bivariate(y(:weight), x(:height));
rbiv = biv << report;
fb = rbiv[FrameBox(1)];
fb << Add Graphics Script(
Back Color("Light Yellow");
Text Color("Red");
Text(Erased, {50, 150}, "We need to discuss this at the next meeting.");
Text(Erased, {50, 135}, "We need to discuss this at the next");
);
Re: Controllo delle dimensioni delle annotazioni di testo e del posizionamento del testo: aiuto necessarioIl problema con "Aggiungi script grafici" è che la posizione del testo è specificata in coordinate reali sul grafico. Nel mio caso può essere qualsiasi, a partire da 1e-07 fino a oltre 9000 
Potrei essere interessato a scrivere una funzione per calcolare i valori per le posizioni che desidero, ma solo se posso aggiungere un bordo o una cornice attorno al testo come nel primo esempio. Il grafico potrebbe essere piuttosto complesso, quindi ho bisogno di separarlo visivamente per una lettura e una visualizzazione più rapide.
Re: Controllo delle dimensioni delle annotazioni di testo e del posizionamento del testo: aiuto necessarioMi è venuta un'idea.
Cosa succede se disegno prima annotazioni di testo con Dimensione fissa (0), misuro la lunghezza, poi le modifico in Dimensione fissa (1) e imposto manualmente la larghezza misurata e l'altezza desiderata?
Il problema è che << Get Size() restituisce alcuni valori falsi:
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 40;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )/*<
<SET wrap=""></SET>
<P>Produce:</P> //:*/
Show(ta1_x, ta2_x);
/*:
ta1_x = 328;
ta2_x = 328;
anche se le etichette hanno visibilmente lunghezze diverse sul grafico. Mi sfugge qualcosa?
Re: Controllo delle dimensioni delle annotazioni di testo e del posizionamento del testo: aiuto necessarioProva a usare < <>
Re: Controllo delle dimensioni delle annotazioni di testo e del posizionamento del testo: aiuto necessarioPotresti essere in grado di effettuare il controllo delle dimensioni anche con la casella di testo in una nuova finestra
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 20;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
nw = new window("", << Window View("Invisible"),
tb1 = Text Box("We need to discuss this at the next meeting."),
tb2 = Text Box("We need to discuss this at the next ")
);
w1 = tb1 << Get Size;
w2 = tb2 << Get Size;
nw << close window;
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, w1[1]+20+70, 80+taHeight});
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, w2[1]+20+70, 120+taHeight});
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )/*<
<SET wrap=""></SET>
Re: Controllo delle dimensioni delle annotazioni di testo e del posizionamento del testo: aiuto necessarioGrazie per il suggerimento, ora riesco a ottenere e impostare le dimensioni dell'etichetta.
Il problema è che JSL non lo fa riga per riga, ma calcola separatamente lo stato finale per le diverse proprietà... e poi lo applica.
Come:
...
...
ta1<
<FIXED size=""></FIXED>
<P>Quindi la larghezza rimane quella che ho impostato inizialmente:</P> <CODE class=" language-jsl">ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
L'aggiunta di Wait(0.5) ha contribuito a superare questo problema.
Quindi lo script finale è:
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 40;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )<
<FIXED size=""></FIXED> <BR />
Re: Controllo delle dimensioni delle annotazioni di testo e del posizionamento del testo: aiuto necessarioAnche questa funziona. Soggettivamente, anche più veloce della mia soluzione. Sto cercando di misurarla con lo strumento di debug.
Re: Controllo delle dimensioni delle annotazioni di testo e del posizionamento del testo: aiuto necessarioImpostando Wait(0) si velocizza il tutto: ora c'è un'attesa effettiva, ma lo schermo viene ridisegnato.
Re: Controllo delle dimensioni delle annotazioni di testo e del posizionamento del testo: aiuto necessarioNon importa, funziona.
Prima dei loop:
taList = {};
All'interno del ciclo:
Insert Into(taList, ta);
Dopo i loop:
Wait(0);
taList << Fixed Size(1);
For Each({height, index}, taList << Get Height(),
taList[index] << Set Height(height*0.93)
);
Ora il problema è che quando implemento questo in uno scenario reale, quando ho più grafici con più annotazioni di testo, eseguire questo trucco con ogni annotazione su un ciclo a due livelli è troppo lento.
Ho provato a creare un elenco di annotazioni di testo:
taList={};
e poi appena dentro i cicli aggiungi il ta corrente all'elenco:
Insert Into(taList, ta);
Alla fine dei cicli ho:
taList
/*:
{DisplayBox[gtext], DisplayBox[gtext],......}
Ma le operazioni su questa lista o sui singoli membri non funzionano.
Avete qualche idea? Le mie sono:
1. Prova a usare Context Box per separare le variabili tra diversi ta
2. In qualche modo estrarre quelle annotazioni dal report, ma quando estraggo XML (<