Come si fa a ... ?

Questa è la traduzione in italiano della pagina delle FAQ. Risale all'inizio 2011, perciò potrebbe non risultare aggiornata con la pagina originale.

marco corvi

Il blocco dati principale è il blocco “centerline” (o “centreline”, indifferentemente). Se la grotta è più lunga di alcuni metri è bene suddividere i dati della poligonale in più file e separare i dati di poligonale dai dati dei disegni.

Noi si dolito usiamo un file “.th” per ogni pezzo di rilievo. È comodo avere un template vuoto da cui partire ed inserire i dati, come quello sotto riportato, dove i puntini sono i posti dove devi scrivere i tuoi dati.

  encoding ISO8859-1
  survey ... -title "..."
    centreline
      team "..."
      team "..."
      date ...
      units clino compass grad
      data normal from to compass clino length
        ... ... ... ... ...
    endcentreline
  endsurvey

Il blocco “centerline” è incluso in un blocco “survey” per organizzare i dati in uno spazio di nomi (ogni dato è identificato da una specie di “indirizzo”, una sequenza di survey, uno posto dentro il precedente, e il nome, o numero, del caposaldo, un po' come il tuo indirizzo è composto dalla città, via e infine il tuo nome). Per esempio, per far riferimento ad un capisaldo si scrive numero@survey_1.survey_2. Conviene che il “survey” abbia lo stesso nome (id) del file che lo contiene. I punti vengono identificati usando il carattere '@' - cfr. la descrizione del comando “survey”.

Per grotte molto grandi si può strutturare i dati con una gerarchia di cartelle. In tal caso noi creiamo uno file speciale, denominato INDEX.th, che include tutti gli altri file per ogni cartella e contine i comandi “equate” che definiscono le connessioni fra i survey della cartella.

La cosa più importante è decidere come dividere la grotta in “scraps”. Uno scrap è il pezzo di base nei disegni delle mappe. Di solito non è una buona idea cercare di far corrispondere uno scrap ad un file “.th” con i dati della poligonale di un rilievo. Il motivo è che le connessioni fra scrap dovrebbere essere il più semplici possibile, mentre i pezzi di rielievo tendono a iniziare e finire nei bivi, che sono i punti dove è più difficile unire gli scrap.

Gli scrap sono indipendenti dalla gerarchia dei dati di poligonale. Perciò cerca di ignorare la gerarchia delle poligonali quando fai i disegni e scegli i migliori punti dove fare le connessioni degli scrap.

Consigliamo di inserire le mappe nel penultimo livello della gerarchia dei survey. Ogni scrap può allora contenere parti di qualsiasi survey nell'ultimo livello della gerarchia. Per esempio (questo esempio è stato modificato)

  survey_main
    +-- survey A1
    |     +-- survey a
    |     +-- survey b
    |     +-- scrap s // con riferimenti ai capisaldi in survey a, eg, 1@a
    |     +-- scrap t // con riferimenti ai capisaldi in survey b
    |     +-- scrap u // con riferimenti ai capisaldi in survey a e in survey b
    |     +-- equate  // per le connessioni fra survey a e survey b
    |     +-- map m   // con gli scrap t, s, ed u
    +-- survey A2
    |     +-- survey c
    |     +-- survey d
    |     +-- scrap v
    |     +-- scrap w
    |     ... etc.
    +-- equate // eg. 1@a.A1 10@c.A2
    +-- map // con le map m@A1 etc.

Gli scrap sono solitamente scritti in file “.th2”. Ogni file può contenere più scraps. Per tener i dati ben organizzati, noi seguiamo delle convenzioni sui nomi: i file “foo.th2” contine gli scrap con nome “foo_sX” dove X vale 1, 2, etc. Gli scrap delle sezioni trasversali hanno nome “foo_cX”, le linee “foo_lX” etc. Questo aiuta molto se la grotta è grande, perché dal nome dello scrap sai immediatamente in che file si trova.

Allo stesso modo che per i file “.th”, in ogni cartella, si può fare un file INDEX.th2 che include tutti gli altri file “.th2”, e definisce le unioni (“join”) fra gli scrap e le map.

Quando disegni gli scrap devi far attenzione che l'outline (contorno della grotta) si definito bene. Ogni linea che definisce questo contorno deve avere l'opzione “-outline out”. Le linee che definiscono contorni circondati dalla cavità devono avere l'opzione “-outline in”. Le linee di tipo “wall” hanno per default “outline out”. Per tutte le altre l'outline non è predefinita.

I contorni di outline di uno scrap non possono avere intersezioni, altrimenti non è possibile determinare quale sia la parte interna, cioè la cavità. Ci sono due semplici test per la correttezza della outline:

  • non ci sono messaggi di METAPOST ”scrap outline intersects itself“
  • quando imposti l'opzione “color map-fg <numero>” nel layout, per rendere in grigio la cavità puoi verificare cosa Therion considera come paret interna.

Un modello viene creato in base alle outline degli scrap. Le altezze e profondità dei passaggi sono calcolati in base ai punti “passage-height”. In futuro ci sarà un punto “dimension” che permetterà una specificazione più precisa del pavimento e soffitto. (Questa FAQ mi sembra un po' vecchia).

Prima di tutto prova il bottone “Auto adjust” nella sezione “Draving area”.

Se crei un elemento (punto, linea, area) fuori dal blocco “scrap” … “endscrap” puoi spostarlo con i comandi “Move up”, “Move down” e “Move to” nella sezione degli oggetti dell'editor di mappe.

Penso che devo capir meglio cosa sia un “pllar”. Credevo fosse una curva chiusa
in mezzo alla galleria, ma l'area racchiusa nella immagine sotto non rappresenta
una curva chiusa (un passaggio parte via sotto, dove c'è l'interruzione).
Allora, quando bisogna dire a THerion che l'outline è “in”?

Nessuno direbbe che la roccia che separa due passaggi è un “pillar”, ma Therion ragiona in modo puramente geometrico – non importa se la curva chiusa all'interno della galleria è piccola o grande, oppure formata da roccia collassata invece che dai due passaggi. Perciò ogni cosa contornata dal bordo (outline) dello scrap e che non appartiene allo scrap è un “pillar” e deve avere l'opzione ”-outline in“ per le linee “wall” (in effetti per tutte le linee che ne formano il contorno).

Questa immagine illustra il caso: le righe rossa e azzurra hanno ”-outline in“.

C'è un altro problema. Anche se il contorno dello scrap ha tutte le opzioni ”-outline“ (in/out/none) specificate, cci potrebbe essere un problema a determinare quali sia la regione interna se l'outline interseca se stessa (come in un '8'). In tal caso si ha l'avvertimento di METAPOST “Warning: scrap outline intersects itself in foo_s1@foo” e NetaPost determina l'interno in modo casuale. La soluzione è

  1. trovare dove c'è l'intersezione – questo può essere difficile: comincia con i punti dove gli scrap si uniscono. Il ciclo potrebbe esser molto piccolo, difficile da notare. Potrebbe persino essere invisibile, perchè risulta solo dopo aver unito gli scrap (come nell'esempio)
  2. correggi la posizione dei punti di controllo (vedi seconda immagine)

Le immagini dovrebbero chiarire.


La correzione

«Ho un problema con il tuo esempio. La linea wall non segue la parete; hai dovuto distorcerla un poco per risolvere questo problema, però non mi sembra il modo corretto. La versione originale è il disegno corretto della grotta. Therion dovrebbe essere in grado di unire (e distorcere se necessario) quel disegno senza bisogno di dirmi che è “sbagliato” e che devo disegnare la grotta un poco diversamente affinchè gli vada bene.»

Il problema è che Therion fa alcuni calcoli lui stesso ed altri li lascia a MetaPost. Quando gli scrap sono uniti, therion non sa se il contorno si interseca o meno. Quando MetaPost esamina il contorno, è troppo tardi per modificare le distorsioni degli scrap. Può solo dare l'avvertimento.

«Capisco che non è semplice, ma penso che dire all'utente che il suo disegno “corretto” causa un errore non sia una buona cosa. Forse quando l'intersezione dell'outline ha luogo su una linea di giunzione dello scrap (cioè un errore “prodotto” da Therion, non disegnato dall'utente) non dovrebbe essere un errore.»

Non può esser ignorato poiché MetaPost necessita di outline senza intersezioni per determinare la regione interna correttamente.

«… e Therion potrebbe modificare le sue linee per compensare ? È fattibile ? »

Non lo è al momento – l'intersezione viene identificata solo in MetaPost. Dovremmo implementare lo steso algoritmo in Therion, e questo non è triviale.

Il modo più facile per trovate i punti “station” è di mettere ”-name“ come campo di ricerca (search). Quindi clicka su “Find first” (trova il primo) e poi su “Find next” (trova il prossimo) e controlla ogni punto per vedere se ha la posizione e il nome corretti, ed è associato corretamente allo scrap.


Un punto “station”
Tutti i punti “station”
Tuttle le linee “wall”

Se la tua mappa risulta distorta o le unioni degli scrap non sono nelposto giusto, è utile compilare, cioè eseguire therion, in modalità debug. In effetti questo è utile in generale per vedere come viene distorto il tuo disegno.

Per attivare la modalità debug devi scrivere il comando “debug on” nel layout.

  layout debug
    debug on
    ...
    ...
  endlayout
  
  export map -proj plan -layout debug -o debug.pdf

Questo genera una mappa che, oltre al risultato finale, contiene le outline in rosso e verde, vari punti colorati, e linee gialle e nere che indicano le distorsioni.

  • le linee rosse sono gli scrap original, routati e riscalati
  • le linne blu sono gli scrap deformati con i capisaldi nei posti giusti (ma prima delle unioni con altri scrap)
  • i punti rossi sono le posizioni dei capisaldi
  • i punti gialli connessi da una linea gialla sono le posizioni dei due punti dello scrap che hanno subito la distorsione massima
  • i punti neri coneesi da linee nere, sono le posizini finali dei deu punti dello scrap con massima distorsione.
  • i punti arancioni sono i due punti la cui distanza è cambiata di più nel generare la mappa.
  • le linne gialle connettono punti neri e gialli, ed indicano come questi punti sono stati spostati.
  • se c'è un solo punto nero esso indica due capisaldi, con nomi diversi, nello stesso punto.

Non è possibile. In una “map” tutti gli scrap collegati devono avere la stessa projezione.

«Supponiamo d'avere un rilievo su carta, di cui non si hanno i dati di poligonale, e di conoscerne la scala (e l'orientazione). Coma faccio a “therionizzare” questo rilievo?»

  1. Acquisisci i rilievi con uno scanner, in modo che ogni immagine abbia una barra di scala (con una orientazione ben precisa)
  2. per ogni immagine definisci un caposaldo “virtuale” che servirà a posizionare il rilievo nel mondo. per esempio l'ultimo punto di un rilievo noto.
  3. per tutti gli scrap di questa immagine aggiungi un punto di tipo “station” relativo a questo caposaldo virtuale, e dagli l'opzione ”-visibility off“ in modo che non appaia nella mappa.
  4. il riscalamento e la rotazione degli scrap viene fatto usando la barra di scala sull'immagine. Per esempio se la barra è orizzontale a lunga 50 m devi impostare “0 0 50 0” come coordinate reali degli estremi della barra (v. figura). È solo la differenza delle coordinate che importa non il loro valore effettivo. Gli scrap sono posizionati in base al caposaldo virtuale. Quello che devi fai è specificare due vettori: uno sula immagine acquisita, l'altro nel mondo. Da questi due therion determina la rotazione e il riscalamento. Usa gli stessi valori per tutti gli altri scrap dell'immagine (in realtà quando crei un nuovo scrap xtherion ricorda questi valori, percui te li trovi già impostati). Le coordinate sono cartesiane sia sulla immagine che nel mondo; X corrisponde all'Est e cresce verso destra,

Y corrisponde al Nord e cresce verso l'alto. I numeri sono un po' arbitrari: come detto quello che importa sono le posizioni relative.

  1. Nel disegnare gli scrap cerca di posizionare i capisaldi virtuali in modo che gli scrap vadano assieme bene. Una volta che gli scrap si posizionano abbastanza bene puoi farne l'unione (i join). È tutto. Hai bisogno di un solo caposaldo virtuale per immagine.


snapshot.jpg

Attenzione. Mescolare projezioni, oppure calibrare scrap solo con la barra di scala non è una bella idea. Se cambi coordinate (eg, GPS) devi spostare tutti gli scrap; con un caposaldo di riferimento questo diventa semplice, perché ti basta specificarne le posizioni nelle nuove coordinate. Quindi hai una tabella (un comando fix per ogni immagine, cioè per ogni caposaldo virtuale)

  fix paper1 10 20 30
  fix paper2 20 30 40

Questo è molto semplice. Se dovessi cambiare i punti di scala in tutti le intestazioni degli scrap, sarebeb un lavoro lungo.

Un'altra osservazione. Dando un caposaldo ad ogni scrap, questo ha anche informazioni sulla “quota”. In questo modo puoi colorare le mappe in base alla profondità. Se usi solo l'opzione ”-scale“ non c'è alcuna informazione di quota.

Supponiamo di avere tre scrap che si uniscono in un incrocio a Y, o T. Se uniamo gli scrap nel modo “normale” risulta un buco triangolare nel mezzo della connessione (sarebbe rettangolare se gli scrapfossero quattro, etc.). Possiamo usare una line di tipo wall con opzione ”-visibility off“ (una parete virtuale) per riempire questo buco, ma è più semplice usare un altro trucco: un pezzetto di parete (wall) appartenente ad uno degli scrap, e messa in mezzo a dove gli altri due si toccano. Vedi figure.

xtherion “normale”
pdf “normale”
xtherion con questo trucco
pdf con questo trucco

Ricorri a questa soluzioni se non hai scelta. In genere è meglio pianificare gli scrap in modo da non dover spostare oggetti fra uno e l'altro.

Se i due scrap sono nello stesso file .th2:

  1. seleziona l'oggetto che vuoi spostare
  2. usa i bottoni “Move up, Move down, Move to” nella finestra dell'editor di mappe per muovere l'oggetto nel posto desiderato.



risultato.

Se vuoi muovere solo una parte di una linea devi prima separare la parte che vuoi muovere (dividendo la linea con il bottone “split”): seleziona il punto in cui vuoi dividere la linea e poi usa il bottone “Split line” nella sezione “Line control”

Se i due scrap sono in file .th2 diversi:

Puoi farlo con l'editor di testo (di xtherion), con una operazione di cut-n-paste da un file all'altro. Puoi usare l'opzione “id” (sezione “Object”) per identificare l'oggetto che vuoi spostare.

Ci sono un paio di posti con “vuoti” nel background grigio. L'esempio più ovvio è la grande sala in mezzo a foo_s2 (con tanti blocchi). La sala principale ha una parete a destra che è nel mezzo di tre pareti. Quella più a destra è la parete destra del passaggio basso, formato dal grosso mucchio di blocchi nel mezzo, che separano la parte superiore da quella inferiore per circa 30 m. Come si disegna questo alla Therion? Si usa una linea “border” come linea centrale? Oppure si divide il passaggio inferiore in un piccolo scrap a parte? E c'è un problema simile dall'altra parte della sala, dove un ripido scivolo sale a sinistra.

Fare uno scrap separato è la soluzione migliore. Un'altra consiste nel dividere la parete in modo che la parte “interna” sia una linea a sé, e assegnarle l'opzione ”-outline in“ come nell'immagine sotto.

La regola è che ogni linea che forma il contorno esterno di uno scrap deve avere “outline out” (per le linee “all” questo è il default), e ogni linea che forma il contorno di pilastri interni deve avere “outline in”. Tutte le altre linee, comprese le linee “wall” che giacioni all'interno dello scrap, devono avere “outline none”. Perciò devi specificare ”-outline none“ per tutte le linee “wall” che non formano il contorno.

Sembra che se includo uno dei file soundriver2_s1 soundriver3_s1 or soundrivercrab_s1 c'è un errore. soundriver2_s1 è particolarmente strano, perché è un pezzetto di galleria senza oggetti “area”, ha tre capisaldi (“station”) e non molto dettagli … mi sembra che non ci sia molto che possa andar storto.

Comincio con il problema semplice. Il problema in soundriver3_s1 è molto sottile. Ecco una descrizione passo passo:

scommentando soundrivercrab_s1 si ha l'errore di MetaPost

  ! Paths 6 and 5 don't intersect.

Questo ha a che fare con oggetti “area”. Quindi uso “search & select” per evidenziare tutte le aree: c'è una sola “area” (linea 6 nel file). Con la finestra “Command preview” controllo la definizione e cerco di localizzare le linee che costituiscono il bordo dell'area nello scrap. C'è una linea di troppo (l26-1164-70) e la rimuovo dalla lista dell'area nella sezione “Area control”.

scommentando soundriver2_s1 si ha l'errore

  l_flowstone->...as>dlzka+(mojkrok/3);t1:=t2;endfor
                                                  ;
  l.5074 ))
           ;
  The `angle' between two identical points is undefined.
  I'm zeroing this one. Proceed, with fingers crossed.

La prima riga è il nome dell'oggetto in cui si ha l'errore (l_flowstone), con parte della sua definizione, ma ciò non serve ora. La seconda riga da il numero di riga nel file MetaPost creato da tutti gli scrap, in cui si è avuto l'errore, e il testo di tale riga.

Adesso che so che il problema è in qualche linea “flowstone” uso “search & select” per trovare tutte le linee di tipo “flowstone”, e controllo la loro definizione con “Command preview”. L'errore è nella prima linea “flowstone” in cui compare un punto duplicato,

  703.0 793.0
  703.0 793.0

Basta rimuoverne uno con “Line control→Edit line→Delete point”.

scommentando soundriver3_s1 si ha un simile errore

  l_arrow->...d(angle(direction.infinity.of(EXPR0))-90)shifted(point.infinity....l.5728 ),2)
           ;
  The `angle' between two identical points is undefined.
  I'm zeroing this one. Proceed, with fingers crossed.

Come prima si comincia a cercare il tipo di oggetto causa dell'errore (“line arrow”) con la sezione “Search & select” scrivendo “line arrow” nel campo di ricerca. Con i botoni “Find first”, “Find next”, … si evidenziano gli oggetti man mano ritrovati e con la finestra “Command preview” se ne vede la definizione. Da questa analisi sembrava che il problema fosse alla riga 24 nella finestra “File commands”:

  363.0 573.5
  363.0 573.5 317.0 604.5 295.0 642.5

dove il punto di controllo del secondo punto è uguale al primo punto. Però modificando i punti di controllo e anche eliminando la riga in questione non rivolve il problema. Non riuscendo a capire quale punto sia la causa dell'errore, si va a controllare il numero di riga riportato nel messaggio di MetaPost. Si esegue therion in modalità debug (passando l'argomento ”-d“), e si guarda la riga indicata nel messaggio di MetaPost nel file data.mp nella cartella $TEMP/thTMPDIR (nell'esempio risulta la 5728, diversa dalla 5074 indicata sopra perché ora therion è stato eseguito in debug). Il problem a con il file data.mp è che non contiene le coordinate originali presenti nel file th2, e quindi non è possibile identificare l'origine dell'errore usando le coordinate. Una soluzione è contare quante linee di tipo “arrow” ci sono nello scrap che contiene la riga 5728, prima di tale riga: nell'esempio ce n'è una, perciò la linea “arrow” con l'errore è la seconda. L'ordine enl file MetaPost è invertito rispetto a quello nel file therion .th2 (questo per mostrare i primi elementi del file therion sopra gli ultimi). Perciò la linea è la penultima, ovvero la riga 23 nella finestra “File commands”.

In effetti non c'è nulla di sbagliato con tale linea – questo è il motivo percui c'è voluto così tanto a trovarla :) Ha l'ultimo punto di controllo uguale all'ultimo punto. Questo è perfettamente accettabile in MetaPost. Purtroppo c'è qualche errore nella definizione delle linee “arrow” che non lo permettono: questo deve essere sistemato. Nel frattempo ci sono due soluzioni: usare un segmento dritto (senza punti di controllo), oppure metter un punto di controllo diverso dal punto finale.

Ho questo messaggio di warning in alcuni scrap … mi chiedo quanto sia serio ecosa devo fare. Ma senza maggiori informazioni su dove il contorno si interseca (e perché questo è un problema) non posso fare altro che ignorarlo.

  Warning: scrap outline intersects itself in bmb3_s3@fake. 

L'unica informazioni che therion può dare è il nome dello scrap. Non c'è modo di sapere dove, in MetaPost, il contorno chiuso si interseca. :-(

Ho anche diversi scrap che non posso includere nel rilievo globale poiché ottengo criptici messaggi di errore di MetaPost. Dobbiamo trovare un modo per fornire all'utente una informazione migliore su _dove_ è il problema dato che, al momento, è molto difficile correggere senza sapere quale delle innumerevoli linee è sbagliata.

Pensiamo che sia fattibile fornire il numero di linea del file th2 dove c'è stato l'errore. Forse sarebbe anche possibile identificare il bordo di un'area che non si interseca.

How did you find the above problem. If I understood the process you used to find this it might help me next time.

Abbiamo avuto questo errore “incorrectly determined interior of the scrap” molto tempo fa' nel rilievo della Dead Bats Cave. C'era qualche strano troncamento del contorno dello scrap che non riuscivamo a spiegare. A quel tempo non c'era la segnalazione di MetaPost, e nemmeno la possibilità di colorare la mappa. Non ricordiamo bene, ma ci volle un bel po' per identificare che il problema era il contorno e cosa non andava in esso. Dopo aver letto il capitolo appropriato nel libro di Metafont capimmo che il problema era inun ciclo, ma non riuscimmo a trovarne alcun ciclo, perchè era molto piccolo, proprio come il tuo.

Abbiamo aggiunto il messaggio di MetaPost per segnalare il problema all'utente. Quando lo vediamo, per prima cosa controlliamo gli estremi degli scrap. Il problema è se l'errore viene introdotto solo dopo la deformazione degli scrap prima di unirli. Possiamo solo raccomandare di muovere i punti di controllo negli archi finali di una linea “wall”, proprio prima della fine dello scrap, eseguire therion, togliere le modifiche con Ctrl-Z e ripetere con altre linee “wall” fintanto che il problema rimane.

Il ciclo può pure aver luogo nel mezzo di una linea “wall”, ma dovrebbe essere visibile, almeno con lo zomm a 400%.

Ci dispiace che non ci sia un modo più intelligente per trovare il ciclo :-(

Ci sono due sale, una sotto l'altra, connesse da un pozzo. Se disegni una linea “overhang” e una line “pit” ottieni qualcosa di strano:

Se imposti l'opzione ”-outline in -clip off“ per le due linee “overhang” e “pit” il pozzo appare trasparente:


Consulta il libro di therion “TherionBook”; devi aggiungere al tuo layout il codice sotto riportato, sostituendo la dimensione dei caratteri (font) “default\size[26]” prima di “\the\cavename”.

  code tex-map
  \legendcontent={%
    \hsize=\legendwidth
    \ifnortharrow\vbox to 0pt{\line{\hfil\northarrow}\vss}\fi
    \edef\tmp{\the\cavename} \ifx\tmp\empty \else
      {\size[26]\the\cavename} \vskip1cm
    \fi
    \ifscalebar\scalebar\vskip1cm\fi
    {\rightskip=0pt plus 3em\parskip=3bp
      \edef\tmp{\the\comment} \ifx\tmp\empty \else
      {\size[12]\the\comment} \par\medskip
      \fi
      \everypar{\hangindent=2em\hangafter=1}
      \edef\tmp{\the\cavelength} \ifx\tmp\empty \else
        {\size[12]\si\the\cavelengthtitle: \ss\the\cavelength\par}
      \fi
      \edef\tmp{\the\cavedepth} \ifx\tmp\empty \else
        {\size[12]\si\the\cavedepthtitle: \ss\the\cavedepth\par}
      \fi
      \edef\tmp{\the\exploteam} \ifx\tmp\empty \else
        {\size[12]\si\the\explotitle:
  \ss\the\exploteam\quad\si\the\explodate\par}
      \fi
      \edef\tmp{\the\topoteam} \ifx\tmp\empty \else
        {\size[12]\si\the\topotitle: \ss\the\topoteam\quad\si\the\topodate\par}
      \fi
      \edef\tmp{\the\cartoteam} \ifx\tmp\empty \else
        {\size[12]\si\the\cartotitle:
  \ss\the\cartoteam\quad\si\the\cartodate\par}
      \fi
      \edef\tmp{\the\copyrights} \ifx\tmp\empty \else
        {\size[12]\ss\the\copyrights\par}
      \fi
    }
    \formattedlegend
  }

Questa è una parte di un file .th di un rilievo contenente i comandi di “input” e le definizioni delle “map”.

  survey rotunda_perlovy -title "Cachticka jaskyna, Rotunda + Dom starcov"
   
    input ../rotunda_dlhy_hlboky/rotunda.th 
    input ../rotunda_dlhy_hlboky/dlhy_dom.th 
    input dom_starcov.th
    input bordel.th
    input oranzovy.th
    input perlovy.th
  
  map rotunda_perlovy.map 
  
    perlovy.map@perlovy
    oranzovy.map@oranzovy
    break
    #rotunda.map@rotunda
    break
    #dom_starcov.map@dom_starcov
    break
    #bordel.map@bordel
  
  endmap

Come puoi notare ci sono diversi file inclusi (con gli “input”) in questo “survey”. e ci sono tre “map”, alcune commentate. Quando usi un file “thconfig” che non contiene il comando “select” il rilievo finale, include tutte le map parziali, siano esse commentate o meno. Il motivo è che le definizioni delle mappe sono nei file inclusi e il file di configurazione usa tutte le map definite.

  endlayout
  
  export map   -o rotunda_perlovy.pdf   -layout my_layout

\\ {{therion:rotunda_perlovy_0.png}}

Se vuoi avere un rilievo con solo due sottomappe, per esempio “perlovy.map” e “oranzovy.map”, devi usare il comando “select”nel file di configurazione e scriver il comando “select rotunda_perlovy.map”. Therion genera allora il rileivo con le sole map “perlovy.map” e “oranzovy.map”.

  endlayout
  
  select rotunda_perlovy.map@rotunda_perlovy
  
  export map   -o rotunda_perlovy.pdf   -layout my_layout

\\ {{therion:rotunda_perlovy_1.png}}

Se scommenti tutte le sottomappe nella definizione della “map” ottieni il rilievo riporatato sotto. Nota che il comando “break” forza la divisione della map su più livelli. Senza il comando “break” tutte le map sono sullo stesso livello. Guarda come viene nella parte sinistra delle immagine - la presunta parete.

  map rotunda_perlovy.map 
  
    perlovy.map@perlovy
    oranzovy.map@oranzovy
    break
    rotunda.map@rotunda
    break
    dom_starcov.map@dom_starcov
    break
    bordel.map@bordel
  
  endmap

Ci sono tre bottoni molto utili nel menu della finestra di compilazione, Survey structure, Survey info e Map structure. Puoi usare le informazioni di Map structure per selezionare con facilità (cioè inserire un comando “select”) map e sottomappe nel tuo file di configurazione. Fai un doppio click sulla map che vuoi selezionare, e viene copiata nel tuo file di configurazione.

“Survey structure” e “Map structure'
La map con le sottomappe scommentate

Gli scrap delle sezioni trasversali devono avere l'opzione ”-projection none”. Vedi anche “Come aggiungere un rilievo senza dati”.

Le linee che definiscono la sezione nella mappa devono essere di tipo “section”. Un punto “section” specifica dove posizionare la sezione trasversale. Ha un parametro opzionale, “-align [tr, tl, br, bl]”: un allineamento top-right (tr) specifica che il rettangolo della sezione trasversale deve essere disegnato nel quadrante a destra in alto del punto “section”.

Sia la linea “section” che il punto “section” fanno parte dello scrap della pianta (o della sezione longitudinale).

Se disegni la linea “section” con il solo segmento, senza punti di controllo, ottieni una linea continua che denota la sezione. Per aggiungere i trattini che ne indicano in verso, usa l'opzione “-direction”. Se preferisci avere solo i tratti agli estremi della linea di sezione, traccia i punti di controllo: questi determinano la lunghezza dei tratti.

il solo segmento
la curva

Se “base-scale” è la stessa che “scale”, non c'è alcun effetto. È come fare una fotocopia 1:1.

Se le due sacel sono differenti, ad esempio “scale 1 2000” e “base-scale 1 1000” i simboli e il testo vengono stampati ridotti si 1/2. Come se il disegno fosse fatto nella scala “base-scale” e poi ridotto alla scala “scale”, cioè come stampare il rilievo in scala 1:1000 e poi ridurlo fotocopiandolo fino a che la scala è 1:2000 Stampare direttamente in scala 1:2000 produrrebbe le scritte e i simboli grossi il doppio. Quindi cambiare “base-scale” da 1:1000 a 1:2000 raddoppia la dimensione dei simboli e delle scritte.

Puoi ignorare l'opzione “base-scale” se le impostazioni di default funzionano bene. La “base-scale” è stata introdotta per dare la possibilità di fare semplici aggiustamenti alla dimensione dei simboli senza ricorrere alla programmazione in metapost. Perciò se i simboli vanno bene in scala 1:200 ma sono troppo grossi in scala 1:400 è sufficiente impostare “base-scale 1 200” e “scale 1 400” per avere un rilievo in scala 1:400 ma con i simboli piccoli come se la scala fosse 1:200. Se le dimensione di default dei simboli va bene per i tuoi rilievi, usa solo l'opzione “scale”. Se no prova ad usare “base-scale” (oppure a ridefinire l'espressione metapost dei simboli).

Nelle mappe (export map) c'è un problema di scala perché il PDF e pdfTeX non possono gestire pagine oltre circa 5*5 m. Non ci sono limiti per gli atlanti (export atlas) e per mappe in formato SVG.

Un altro limite è la dimensione delle immagini che MetaPost riesce a gestire, che è circa 2.8 m. Ogni scrap viene elaborato separatamente generando una immagine, quindi ogni scrap deve risultare inferiore a 2.8*2.8 m (nella scala dell'output). Questo non è un problema a meno che si cerchi di disegnare una grotta in un solo scrap: alla scala 1:100 uno scrap può contenere un'area di 280*280 m di grotta.

La finestra di log di xtherion mostra i messaggi MetaPost. C'è un numero, per esempio “33”, prima dell'errore: questo vuol dire che l'immagine numero 33 è stata processata con successo e l'errore ha avuto luogo nella successiva (persumibilmente la 34).

Riesegui therion in modalità debug ed mettiti nella cartella thTMPDIR. Apri il file “data.mp” e cerca l'immagine 34 (comincia con “beginfig(34);” ;-). Trova la linea di assegnazione del “current_scrap” che precede l'immagine: questa specifica lo scrap (sintassi “nome_scrap@nome-survey”) cha ha generato l'errore.

Non è una procedura immediata, ma è difficile trovare una via migliore fra MetaPost e Therion, per rintracciare gli errori.

Al momento se un'area attraversa l'unione di due scrap, mettiamo una zona “area” da entrambe le parti, una in ciascun scrap. Ci vuole una linea del contorno di ciascun area, che vada a sovrapporsi esattamente alla analoga linea sull'altro scrap. Possibilmente linee composte da un solo segmento, anche se si può fare pure con poligonali e persino con linee curve. Queste linee devono essere di tipo “border -subtype invisible”.

Il problema ora è che (se i due scrap sono tracciati sullo stesso disegno) non puoi clickare sulla linea che sta sotto, perciò non puoi completare un'area senza prima muovere temporaneamente la linea di lato. Questo non è comodo. Una alternativa consiste nel selezionare lo scrap: questo muove i suoi elementi in alto, e quindi quando clicki selezioni la sua linea.

Una altra è clickare col bottone destro: ad ogni click cambia il punto (e quindi la linea) selezionata ciclando sui punti che si sovrappongono.

  • it/faq.txt
  • Last modified: 9 years ago
  • by marco_corvi