• Aucun résultat trouvé

Une Interface Compatible PC Pour le Calepin Electronique SDR2

N/A
N/A
Protected

Academic year: 2021

Partager "Une Interface Compatible PC Pour le Calepin Electronique SDR2"

Copied!
56
0
0

Texte intégral

(1)

I

UNE INTERFACE COMPATIBLE PC POUR

I

LE CALEPIN ELECTRONIQUE SDR2:

I

TOPO.BAS, editeur et createur de fichiers.

Par Pierre Marchildon (87 052 88)

Projet de fin d'etudes

Pr8sente au Professeur McKyes

(2)

P

ar un ~uet mabiJ d9 dibut d9 maJ; j9 me prt!sente pour la premiere l'ois c/Jez mon 6Yl7p/oyeuresbYala SaJiJt-C8sa!re 11 est 6:(}() AM et des mon am~ le

patron

nous

a~~ mole/ un autre ellldianl du Col~ a DanieL Cesl un ~n!C!e7

en

!Jydmulique agr~ au

pes

sUr et a la M?~%~ qui

nous

amene

dens

la fl!7b7 de Mlmbe/ (otJ 11 y

a

beeucvup d9ctiwre depu!S la ~xprqonSI!On des

1em9sJ.

oa_s.

noire

JY877kire

pu~ on se J,al a:m/i9r des taches plutot 1nteressantes: prelevement dS7hanblbnsde sol

a

la~ testsd9 /87701716i9 du

niveau deau

dens

Asfs'

trous

~

prcmenade

le

b:y d9 la

terre du

culb'vateur p?Ur noter toutes Asfs' caracteristiques particulieres et enniJ, releYtf

topcmetr,que

des pan;e/Asfs'

a

d/Biher.

E

IJ ou£ car 11 s agit bel et b1en de tous les

pni/lin1i'la!/es ~tie/sa 1a amaspi!On dun

plan

de d/B/~ que nous aYOnS e.ff6r7~ dumnl noire

premiere ;ournee douvrage pour ce bureau d7i1gtin/eurs ag~ Jaiper la suite nialistf que le

d/B//Jage d6meu/B/l6Yla:Yl1 le p8/i7 et le beurre de la

pro~ et que nous aYions

ete

a7ana.9tLK de

tcm-ber sur un S77pb.ft1Ur quin 7Jtkllall

pes

a

nous

a:YJ/i9r

des ~u~ IVI1 mfl~ m&f7nf notm

statu/ d-8/l/diant

a

uelques ;ours passtirent. Puis un nouvel

/Jumanoii:Ma trolspe~ #I

son

appgtitbn au SSiiJ du ptHSV~JI16Y. En /'si~ 11 s~~l dune s/atbn to/ale

aVBC tou~ • cptbns t:bnt notm li:Jna9ur et liJ-nowteur

petn:Jn

venaJl de

l'alm

l~uisflbn mo.ft:WJ·

nent le bagatelle de$ 2~000. Les re/eves

topcmetnques

~res au plans de dm1/7age et

aux d!mirents

plans

de Kx:a//selion ~t 8/hside /~du

pepier

et crayon

a

ce/uide 1717/'otmatique.

(3)

STATION TOTALE

11 s'agit du tacheometre electronique Set 3 de Sokkisha. C'est un appareil qui, cam me le tacheometre classique, est monte sur trepied et sert a prendre les angles horizontaux et verticaux, de meme que la distance tors des releves topometriques. Le fait qu'il soit etectronique tui confere la possibilite d'afficher de maniere digitate les lectures prises, et meme de pouvoir transferer directe-ment ces donnees

a

un calepin electronique branche sur la sortie "Data Out-pur· de la station. Je vais d'ailleurs revenir plus tard au calepin electronique.

A premiere vue, la station ressemble

a

une tete de robot garnie de nombreux controles qui permettent de prendre differents types de lectures: azimuth horizontal, denivelee, angle relatif, distance reelle, distance horizon-tale, etc .. Cette tete electronique est aussi munie d'un objectif qui donne

a

l'operateur la possibilite de viser la mire situee sur le point

a

relever. On la monte sur un trepied convention ne! et on doit ajuster le niveau jusqu'a ce que la station soit satisfaite, sous peine de se voir refuser le signal de depart. Lorsque tout est regie, on peut commencer a prendre les lectures.

Comme pour les releves tradition nets, deux operateurs sont n9cessaires a la bonne conduite de l'entreprise. Avant tout, l'operateur sur la mire doit in-diquer

a

celui de la station la hauteur

a

laquelle il a regie la mire. Effectivement, la mire est ici constituee de deux cylindres metalliques telescopes: celui

a

l'interieur est gradue pour indiquer I' elevation du sommet de la mire. Car

a

l'extremite superieure, on retrouve un prisme principalement constitue d'un mirroir concave. C'est ce prisme que l'op8rateur de la station doit viser et ainsi mettre dans l'objectif de la station. Une fois que le prisme est bel et bien dans le champ de vision de la station, I' operateur appuie sur un bouton qui demande

a

la station de prendre la lecture. Celle-ci emet alors un signallumineux qui, si le prisme se trouve bien en vue, sera retourne par le mirroir concave, car c'est la la propriete essentielle de cette piece optique: retourner vers la source emet-trice sa propre reflection. Lorsque la station re<.(Qit cette reponse, elle prend en note le degre d'inclinaison de l'objectif, qui correspondra

a

l'angle vertical, l'azimuth horizontal de la tourelle par rapport au zero relatif, et enfin la distance reelle claculee

a

partir de l'intervalle enregistree entre l'emission et la recep-tion du signallumineux. Bien entendu, ces donnees sont brutes et devront etre

(4)

corrigtles en tenant compte de nombreux parametres physiques et relatifs: pression atmospheriq·ue, temperature, position terrain de l'azimuth zero, elevation de la mire, etc .. La station sait meme de combien de fractions de degre sa mise au niveau n'est pas exacte. Cela demontre blen le degre de sophistication de !'instrument et les potentiels dt3savantages qui r:>euvent en dScouler.

Eh cui, lors de sa reception, la station totale a souleve beaucoup d'emo· tion technologlque au sein du cabinet. Mais cela a bien pris une benne semalne d'experimentatlons et monopolise un certain nombre d'employes avant d'obtenir le moindre resultat pratique. Tout ce nouvel equipement avait ete achete

a

grands frais sans recevoir le moindre supJJOrt technique ou forma-tion adequate de la part du revendeur. 11 a done fallu composer avec les moyens du bord et reapprendre

a

marcher avec ce nouveau tripecte

a

tete transistorisee. Meme apres quelques mois d'utilisation, plus de 60% des pos-sibilites de la station n'ont pas ete utilise3es. On a reussi

a

faire fonctionner la station de maniere acceptable d'une certaine fac;:on, alors 11 serait trop hasar· deux et coOteux de tenter d'utlllser les autres posslbllltes. N'oubllons pas que sommes ici dans le secteur prive.

CALEPIN ELECTRONIQUE

La station totale perdrait tout son interet (du mains, la pertinence de son

rapport productiviteJprix) si elle

ne-~fait

pas munie d'une unite de memoire

--%-capable de stooker les lectures prises, afin de sou lager l'operateur de la prise de donnees ..

a

mitaine ... Eh bien le Dieu de l't3quipement geodesique, en l'occurence Sokkisha, a aussi cree le SDR2.

Cela ressemble

a

un petit ordinateur de poche de type Hewlett-Packard (ace sujet, le HP-17C aurait tres bien pu rempla~r le SDR2, et ce

a

beaucoup moindre cout) que l'on branche

a

la sortie prevue

a

cet effet sur la station to· tale. Le SDR2 est compose d'un simill-clavier alphanumerique avec affichage d'une ligne, de 64K de memoire accessible en ecriture et lecture, d'unltes de

(5)

ROM qui comprennent les programmes que J:>eUt executer le calepin et d'une unite d'alimentation par batteries. La continuite de l'alimentation electrique est ici importante car elle J:>ermettra la conservation des lectures prises en memoire vive jusqu'a ce qu'elles soient retin9es du calepin. Alors, en plus des

batteries ordinaires (format AA) qui sont au nombre de quatre, la SDR2

cam-parte une petite pile interne qui assure une reserve de courant pour permet-tre le changement des batteries lors d'une utilisation au champ.

Les programmes que le SDR2 possede en memoire morte sont en

quetque sorte des gestionnaires de donnees pour la station totale. Car le SDR2

ne se contente pas de recevoir passivement l'information de la station totale, il corrige) les donnees reques selon les parametres d'utilisation mentionnes precedemment, et transforme les angles et les distances corriges en

coor-donnees de type X-Y -Elevation (Est et Nord remplacent X et Y dans le jargon

de la station). 11 pose de plus des q'uestions

a

l'op8rateur de la station quant aux coordonnees du point de depart, conditions atmospheriques, hauteur de la mire et changements de station.lllui permet aussi d'entrer un code, lors de la prise de chacun des points, qui ldentifle le ty()e de lecture prise (ex: T f:X>Ur terrain, F pour fosse et B pour tout ce qui est b§timent).

~~

C'est done un micro-ordinateur qui r~it des indications physiques de la

station quant aux correct I~ apporter aux donnees qui entreront par la suite,

et qui met en memoire taus les resultats ainsi obtenus. Cela nt3cessite done une p8riode de calcul au cours de laquelle le calepin ne peut plus recevoir

d'information. Les programmeurs du SDR2 ant done decide que ces

opera-tions auraient lieu lors des changements de station au champ (pour ne pas in-staller la confusion dans l'esprit du lecteur: lorsqu'il est question de changement de station, cela signifie que l'on change la position de la station totale sur le terrain afin de prelever d'autres points). Le microprocesseur du calepin n'etant pas tres puissant, il faut parfois attend re jusqu'a trente minutes, le temps n8cessaire au calepin pour tout faire ses devoirs, avant de pouvoir

poursuivre

a

une nouvelle station. Du rant ce delai, les operateurs en profitent

pour demenager la station totale et la remettre au niveau a la position de la nouvelle station au champ.

(6)

RECEPTION DES DONNEES SUR COMPATIBLE PC

De retour au bureau, les operateurs doivent transferer le contenu du calepin electronique sur un support lisible par un ordinateur compatible PC. Cela se fait done par la meme interface, une prise

a

plusieurs branches ( .. pins .. ) situee sur le face supt1rieure du calepin, qui a reQu les informations de la sta-tion totale. Le meme cable qui faisait la liaison avec la stasta-tion se voit rajouter

un adapteur afln de se connecter a la prise serie (RS-232) du compatible PC.

Puis,

a

partir de l'ordinateur, on lance un petit programme en Basic fourni par le revendeur, qui assurera par la communication en serie le .. dumpage" de

donnees du calepin sur une disquette ou le disque dur. Ce programme r~it

le contenu du calepin sous le format ASCII et le sauve sur la disquette ligne par ligne sous ce meme format en fichier sequential. Tout cela peut s'effectuer

a

differentes vitesses, mais la communication se fait de maniere optimale (le plus rapidement sans qu'il y est pour autant d'erreur)

a

1200 bauds. En general, un releve de 250 fX>ints (le maximum que permet les 64K du calepin) requiere une benne vingtaine de minutes fX>Ur le transfert sur disquette.

Une fois le contenu transfere et seulement alors, le calepin permettra l'effacement du contenu de la memoire. De maniere evidente, un temps enorme vient d'etre epargne par rapport

a

la methode traditionnelle ou on devait d'abord reduire le calepin de notes (falre les ajustements angulalres et la difference des fils stadimetriques)

a

la main, puis communiquer une

a

une

a

l'aide du clavier les donnees a l'ordinateur.

(7)

FICHIERS DE DONNEES DU CALEPIN

Voici

a

quoi ressemble un fichier sEquential ecrit sur la disquette lors du transfert des donnees du calepin:

OONMSDR2 V02-08S(3)843205-0ct-88 18:48 111111 1 ONMLOISELLE 08NM1. 00000000 13CPSea level cm: N 13CPC and R cm: N 13CPAtmos cm : N 13TS04-0ct-88 10:51 01NM: 0.000 000000 00000031 02lV00012000. 000 2000.000 50.000 081<100093000. 000 2000.000 03NM2.400 09F1 0001 00094.877 85.97500 357.85187 09F1 00011 00019.033 88.57778 188.92058 BPOR 09F1 00011 0019.580 81.98887 180.17111 BPOR 09F1 00011 00237.945 87.28194 1 07.13083 FOSSE 09F1 00011 003+1.598 87.87750 1 00.83558 FOSSE 09F1 00011 00448.471 87.89056 108.06944 FOSSE 09F10001100558.072 88.26833 111.16361 FOSSE 09F1 0001100682.050 88.40583 111.69811 FOSSE 09F10001100784.197 88.51333 104.57894 FOSSE 09F10001100895.241 89.14722 114.37839 BPOR 09F10001100997.825 88.84417 114.18811 FOSSE 09F100011010102.239 88.801&4 109.51444 FOSSE 09F1 00011 011152.118 90.18472 288.70528 ST A 121V0001 012 09MC0001 00095.282 112.92829 0.00000 09MC00011 00019.041 93.80582 191.08889 BPOR 09MC00011 0019.528 98.41312 182.31944 BPOR 09MC00011 00237.907 90. 907~ 109.27917 FOSSE 09~0001100344.585 90.78204 102.98389 FOSSE 09MC00011 00448.442 90.72844 110.21778 FOSSE 09MC00011 00558.051 90.72127 113.311 &4 FOSSE 09MC00011 00882.030 90.82237 113.84444 FOSSE

(8)

09MC0001100784.180 90.85589 108.72528 FOSSE 09MC00011 00895.238 90.59111 118.52472 BPOR 09MC0001100997.808 90.24997 118.31444 FOSSE 09MC00011 01 01 02.209 89.94705 111.88278 FOSSE 09MC00011 011152.142 91.08858 288.85381 ST A 081V1 0001981.354 1998.352 48.738 BPOR 081V1 0011990.542 1999.617 48.936 BPOR 081V10021987.486 2035.777 49.399 FOSSE 081V10031989.988 2043.422 49.407 FOSSE 081V1 0041983.260 2045.454 49.384 FOSSE 081V10051977.820 2051.471 49.294 FOSSE 081V10061974.926 2056.732 49.326 FOSSE 081V1 0071981.531 2061.460 49.266 FOSSE 081V1 0081957.472 2085.207 49.017 BPOR 081V1 0091956.643 2087.670 49.573 FOSSE 08lV10101962.270 2094.990 50.0fM FOSSE 081V1 0112049.156 1856.048 47.163 STA 02TV1 0112049.156 1856.046 47.163

Au tout debut du fichier on retrouve d'abord les informations qui sont relit9es a l'identification de l'ouvrage: date et heure du transfert (OONM), et nom donne au releve (10NM). Puis viennent les conditions atmospheriques (13CPS, 13CPC et 13CPA), qui sont presque toujours omises par les operateurs. Arrivent ensuite le debut de releve avec la date et l'heure (13TS), lescoordonnees du point de depart donnees par l'op8rateur (02TV), celles du backside pour fixer I' azimuth g8ographique zero (08KI) et la hauteur de la mire (03NM).

Suite a ce preambule, peuvent enfin commencer les lectures des differents points visas au cours du releve. Toute ligne commenQSnt par "09F1 .. correspond aux lectures brutes (non corrigt9es) prises par la station totale. La premiere de ces lectures (09F1 0001

ooo ... )

est reservee au backside pris sur le terrain et c'est ce point qui fixera I' orientation de l'azimuth zero: les coor.-donnees 3000.000 et 2000.000 du 11

08KI11

n'ont

ete

spScifiEies que pour indi-quer que le backside correspond au Nord relatlf du releve. Les lectures de veritables points succecJent a celles du backside jusqu'a ce qu'on rencontre

(9)

un 11

121VI qui indique la fin des lectures prises

a

la premiere station, le numero de celle-ei (0001) et le nombre de points vis8s (012). Puis le calepin se met

a

caleuler les lectures corrigees, auxquelles corresr:x>ndent les 11

09MC ... Elles ant le meme format que les 11

09F1 .. , mais toutes les corrections dues au rajuste-ment

a

l'azimuth zero, aux variables atmospheriques,

a

la justesse de la mise au niveau ainsi qu'aux ehangements de hauteur de la mire ant ete apportees. Ce sont done les valeurs

a

partir desquelles les coordonnees deflnitives de ehaque point sont caleulees par trigonometrie. Celles-ci correspondent aux

.. oaw·

et apparaissent

a

la suite des 11

09MC ... II est aussi

a

noter que le format pour les coordonnees ne renferme plus le numero de la station

a

partir de la-quelle on a vise, contrairement aux deux autres formats, mais seulement le numero du point, suivi des coordonnees Est, Nord et elevation. Le code, lui apparaTt toujours

a

la fin de la ligne. Lors d'un ehangement de station (ce qui n'est pas le cas pour le fichier de l'exemple qui ne demontre qu'une seule sta-tion, 0001 ), le calepin prend les coordonnees calculees de la nouvelle station et ce sont celles-ei qui deviennent l'origine relative pour le caleul des coor-donnees suivantes.

Faisons maintenant une petite recapitulation: ehaque fiehier provenant du calepin comporte une intrcx:tuction comprenant les details techniques, puis pour ehaeune des differentes stations sur le terrain, la serie des lectures brutes (09F1 ), des lectures corrig9es (09MC) et des coordonnees des differents points. 11 y a done trois series de mesures pour ehaeun des points pris au champ.

NECESSITE o·uN EDITEUR-CORRECTEUR POUR

lES FICHIERS DU CALEPIN

Tout ceci sera it bien beau si la station to tale savait corriger les erreurs de manipulation des operateurs, si ceux-ci ne commettaient aucun oubli dans les entrees au calepin et si tout cet 9quipement sophistique fonetionnait exacte-ment comme il l'est indique dans leur manuel d'instructions. Mais, on s'en doute bien, la perfection n'etant pas de ce monde, surtout celui des

(10)

manipula-tions de donnees par material informatique, il s'est avere qu'un pourcentage non n8gligeable (plus de 40%) des reveles faits

a

l'aide de la station totale et du calepin electronique n8cessitaient differents types de correction.

L'erreur la plus courante consiste en un dtlcalage angulaire de taus les rx>ints pris

a

une station donnee. En effet, les r:x>ints semblent dtlcales d'un certain angle par rapport a un centre de rotation, qui s'est avere etre la posi-tion de la staposi-tion concernee. Apres ptusieurs heures de dechiffrage du .. listing .. des fichiers, j'ai constate que le calepin, et la je ne saurais expliquer pourquoi, fait quelquefois une erreur de calcul dans l'angle de correction qu'il doit ajouter ou en lever aux lectures .. 09F1 .. de I' angle horizontal pour les rend re relatives

a

I' azimuth zero du releve. Dans ce cas, il faut done corriger les lectures 11

09MC .. (qui sont supposSes etre les corrections definitives des 11

09F1 .. ) en

y

ajoutant l'angle de correction trouve a partir des donnees obtenues

a

la station precedente au sujet de la pr9sente station et du backside cons8cutif. A I' aide de ces indications, on f)eUt evaluer de maniere rigoureuse la continuite des lectures prises.

Une autre cat9gorie d'erreur englobe toutes les avaries techniques qui r:>euvent arriver au champ et au tranfert des donnees. Par exemple, apres un changement de batteries durant un releve, on constate une alteration d'une partle des donnees contenues dans le calepln. La station totale perd alors ses

valeurs de reference et on doit continuer en commen~nt un nouveau releve.

11 faudra done par la suite etablir les coordonnees

a

partir des lectures partiel-les et fusionner le nouveau releve avec celui initialement commence. Tout cela nt3cessitera un editeur approprie pour manipuler les donnees obtenues et ef-fectuer les calculs d'usage. D'autres erreurs qui causent a peu pres les memes anomalies: accrochage et derE)glement de la station totale durant la prise de lecture, mauvaise sequence de touches sur le clavier du calepin, lancement d'un autre programme de gestion du calepin et transmission irr9guliere lors du .. dumpage .. des donnees.

Enfin, il

y

a les erreurs proprement humaines. Du genre: des codes

inap-propries ont ete entres lors du releve, ou lors d'un second releve sur un meme

terrain, les oper~teurs ont oublh3 de donner les bonnes coordonnees du point

de depart. Celles-ci sont les plus simples

a

corriger car elles n8cessitent soit

(11)

une intervention d'edition ponctuelle ou une correction globale sans dis-crimination.

Cela definit en gras les options et les possibilites que devrait offrir routil de correction

a

batir. Mais on devra aussi considerer le fait que les donnees obtenues du calepin, meme lorsqu'elles sont entierement depourvues d'erreur, ne constituent qu'un ramassis compact d'informations qu'il faudra maintenant interpreter et ideatement traiter directement

a

l'aide de l'ordinateur. C'est pourquoi, afin d'obtenir en bout de ligne un produit fini qui ressemble

a

un plan de drainage ou de localisation avec tout l'apparat d'usage, it faudra aussi pouvoir transferer ces donnees dans tes logiciels specialises en design et dessin technique.

PROGRAMME TOPO.BAS

Evidemment, j'aurais bien aime que le calepin electronique se contente de stacker les lectures d'angles et de distances prises par la station totale. 11 aurait ete beaucoup plus facile d'ecrire un programme qui reprennait ces donnees brutes et les convertissait en coordonnees X-Y-Eievation. L'intt9grite des calculs aurait ete assuree par la rigueur du code source. Mais, comme je devais composer avec le materiel existant, je me suis done mis

a

la tache d'ecrire un programme qui decortiquerait pas

a

pas le fichier procJuit par le calepin et reconstituerait taus les catculs et les etapes cruciales du releve afin de pouvoir detecter toute source d'erreur dans le traitement des donnees. Le pr()(Jramme devait aussi cam porter des facilites pour proc::eder

a

la correction de la grande majorite des erreurs rencontrees. Et enfin, il devait permettre la creation de fichiers au formats compatibles avec Autocad et Land I m prove, les deux logiciels utilises au bureau pour la conception des differents plans.

Pour reussir dans cet entreprise, il fallait fragmenter l'ensemble du travail

a

effectuer en plusieurs petites taches. L'emploi d'un langage de programma-tion structure s'imFX>Sctit done. Ayant de sol ides bases de programmaprogramma-tion en Basic, je fut tres heureux de constater que la version 4.0 de QuickBasic

(12)

per-mettait une approche _structuree et des possibilites de n3cursivite. Je n'avais done pas

a

faire l'apprentlssage d'un nouveau langage mais seulement

a

ap~ prlvolser le puissant envlronnement de travail du QulckBaslc 4.0 .

A fin de rendre avec justesse I' elaboration du programme TOPO.BAS, je vais done entreprendre la description du programme partle par partie , solt chaque sous~programme (par ordre alphabetlque de leur nom) avec

ses

utlllsatlons et sa formulation precectant le code source. Je ne feral qu'une ebauche sommalre de chacun en lalssant les details a l'analyse du code source. L'evolutlon de la resolution des taches

a

rempllr devralt alnsl sembler plus claire et credible.

r1_

I

Programme prlnclpall

Avant de pouvolr generer du code, 11 faut etabllr les dlfferentes taches

a

accompllr. C'est ce qui est fait

a

l'alde des Instructions DECLARE et de leurs arguments propres

a

chaque sous-prCXJramme. Puis, on retrouve le dimen-sionnement des differentes matrices nt3cessaires JX>Ur stacker les valeurs ob-tenues tors de la decortication du fichier ASCII du calepin. A l'aide de l'instruction TYPE, on etablit les trois principales structures de donnees: la matrice "Shor· qui renferme les indications pour chacun des points vises, la matrice .. Station .. qui retient taus les parametres propres aux differentes sta-tions et la matrlce .. Job" pour chacun des releves, s'il

y

a fusion de flchlers.

Avec I' instruction DIM SHARED, on fixe ensuite les constantes

et

les vari-ables qui dolvent etre globales au programme, car en QulckBaslc celles-cl sont locales aux sous-programmes,

a

mains qu'on ne le specifle. On retrouve aussl deux fonctlons (fnxr et fnyr) pour le calcul de la position

a

l'ecran des fX>Ints affiches tors de l'ectition. Car toute fonctlon dolt etre declaree dans le programme principal.

On a malntenant satlsfalt taus les prellmlnatres requts pour commencer

a

formuler les sous-programmes. Alnsl, des la fin des differentes declarations, on se dlrlge vers le sous- programme qui afftche

a

l'ecran le menu des options

(13)

offertes par le programme. Voila, c'est deja fini pour le programme principal, car tout le reste est accompli par les sous-programmes.

DECLARE SUB sauvegarde () DECLARE SUB nettole () DECLARE SUB vtslon () DECLARE SUB correcteur () DECLARE SUB correction () DECLARE SUB retour.dos () DECLARE SUB flchler. dXf ()

DECLARE SUB landlmprove ()

DECLARE SUB flchler.xye (Nom.XYE$, Code.XYE$, lmpOouN$) DECLARE SUB menuprlnclpaJ ()

DECLARE SUB edition () DECLARE SUB Impression ()

D8flnttlon et dlmenalonnement du format des matr1cea

TYPE Coordonneea statlonNo AS INTEGER NoPosltlon AS STRING * 4 HauteurMire AS SINGLE F1 Distance AS SINGLE F1 Vertical AS SINGLE F1 Horizontal AS SINGLE MCDistance AS SINGLE MCVertlcaJ AS SINGLE MCHortzontaJ AS SINGLE Nord AS SINGLE Est AS SINGLE Elevation AS SINGLE Code AS STRING * 8 END TYPE TYPE Detalla Shotea AS INTEGER Polnteur AS INTEGER Numero AS STRING * 4 NordO AS SINGLE EttO AS SINGLE

(14)

ElevO AS SINGLE NoJob AS INTEGER F1VersHor AS SINGLE F1 VersVer AS SINGLE F1Vers01st AS SINGLE NostaDe AS STRING * 4 F1 DeHor AS SINGLE F1 DeVer AS SINGLE F1 DeDiat AS SINGLE MCVersHor AS SINGLE MCVersVer AS SINGLE MCVersDist AS SINGLE MCDeHor AS SINGLE MCDeVer AS SINGLE MCDeDist AS SINGLE END TYPE TYPE Speclflque NoPSta AS INTEGER NoDsta AS INTEGER Polnteur AS INTEGER No9000 AS INTEGER NbreShF1 AS INTEGER NbreShMC AS INTEGER NbreShlV AS INTEGER Reste AS INTEGER NordRef AS SINGLE EttRef AS SINGLE END TYPE

DIM SHARED NShob% NShotl%

=

2000

DIM SHARED Shot(NShob%) AS Coordonneet DIM SHARED Statlon(20) AS Details

DIM SHARED Job(1 0) AS Speclflque DIM SHARED P9000(15) AS Coordonnees DIM SHARED Achler.ASC$(1 0)

DIM SHARED AchlerflnaJS DIM SHARED NombreShots% DIM SHARED RchlerEdHe$ DIM SHARED FlchlerTOP$

(15)

DIM SHARED CorrecUons$ DIM SHARED Rchlera$ DIM SHARED AbsentASC$ DIM SHARED VldeASC$ DIM SHARED Bate$ DIM SHARED lmprlmante$ DIM SHARED AbsentDXF$ DIM SHARED PI

DIM SHARED ConvA DIM SHARED NJ% DIM SHARED NbJob%

VldeASC$ = 'Non• AbsentASC$ = 'Non• lmprlmante$ = •out• AbsentDXF$

=

'Non• PI = 3.141593 ConvA = Pll180

DEF fnxr (x, xmln, ratio, deltax)

posx

=

20 + CINT((Shot(x).Est · xmln) * (600 I (1.91 ratio) I deltax)) fnxr = posx

END DEF

DEF fnyr (x, ymln, rallo2, dettay)

posy = 270 · CINT((Shot(x).Nord · ymln) * 289 * ratlo21 dettay) fnyr = posy END DEF CALL menuprtnclpal CLS SYSTEM END

(16)

IGestion des erreursj

Contrairement ace que laisse penser le titre, cette portion du programme ne s'attaque pas aux erreurs des fichiers ASCII du calepin, mais plutot aux defaillances potentielles du programme. Eh oui, si l'on veut que le programme ait un minimum de contort d'utilisation, on doit prevoir des moyens de pallier

a

l'imprevisibillte de l'utlllsateur ou de la quincaillerie informatique c·hardware11

) . 11 y a done une J.)etite routine de gestlon pour chacune de erreurs

r:x>tentlelles les plus susceptlbles de se produlre: le cas ou le flchler spSclfle par l'utlllsateur ne se trouve pas dans le directorie courant ("File not found"), celui ou le fichier est vide (bizarrement, cela se produit souvent), celui aussl ou le fichier nt3cessaire

a

la production du flchier compatible Autocad (.dxf) n'est pas accessible, et enfin le cas de l'imprimante qui ne repond pas. Bien sur, il

y

a d'autres routines pour la gestion des erreurs qui se trouvent dans chacun des sous-programmes concernes.

AchlerNonTrouve:

CLS

AbaentASC$ = •ou1•

PRINT I ALERTE MAlNE . . . ALERTE MAlNE . . . ALERTE MAlNE ... I

PRINT

PRINT I Eh oul, 9a peut arrtver

a

tout l'monde ... •

PRINT 'Le flchler . aac apeclfle ne ae trouve pas dans le dlrectorle courant • PRINT

PRINT 1Essayer un autre nom •

PRINT I ou•

PRINT •ones 'AsseZ' pour retoumer au menu principal et faJre• PRINT •un retour momentane au DOS pour trouver votre flchler. • PRINT

PRINT •Lea flchlera deja admla aeront alora oubllea et voua• PRINT 1devrez re commencer a les nommer. •

PRINT PRINT

RESUME NEXT

(17)

AchlerVIde: CLS

VldeASC$ = •out•

PRINT I ALERTE TURQUOISE ... ALERTE TURQUOISE ... ALERTE TURQUOISE ... I

PRINT : PRINT PRINT•

PRINT

Le flchler •; Achler.ASC$(NJ%); • eat vtde. •

PRINT •cet Incident vous oblige a retoumer au menu principal (vous • PRINT •paasez GO mala ne pouvez r6clamer 200 dollara) et vous devr1ezi PRINT 'V6rlf1er par un retour momentan6 au DOS le contenu du flchle,.. PAINT •concem6. •

PRINT

PRINT •Pressez une touche ... • w$ = 11 WHILEw$ = 11 w$ = INKEY$ RESUME NEXT DXFAbaent AbaentDXF$

=

•out• CLS

PRINT • ALERTE BLEUE PALE... ALERTE BLEUE PALE... ALERTE BLEUE PALE ... •

PRINT : PRINT

PRINT I Le flchler •; Base$; I neceaaaJre pour la cr6allon•

PRINT • des flchlera . DXF ne se trowe pu dana le dlrectorle courant. • PRINT

PRINT

•cet

Incident voua oblige

a

retoumer au menu principal (voua • PRINT •puaez GO mala ne pouvez r6clamer 200 dollars) et voua devrez' PRINT •sortlr de TOPO et copier le flchler •; Bue$; • dans te•

PRINT •dtrectorle utilise si vous voulez faJre un flchler . DXF • PRINT •ult6rleurement. •

PRINT

PRINT •Pre••ez une touche ... •

~ = 11

WHILEw$

= ..

w$ = INKEY$

WEND

(18)

lmprtmanteFermee: lmprtmante$ = 'Non• PRINT : PRINT

PRINT I ALERTE POURPRE... ALERTE POURPAE... ALERTE POURPRE ... I

PAINT : PRINT

PRINT 'L'lmprlmante ne repond pas. • PRINT

INPUT • AJiumez ·la et preasez sur une touche pour conUnuer'; ouvert$ PRINT

RESUME

I

Sous- programme •correcteur"'l

Cette routine a pour principal but de faire apparaitre durant l'edition des coordonnees un tableau qui indique les n3sultats reelles et theoriques quant au transferts de station. S'il

y

a une trap grande difference (plus de 0.25 degre) entre les deux, il affiche la possibilite d'une erreur et l'angle de la correction

a

apporter. U ne boucle va judicieusement ( !) chercher les valeurs requises dans les dlfferentes matrices et effectue les calculs theorlques. C'est done lcl que s'offre la possibilite de corriger les erreurs dues au d9calage angulaire. Pour realiser la correction, on devra enchainer avec le prochain sous-programme c·correctlon11

) .

SUB correcteur

UNE (280, 0)·(839, 214), , BF UNE (284, 4)·(835, 210), 0, BF

LOCATE 2, 37: PRINT • VERIACATION DES TRANSFERTS DE STATION' LOCATE 4, 37: PRINT 'Station Job AngCor AngTheo Detta•

LOCATE 25, 8: PRINT I

LOCATE 15, 37: PRINT • 1: RETOUR AU PlAN 2: CORRECTION';

rangee%

=

8

FOR I

=

1 TO Job(NJ% · 1 ).NoDsta

LOCATE ran gee%, 37: PRINT STR$(1) + ')' + station( I). Numero; LOCATE rangee%, 48: PRINT Statlon(I).NoJob;

TOPO.BAS

..

,

(19)

MCV = statlon(l). MCVeraHor IF statlon(l). Numero = •ooo1• THEN

Oppo = statlon(I).Eato · Job(Statlon(I).NoJob).EatRef Adja = statlon(I).NordO · Job(Statlon(I).NoJob).NordRef IF Adja = 0 THEN

IF Oppo

=

0 THEN AngleVers

=

90 ELSE AngleVers

=

270 GOTO MCVEQ

END IF

AngleVera = ATN(Oppo I Adja) * 380 I (2 *PI)

IF AngleVers

=

0 AND Adja 0 THEN AngleVers

=

180 MCVEQ: MCV = AngleVera

END IF

IF MCV 180 THEN Slgne = ·1 ELSE Slgne = 1 MCD = MCV + (Signe * 180)

AngCorTh = MCD · Statlon(I).F1 DeHor

AngCorPr = statlon(I).MCDeHor · statlon(I).F1DeHor Delta = AngCorTh · AngCorPr

LOCATE rangee%, 50: PRINT AngCorPr, LOCATE rangee%, 60: PRINT AngCorTh;

IF ABS(Detta) . 25 AND ABS(Detta) 359.75 THEN

Detta = INT(Detta * 1 00) 1100 LOCATE rangee96, 71: PRINT Den&; rangee% = rangee% + 1

LOCATE ran gee%, 40: PRINT •Posslblltte d'erreur a cette station t• rangee% = rangee% + 1

ELSE

LOCATE rangee96, 71: PRINT • r'U o•

END IF rangee%

=

rangee% + 1 NEXT I w$

=

•go• WHILE w$ •atop• w$ = INKEY$ IF w$

=

'11 THEN w$

=

•atop•

IF w$

=

•2• THEN CALL correction: w$

=

•atop•

WEND END SUB

(20)

I

Sous- programme •correction•!

Lorsqu'on a reussi

a

determiner la source de l'erreur et son amplitude, on doit maintenant avoir la possibilite d'apporter la correction en spe3cifiant les valeurs nt9cessaires. Pour ce faire, on appelle le sous-programme .. correction ..

a

partir du tableau de verification des transferts de station C'correcteur'). Alors, en indiquant les correctifs (Nord, Est, elevation et angle)

a

apporter et l'eten-due des points concernes (numero du releve, numero de station, points lnferleur et superteur), on dellmlte les crlteres de la correction. On enclenche par la suite la boucle qui prend une

a

une les lignes des lectures pour chaque point (matrice .. Shot .. ), verifie si elle fait partie de l'etendue

a

corriger et si cui, effectue les operations n8cessit8es par la correction.

Des

la fin de ce proces-sus, on est redirige vers le sous-programme .. vision .. qui affiche

a

l'ecran I' ensemble des points ainsi obtenus.

SUB correction AutreCorrect rg% = 2 UNE (8, 0)-(276, 214), 6, BF UNE (12, 4)-(272, 21 0), 7, BF LOCATE 15, 37: PRINT I

LOCATE rg%, 3: PRINT 1 CORRECTION 1

rg% = rg% + 2

UnNJ: LOCATE rg%, 3: PRINT 1

'

LOCATE rg%, 3: INPlJT I No de Job: I; NJ$ JN

=

VAL(NJ$)

IFJN = OTHEN

LOCATE 14, 3: PRINT I 11 faut preclaer

I•

'

LOCATE 15, 3: PRINT •1e numero de la Job •; GOTO UnNJ END IF rg%

=

rg% + 1 LOCATE rg%, 3: PRINT •

..

' LOCATE rg%, 3: INPlJT 1 No de station: •; NS$ rg%

=

rg% + 1

TOPO.BAS

..

Page 19

(21)

IF NS$ 11THEN

LOCATE rg%, 3: PRINT • •;

LOCATE rg%, 3: INPUT • No Shot lnf6r1eure:•; NSI$ rg% = rg% + 1

LOCATE rg%, 3: PRINT •

..

'

LOCATE rg%, 3: INPUT • No Shot Super1eure:•; NSSS rg,.; = rg,.; + 1

END IF

LOCATE rg96, 3: PRINT • LOCATE rgcr, 3: INPUT • Est rg% = rg% + 1

LOCATE rg%, 3: PRINT • LOCATE rg%, 3: INPUT • Nord: rg% = rg% + 1

LOCATE rg%, 3: PRINT •

LOCATE rg%, 3: INPUT • Elevation: rg% = rg% + 1 LOCATE rg%, 3: PRINT • •; ES$

..

'

..

' •; NO$

..

' •; EL$

LOCATE rg%, 3: INPUT • Angle: •; ANS LOCATE 13, 3: PRINT • 1 : GO

LOCATE 1 .. , 3: PRINT • 2: Recommencer LOCATE 15, 3: PRINT • 3 : Retour au plan

wS = •go• WHILE w$ •stop•

w$ = INKEY$

IF w$ = •1• THEN w$ = •stop•

IF w$

=

•2• THEN GOTO AutreCorrect IF w$ = •3• THEN GOTO RnCorrect WEND

IF NS$ = •• THEN NS = 0 ELSE NS = VAL(NS$) IF NSI$ = •• THEN NSI

=

0 ELSE NSI

=

VAL(NSI$) IF NSS$ = •• THEN NSS

=

0 ELSE NSS = VAL(NSS$) IF ES$

= ••

THEN ES

=

0 ELSE ES = VAL(ES$)

IF NOS = •• THEN NO

=

0 ELSE NO

=

VAL(NO$) IF EL$ = .. THEN EL = 0 ELSE EL = VAL(EL$) IF AN$ = .. THEN AN = 0 ELSE AN = VAL(AN$)

SS = 0: ENE

=

0: NSIS

=

0: NSSS

=

0 IF NS = 0 THEN SS

=

0 ELSE SS

=

1

(22)

IF (ES 0) OR (NO 0) THEN ENE

=

1

DeltaN

=

NO · staUon(Job(JN). NoPSta). NordO deltaE = ES · statlon(Job(JN).NoPSta).EttO deltaEL = EL · statlon(Job(JN). NoPSta). EI8VO ELSEIF (ES = 0) AND (NO = 0) AND (El 0) THEN

ENE = 2 deltaEL

=

EL DeltaN

=

0 denaE

= o

ELSE ENE

=

0 DeltaN

=

0 deltaE

=

0 deltaEL =

o

END IF

IF (NSI 0) THEN NSIS = 1

IF (NSS 0) THEN NSSS = 1 IF AN= 0 THEN ANS = 0 ELSE IF SS= 1 THEN ANS

=

1 NO = Statlon(NS). NordO EO = statlon(NS).Esto ELO = staaon(NS). ElevO

denaA = AN * ConvA

ELSE

ANS = 2

NO

=

statlon(Job(JN). NoPSta). NordO EO = staaon(Job(JN).NoPSta).EstO ELO

=

stallon(Job(JN).NoPSta).EievO deltaA = AN

*

ConvA END IF END IF

TOPO.BAS

Page 21

(23)

FORk = Job(JN)..Polnteur TO Job(JN + 1).Polnteur · 1 IF (Shot(k).Eievatlon) 0 AND (Shot(k).Nord 0) THEN

IF ENE = 1 THEN

Shot(k). Nord = Shot(k). Nord + DeltaN Shot(k). Eat = Shot(k). Eat + deltaE

Shot(k). Elevation = Shot(k). Elevation + denaEL END IF

IF ENE = 2 THEN

Shot(k). Elevation = Shot(k). Elevation + deltaEL END IF

IF ANS = 2 THEN

AdJ = Shot(k). Nord · NO Opp = Shot(k). Eat · EO

Distance = (Opp /'. 2 + AdJ A 2) /'. .5 IF AdJ = 0 THEN

IF Opp 0 THEN Angle

=

1. 5 * PI ELSE Angle

= .

5 * PI ELSE

IF (AdJ 0) THEN

Angle = ATN(Opp I AdJ) ELSE

Angle

=

PI + ATN(Opp I AdJ) END IF

END IF

Angle = Angle + deltaA

Shot(k).Nord = NO + (Distance* COS(Angle)) Shot(k). Est = EO + (Distance * SIN( Angle)) ·

END IF END IF NEXTk

IF ANS

=

1 THEN

stallon(NS). MCDeHor = Statlon(NS). MCDeHor + AN FOR I

=

Job(JN).Polnteur TO Job(JN + 1).Polnteur · 1

IF (Shot(I).StallonNo = NS) AND (Shot(I).Nord 0) THEN 04

=

Shot( I). MCDistance * SIN( Shot( I). MCVertlcal * ConvA) Shot( I). MCHortzontal = Shot( I). MC HoriZontal + AN

Shot(I).Nord

=

NO + (o.f * COS(Shot(I).MCHorlzontal * ConvA)) Shot( I). Eat = EO + (o.f * SIN(Shot(l). MCHortzontaJ

*

ConvA)) END IF

(24)

END IF

Corrections$ = -ou1• AnCorrect

END SUB

I

Sous- programme •edition•

I

11 representesansdoute la piece maitresse de tout le programme, car c'est ici qu'on reconstitue le developpement togique du reteve en isotant chacune des valeurs du fichier et en les plagant dans l'espace reserve en memoire par la structure de la matrice approprlee. Pour ce faire, des nombreux tests (IF ... THEN ... ) sent requis, car on doit aussi restituer la chronologle du releve. Une fois le fichier completement epluche et les valeurs mises dans les cellules de

memoire appropri8es, on possede alors una structure de donnees de type

relationnel sur laquelle it est beaucoup plus facile d'effectuer des corrections sur des elements inter-relies, comme les lectures d'un releve topometrlque. Enfin, seulement si cette etape est franchie avec succes, on pourra avoir acces aux outils de correction et de creation de fichiers.

SUB edition CLS

AchlerTOP$ = •Non• CorrectlonaS = •Non•

PRINT •fUSION ET EDmON DE ACHIER .ASC DU SDR2' PRINT I I

PRINT •Entrez lea flchler• dana l'ordre destre•

PRINT 'Tapez •Implement aur Enter sana rten ecrtre aprea le demler flchler' PRINT : PRINT : PRINT

N=O

CLOSE

ON ERROR GOTO AchlerNonTrouve NomS= 'OK'

WHILE NomS ••

IFN 0 THEN

(25)

Flchler.ASC$(N) = UCASE$(Nom$) + 1 .ASC1

OPEN Flchler.ASC$(N) FOR INPUT AS #1 CLOSE

IF AbsentASCS = •out• THEN AbsentASCS = 'Non•

N = N -1

IFN = 0 THEN PRINT 1

Aucun flchler.ASC accept& juaqu'i priaenr PRINT

ELSE

PRINT • Achler( a) d6Ja ad m la : • FORk= 1 TON PRINT Flchler.ASCS(k) NEXTk PRINT END IF GOTO NomAchler END IF

PRINT Flchler.ASCS(N): PRINT END IF

NomAchler: INPUT 'Nom de flchler a 6dtter'; NomS IF UCASES(NomS) = 'ASSEZ' THEN GOTO NoEdlllon N=N+1

WEND

CLS

PRINT : PRINT NFichler = N · 1

IF NFichler = 0 THEN GOTO NoEdltlon

IF NAchler 1 THEN

INPUT •oonnez le nom du noweau flchler cr66 ( 5 letlres maximum )'; nnomS PRINT : PRINT

Lnn = LEN(nnom$)

IF Lnn = 5 THEN Rnn = Lnn ELSE Rnn = 5

FlchlerFinaJS = UCASES(LEFTS(nnomS, RM)) + 'TOP.ASC1

PRINT 'Fusion de •; NFichler; • flchlen .ASC' PRINT •source : •; Flchler.ASC$(1 ); 1

Deatlnalon: •; FlchlerAnaiS FOR y = 2 TO NFichler

PRINT 1

•; Flchler.ASC$(y)

(26)

Flchlen$

=

·o~1·

ELSE

Lnn = LEN(Fichler.ASC$(1 ))

IF Lnn

=

5 THEN Rnn

=

Lnn ELSE Rnn = 5

Achlerflnal$ = LEFTS(Achler.ASC$(1 ), Ann) + 'TOP.ASC' PRINT 'Pas du fusion, un aeul flchler source: •; Rchler.ASC$(1)

Flchlers$ = 'Non• END IF

PRINT : PRINT : PRINT

PRINT • un petit Instant, Je r8flechls ... • IF RchlerEdlte$ = •out• THEN CALL nettole

N9000%

=

10 Nsta% = 0 NSh% = 0 Job(O).Polnteur =

o

DenaN = 0 NbJob% = 0 NJ% = 1 NombreShob% =

o

AutreJob: ERASE P9000 F1 Nbre9000% =

o

MCNbre9000% = 0 TVNbre9000%

=

0 F1Nbre%

=

o MCNbre%

=

0 TVNbre%

=

0 INTE = 1

Job(NJ%). NoPSta

=

NSta% + 1

Job(NJ%). Polnteur = Job(NJ% · 1 ). Polnteur + DenaN NSh%

=

0

OPEN Rchler.ASC$(NJ%) FOR INPliT AS #1 ON ERROR GOTO Rchlei'VIde

AutreRecord: INPUT #1, A$

IF VldeASC$ = 'Oul' THEN VldeASC$ = 'Non• GOTO NoEdttlon

(27)

END IF

teatpre$

=

te·•tS teat$ = LEFT$(AS, 4)

nothS

=

~~s, s,4J

noaho%

=

V~nosh$)

IF test$ = 108KI1 THEN

Job(NJ9b).NordRef = VAL(MIDS(AS, 9, 8)) Job(NJ%).EstRef = VAL(MIO$(A$, 19, 8)) END IF

IF test$ = 1

021'\1" THEN

IF MID$(A$, 5, 4) •ooo1• THEN INTE = INTE * ·1

IF INTE

=

1 THEN GOTO Saute END IF

Nsta% = Nsta% + 1

Statlon(Nsta%).NoJob = NJ%

statlon(Nsta%).Polnteur

=

Job(NJ%).Polnteur + NSh% Statlon(Nsta%).Numero = MIDS(A$, 5, .f)

NO$ = MID$(A$, 9, 8): statton(Nsta%).Nord0

=

VAL(NO$) EO$ = MID$(A$, 19, 8): statlon(Nsta%).Eat0

=

VAL(EO$) ELO$ = MID$(A$, 29, 8): statlon(Nsta%). EI8VO = V AL(ELO$)

Saute:

staNum% = VAL(MID$(A$, 5, 4))

END IF

IF test$

=

•o3NM• THEN hautrnlre

=

VAL(MID$(A$, 5, 5))

IF teat$ = •oeF1• AND no•hS = •oooe• THEN statton(Nsta%). NostaDe

=

no•hS

Statlon(Nsta%).F1DeDitt

=

VAL(MID$(A$, 13, 7))

Stallon(Nsta%).F1DeVer = VAL(MID$(A$, 23, 7))

stallon(Nsta%).F1DeHor

=

VAL(MID$(A$, 33, 7))

GOTO AutreRecord END IF

IF teat$ = •o9F1' AND noaho% staNum% THEN NoMat

=

Job(NJ%).Polnteur + staNum% · 1 000

staaon(Nsta%). NoStaDe = MIDS(A$, 9, 4) staaon(NSta%).F1 DeDitt

=

VAL(MIDS(A$, 13, 7)) statlon(Nsta%).F1DeVer

=

VAL(MIDS(AS, 23, 7))

(28)

statlon(Nsta%).F1 DeHor = VAL(MID$(A$, 33, 7)) statlon(Nsta%). F1 VersDist = Shot(NoMat). F1 Distance statlon(Nsta%). F1VersVer = Shot( No Mat). F1 VerUcal Statlon(Nsta%).F1VersHor = Shot(NoMat).F1 HoriZontal GOTO AutreRecord END IF IF test$ = '09F1' THEN IF nosho% = 9000 THEN F1 Nbre9000% = F1 Nbre9000% + 1 NoMatrtce% = F1 Nbre9000% P9000(NoMatrtce%).F1Distance

=

VAL(MIDS(A$, 13, 7)) P9000(NoMab1ce%).F1VerUcal = VAL(MIDS(A$, 23, 7)) P9000(NoMab1ce%).F1Hortzontal = VAL(MID$(A$, 33, 7))

P9000(NoMatrlce%). Code = MID$(A$, ~3, 8)

P9000(NoMatrlce%). staaonNo = Nsta% P9000(NoMatrtce%).NoPosltlon

=

nosh$ P9000(NoMatr1ce%). HauteurMire = hautrnlre ELSE

F1 Nbre% = F1 Nbre% + 1

NoMab1ce% = Job(NJ%).Polnteur + nosho% · 1000 Shot(NoMatrlce%). F1 Distance

=

V AL(MID$(A$, 13, 7))

Shot(NoMalrtce%).F1Vertlcal = VAL(MID$(A$, 23, 7))

Shot(NoMab1ce%).F1Hortzontal = VAL(MIDS(A$, 33, 7))

Shot(NoMalrtce%). Code = MID$(A$, .f3, 8)

Shot(NoMatrlce%). StatlonNo = Nsta% Shot(NoMab1ce%). NoPosltlon = nosh$ Shot(NoMab1ce%).HauteurMire = hautrnlre END IF END IF IF teat$

=

'121V' THEN Stalon(Nsta%).Shotes = VAL(MID$(A$, 9, 3)) END IF

IF teat$ = '09MC' AND noahS = '0009' THEN

statlon(Nsta%).MCDeDiat = VAL(MID$(A$, 13, 7))

statlon(Nsta%). MCDeVer

=

V AL(MID$(A$, 23, 7))

stallon(NSta%).MCDeHor = VAL(MIDS(A$, 33, 7))

GOTO AutreRecord END IF

(29)

IF teat$ = •o9Mc• AND noaho% staNum% THEN NoMat = Job(NJ%). Polnteur + staNum% · 1 000 statlon(Nsta%).MCDeDist = VAL(MIDS(A$, 13, 7))

statlon(NSta%).MCDeVer = VAL(MID$(A$, 23, 7))

statlon(Nsta%).MCDeHor

=

VAL(MIDS(A$, 33, 7))

staUon(Nsta%). MCVersDist = Shot(NoMal). MCDistance staaon(Nsta%). MCVersVer = Shot(NoMat). MCVer11caJ statlon(Nsta%). MCVersHor = Shot( No Mal). MCHortzontal

GOTO AutreRecord END IF IF test$ = 1 09MC• THEN IF nosho% = 9000 THEN MCNbre9000% = MCNbre9000% + 1 NoMatr1ce%

=

MCNbre9000% P9000(NoMatrtce%).MCDistance = VAL(MIDS(A$, 13, 7)) P9000(NoMatrtce%).MCVer11cal = VAL(MIDS(A$, 23, 7)) P9000(NoMatrtce%).MCHortzontal = VAL(MID$(A$, 33, 7)) ELSE MCNbre% = MCNbre% + 1

NoMatrtce% = Job(NJ%). Polnteur + nosho% · 1 000 Shot(NoMab1ce%).MCDittance = VAL(MID$(A$, 13, 7))

Shot(NoMatrtce%).MCVer11cal = VAL(MID$(A$, 23, 7))

Shot(NoMab1ce%).MCHortzontal = VAL(MIDS(A$, 33, 7))

END IF END IF

IF teat$

= •oslV'

THEN

noshtv% = VAL(MIDS(A$, 5, 4))

IF nosht\1% = 9000 THEN

TVNbre9000% = 1VNbre9000% + 1 NoMatr1ce%

=

TVNbre9000%

P9000(NoMatrtce%). NoPotltlon = MIDS(A$, 5, 4)

P9000(NoMab1ce%).Nord = VAL(MIDS(A$, 9, 8))

P9000(NoMatrtce%).Est

=

VAL(MID$(A$, 19, 8))

P9000(NoMatrtce%). Elevation = V AL(MIDS(A$, 29, 8)) P9000(NoMatrtce"). Code = MID$(A$, 39, 8)

NombreShotl% = NombreShots% + 1

ELSE

(30)

NoMatrtce% = Job(NJ%). Polnteur + noahtv% · 1 000 Shot(NoMatrtce%).NoPoaiUon = MID$(A$. 5, A1) Shot(NoMatrtce%).Nord

=

VAL(MID$(A$. 9, 8))

Shot(NoMatrtce%).Eat = VAL(MID$(A$, 19, 8)) Shot(NoMatrtce%).Eievatton = VAL(MIDS(AS, 29, 8))

Shot(NoMatrlce%). Code = MIDS(A$, 39, 8) NombreShots% = NombreShot8% + 1 END IF

END IF

AnAchler: IF NOT EOF(1) THEN GOTO AutreRecord CLOSE #1

IF teat$ = •o2TV" OR teatpre$ = 1

02TV" THEN Nsta%

=

Nsta% · 1

GOTO TVOk END IF

PHShot = VAL(Shot(Job(NJ%).Polnteur + TVNbre% · 1).NoPoaltlon) IF (staNum% + 2) PHShot THEN

Nsta% = Nsta% · 1 END IF

TVOk:

Job(NJ%). NoDsta = Nsta%

Job(NJ%). No9000 = F1 Nbre9000% FOR I = 1 TO F1 Nbre9000%

NoMatr1ce%

=

Job(NJ%). Potnteur + F1 Nbre% + I · 1 Shot(NoMatr1ce%). stattonNo

=

P9000(1). stattonNo Shot(NoMatr1ce%). NoPoaltlon = P9000(1). NoPoaltlon Shot(NoMatr1ce%). HauteurMire = P9000(1). HauteurMire Shot(NoMatr1ce%). Code = P9000(1). Code

Shot(NoMatr1ce%). F1 Dlatance = P9000(I). F1 Dlltance Shot(NoMatrtce%). F1 Vertical = P9000(1). F1VerUcal Shot(NoMatrtce%). F1 Hor1zontal

=

P9000(1). F1 Hor1zontal Shot(NoMatrtce%). MCDtatance = P9000(1). MC Distance Shot(NoMab1ce%). MCVerUcaJ = P9000(1). MCVertlcaJ Shot(NoMatrtce%).MCHor1zontal

=

P9000(1).MCHor1zontal Shot(NoMatrtce%). Nord = P9000(1). Nord

Shot(NoMatr1ce%).E8t = P9000(1).Est

Shot(NoMatrtce%). Elevation

=

P9000(1). Elevation

(31)

NEXT I

Job(NJ%). NbreShF1 = F1 Nbre% + F1 Nbre9000% Job(NJ%).NbreShMC = MCNbre% + MCNbre9000% Job(NJ%).NbreSh1V

=

TVNbre% + TVNbre9000%

Job(NJ%). Reste = F1 Nbre% · TVNbre% NbJob% = NbJob% + 1

NJ% = NJ% + 1

IF Job(NJ% · 1).NbreShTV Job(NJ% · 1).NbreShF1 THEN DenaN = Job(NJ% · 1).NbreSh1V

ELSE

DenaN = Job(NJ% - 1 ).NbreShF1 END IF

IF NJ% NBsbler THEN GQTQ AutrnJgb

Job(NJ%).Polnteur = Job(NJ% · 1).Polnteur + DeltaN RchlerEdlte$ = •out•

IF ((F1 Nbre% + 2) I (TVNbre% + 1)) 1 THEN AchlerTOP$ = •out•

PRINT : PRINT • H6 Oh, 9a y est, faltes une touche• w$ = 11

WHILE w$ = •• wS

=

INKEYS WEND

CALL vision

IF CorrecUons$ = •out• OR Rchlert$ = •out• THEN CALL sauvegarde

ELSE

IF Rchlera$ •ou1• THEN RchlerAnal$ = Achler.ASC$(1) END IF

NoEdltlon: CLOSE

(32)

I

Sous-programme •fichier

.dxr

I

Une autre partie imJJOrtante du programme, c'est le module de creation de fichiers compatibles, et done acceptables par Autocad. Ce sous-programme est essential car il permet l'utilisation direct du logiciel de dessin technique pour traiter les donnees et commencer les plans. On evite ainsi d'avoir a entrer les points una una l'aide du clavier, comme cela se faisait avant I' acquisition de la station totale. Egalement, la beaute de cette operation reside dans le fait que les coordonnees d'un point au champ seront les memes que celles qu'affichera Autocad une fois le transfert effectue. Cela nous r:>er· mettra de travailler en echelle reelle dans Autocad (merveilleux pour les mesures de distance entre deux points).

Autocad repr8sente un puissant et tres flexible outil de design et de preparation des plans finaux. 11 est done avantageux de s'en servir le plus tot possible dans le processus de design. Cela explique l'importance de ce module de creation, car on devait disposer le plus rapidement possible d'un outil nous permettant de transferer les donnees du calepin electronique dans Autocad afin de beneficier du maximum d'economie de temps que la station totale devait apporter. Bref, on parte ici de la justification et du recouvrement des

coats

du nouvel equipement.

Pour accomplir cette tache, j'ai con~u un sous-programme qui cree un

fichier au format DXF, qui est de type ASCII et qu'Autocad utilise pour echanger avec d'autres logiciels, a partir des coordonnees renfermees dans les fichiers du calepin. Pour arriver a cette fin, il faut d'abord placer un pream-bule assez considerable dans le fichier DXF (toutes ces donnees sont stocktles dans le fichier BASE.DXF et recopier dans le fichier cree), qui donnera a Autocad toutes les indications concernant les variables et les parametres du dessin ainsi produit. Car il s'agit bien d'un dessin a part entiere que l'on retrouve dans le fichier DXF. Chaque coordonnee est done representee par une petitecroix dont

I'

intersection (plus aisee

a

saisir de maniere precise dans Autocad) E!quivaut a la position exacte du point pris au champ. De plus, afin de J:>ermettre une identification rapide, le texte de l'elevation (ex.: 50.78), dont

(33)

on peut choisir la grosseur et l'orientation en fonction de la proximite des differents points, apparaltra

a

proximite de la croix. Chaque point sera aussi reprt3sente sur une couche ("layer") de couleur spt9cifique au code don ne lors du releve au champ.

Voila en gros ce que realise le sous-programme "fichier.dxf• a I' aide d'un classeur de code et des lectures et ecritures sur fichiers s8quentiels. 11 est aussi a noter que le fichier DXF, qui sera appele dans Autocad par la fonction DXFI N, se revele etre tres volumineux. Car on se sert ici du texte pour faire la descrip-tion d'un dessin.

Exemple d'une infime partie du contenu d'un fichier DXF

,

END SEC ~ 0 SECTION 2 BLOCKS 0 ENDSEC 0 SECTION 2 ENTITIES 0 TEXT 8 BATlMENT 10 19s.t.371 20 1977.959 40 2 1 48.73 50 45 0

(34)

Portion aggrandie (zoom) du dessin obtenu dans Autocad

a

partir d'un fichier DXF cree par le sous-programme "fichier.dxf':

SUB flchler.dxf

CLOSE

CLS

PRINT 'CREATION DU FlCHIER DXF POUR AUTOCAD' PRINT : PRINT

PRINT • Flchler

a

convertlr: •, AchlerAnaJ$: PRINT INPUT 'Hauteur du texte dans Autocad'; HT

INPUT 'Angle de rotation du texte•; Angle INPUT •auelle version d' Autocad'; Version$

IF Version$

=

'2.17' THEN Base$

=

'BASE2. DXP ELSE Base$

=

'BASE. DXP

CA= .017453

ANG = Angle * CA

ANGT = ANG + .2573

(35)

OXFS = LEFT$(FichlerFinal$, LEN(FichlerFinal$) · 4) + •.oXP PRINT : PRINT : PRINT I

TEXT$ = 'TEXT'

UNE$

=

'UNE•

Achler prodult •. DXFS

ON ERROR GOTO DXFAbsent OPEN Base$ FOR INPUT AS #1 IF AbsentDXFS = •ou1• THEN

AbsentDXF$ = 'Non• GOTO AnDXF

END IF

OPEN OXF$ FOR OUTPUT AS #2

utbate: INPUT #1, b$

IF NOT EOF(1) THEN GOTO CopleBue ELSE GOTO FermeBue CopleBase: PRINT #2, b$

GOTO utbase

FermeBase: CLOSE #1 FOR J = 1 TO NbJob%

FOR I = Job(J). Polnteur TO Job(J + 1 ). Polnteur · 1 IF Shot(l). Nord 0 THEN

NO = INT(1 000 * Shot( I). Nord): NO = NO /1 000 EO = INT(1 000 * Shot(l). Eat): EO = EO /1 000 ELVO

=

INT(100 * Shot(I).Eievatlon)

ELVO = ELVO /100: EL V$ = STR$(ELVO)

LONGE = LEN(ELV$): ELVF$ = RIGHT$(ELV$, LONGE · 1) CODE1 $ = LEFT$(Shot(l). Code, 1)

CODE2$ = LEFll(Shot(l). Code, 2)

XT = EO· (1.985 *HT* COS(ANGn): XT = INT(1000 * XT) /1000

YT

=

NO · (1.985 *HT* SIN(ANGT)): YT = INT(1000 * YT) /1000 Delta = HT * . 2: Delta = INT(1 00 * Delta) /1 00

XL 1

=

EO · Delta: YL 1

=

NO + Delta

XL.2 = EO + Delta: YL2 = NO · Delta

XL3 = EO · Delta: YL3 = NO · Delta XL.4

=

EO + Delta: Vl4

=

NO + Delta

PT$ = 'PT"

IF COOE1 $ = rr" THEN LA VER$ = 'TERRAIN•: GOTO Quellelayer IF CODE1$ = •p THEN LAYER$

=

'FOSSE•: GOTO Quellelayer IF CODE2$ = •eo• THEN LA VER$ = •eo•: GOTO Quellelayer

(36)

IF CODE1S

=

•A• THEN LAYERS

=

•ARBRE•: GOTO Quellelayer IF CODE2S

=

•RN• THEN LAYERS

=

•RN•: GOTO Quellelayer IF CODE1 S

=

•e• THEN LA YEAS

=

1

BAT1MENT": GOTO Quellelayer

IF CODE2S = •eH• THEN LAYER$ = •cHEMIN•: GOTO Quellelayer LA VER$ = 1RESTE•

Quellelayer: PRINT #2, TEXTS

PRINT #2, 8 PRINT #2, LAYERS PRINT #2, 10 PRINT #2, XT PRINT#2, 20 PRINT #2, YT PRINT#2, 40 PRINT#2, HT PRINT#2, 1 PRINT #2, ELVF$ PRINT -#2, 50 PRINT #2, Angle PRINT #2, 0 PRINT #2, UNES PRINT #2, 8 PRINT #2, PT$ PRINT #2, 10 PRINT #2, XL 1 PRINT #2, 20 PRINT #2, VL 1 PRINT #2, 11 PRINT -#2, XL2 PRINT #2, 21 PRINT #2, VL2 PRINT #2, 0 PRINT #2, UNES PRINT#2, 8 PRINT #2, PT$ PRINT #2, 10 PRINT #2, XL3 PRINT -#2, 20 PRINT #2, VL3

TOPO.BAS

Page 35

(37)

PRINT #2. 11 PRINT #2. XL4 PRINT #2. 21 PRINT #2, YL4 PRINT#2, 0 END IF NEXT I NEXT) PRINT #2, ·eNDsec· PRINT#2, 0 PRINT #2.

•eop

CLOSE#2

PRINT : PRINT : PRINT •Pressez una touche pour retoumer au menu principal• w$ = •• WHILEw$ = 11 w$ = INKEY$ WEND AnDXF: CLOSE END SUB

I

Sous-programme •tichier _xye

I

Ce module cree

a

partlr de spt9clfications r~ues parses arguments (au nombre de trois) un fichier au format ASCII et lisible par le loglciel Land-Improve. Ce format est beaucoup plus simple que le DXF, car il faut simple-ment placer les coordonnees de taus les points passant le test du code de selection dans une structure de ligne precise. Je n'en dirai pas plus pour l'instant car j'en reparlerai lors de la description du sous-programme .. lan-dimprove ...

(38)

Exemple d'un flchler XYE: XVE SDR2: LOISELL T 2119.098 1964.338 48.238 0 1013 2140.319 1988.180 48.173 0 1015 2097.889 1983.814 48.112 0 1020 2108.8411979.569 48.134 0 1021 2118.953 1975.605 48.2-40 0 1 022 2121.217 1983.131 48.397 0 1023 2113.715 1988.170 48.349 0 1 024 2110.390 1990.822 48.407 0 1025 2053.138 2034.347 -48.634 0 1035 1988.1 ~ 1992.918 47.611 0 1040 1938.958 2001.262 -47.385 01042 0. 000 0. 000 0. 000 3 END

SUB flchler.xye (Nom.XYE$, Code.XYE$, lmpoouN$)

PRINT • Flchler produtt •, Nom.XVES PRINT : PRINT

NomXVE$

=

LEFT$(Nom.XVE$, LEN(Nom.XVE$) · 4) LongCode%

=

LEN(Code.XYE$)

ON ERROR GOTO lmprtmanteFermee

IF lmpOouN$ = •o• THEN LPRINT Nom.XVE$

IF lmpOouN$ = •o• THEN LPRINT 'Code de aelectton: •, Code.XVE$: LPRINT ..

OPEN Nom.XVE$ FOR OUTPUT AS #2

PRINT #2, 'XVE'

(39)

Entete$ = 1SDR2:

I + NomXVES PRINT #2, Entete$.

FOR J = 1 TO NbJob%

FOR I = Job(J). Polnteur TO Job(J + 1 ). Polnteur · 1

IF Shot(l). Nord 0 THEN

IF Code.XVE$ = 'Tour THEN GOTO Ecrtture PLC ode$ = LEFT$( Shot( I). Code, 1)

IF Code.XVE$ = 1

Saufl" AND PlCode$ .,.. THEN GOTO Ecrtture IF Code.XVE$ = •Autres• AND PLCode$ .,.. AND PLCode$ •p THEN

GOTO Ecrtture END IF

IF LEFT$(Shot(l). Code, LongCode%) Code.XVE$ THEN GOTO NCP ES = Shot(l). Eat

NO = Shot(l). Nord EL = Shot(l). Elevation

PO = VAL(Shot(I).NoPosltlon)

Ecrtture: FORMATS= 1#1/I.####J'II.######.#### QJ'II1

PRINT #2, USING FORMATS; ES; NO; EL; 0; PO

Posl$ = Shot( I). NoPosltlon

IMPRESS=' \####.### IU#I.######.### \ \1

IF lmpOouN$ = •o• THEN

LPRINT USING IMPRESS; Shot( I). NoPosltlon, ES, NO, EL, Shot(l). Code END IF NCP: END IF NEXT I NEXTJ AN$ = I #.### #.### #.### # \ \1 PRINT #2, USING AN$; 0; 0; 0; 3; •END•

CLOSE#2

IF lmpOouN$ = 101 THEN LPRINT : LPRINT : LPRINT : LPRINT CLOSE

(40)

I

Sous-programme •impression•

I

C'est une simple routine pour permettre la sortie sur papier c•printout") des coordonnees des points d'un fichier du calepin electronique. Cela est es-sential fJOUr preserver une copie sur un supf)Ort autre que magnetique, en cas d'effacement des fichiers. c;a J)ermet aussi d'avoir une liste rapide

a

consul-ter en cas de doute sur la valldite de certains f)Oints.

SUB Impression

CLS: PRINT

PRINT •IMPRESSION DU ACHIER DU CALEPIN ELECTRONIQUE• PRINT •eN FORMAT X, V,ELEV,CODE,NO•

PRINT : PRINT

ON ERROR GOTO lmprlmanteFermee

PRINT I Nom du flchler

a

lmprlmer: I ' Achlerflnal$ PRINT

INPUT • Appuyer une touche de a que l'lmprtmante eat prtte•; Allume$

LPRINT •coORDONNEES X, V, ELV DU ACHIER: •, AchlerAnal$ LPRINT

FOR J = 1 TO NbJob%

FOR 1 = Job(J). Polnteur TO Job(J + 1 ). Polnteur · 1 IF Shot(l). Nord 0 THEN

ES = Shot( I). Est NO = Shot(l). Nord EL

=

Shot(I).Eievatlon CO$ = Shot(l). Code

PO

=

VAL(Shot(I).NoPosttlon)

FORMAT$ = '##=##.### tt //##.IF#####.###\ \ tt 1/ d JCf'

LPRINT USING FORMAT$; ES, NO, EL, CO$, PO END IF

NEXT I NEXT)

(41)

PRINT : PRINT

-PRINT •Prettez una touche pour retoumer au menu principal•

wS = .. WHILE W$ = .. W$ = INKEYS WEND END SUB

!sous-programme •landimprove•j

Land I m prove est un logiciel americain de modelisation topometrique dont le bureau a fait I' acquisition et qui permet entre autres le design de plans de drainage et d'irrigation. C'est un peu la version secteur prive de MacDraln, mais en plus sophistique, je crois. Aussi, malgre ses possibilites impression-nantes, ses outils de dessin et de manipulation sont d'une convivialite archa·ique et ralentlssent grandement le processus de design. Bref, mol per-sonnellement, je ne l'aime pas vraiment. Je suis plutot pour le traitement in-formatique adapte (lire programme fait sur mesure) des donnees et le transfert immecliat dans Autocad. Mais un ingenieur du bureau preferait travailler avec Landlmprove, il m'a done fallu lui ecrire une routine produisant des fichiers lisibles par ce logiciel. Ce qui fut fait avec le resultat suivant: un selecteur de codes qui permet d'isoler les points de differents types (ex.: avec seulement

les terrains, code

ur•,

Landlmprove fait une triangulation donnant des

cour-bes de niveau plus homogenes que celles produites quand les

tosses,

code

up•, sont aussi consideres) et des appels au sous- programme .. fichier .xye .. qui

produira les fichiers au format Landlmprove selon la configuration des codes choisie.

SUB landlmprove

lntroll: CLS

PRINT rrRANSFORMAllON DU RCHIER DU CALEPIN ELECTRONIQUE• PRINT •eN RCHIER .XYE UTIUSABLE SUR LANDIMPROVE•

(42)

PRINT 11

: PRINT ••

-PRINT 'Rchler . aac

a

traHer: •; FlchlerRnal$ PRINT : PRINT : PRINT

PRINT •choiX de conflgurauons des flchlers .XYE produlb: • PRINT : PRINT

PRINT • 1) Un seut flchter .XYE contenant tous tes potnta• PRINT

PRINT • 2) Deux flchlers dltf6rents: TerraJn(T) et Autres• PRINT

PRINT • 3) Trots flchters dlfferents: TerraJn(T), Fosse(F) et Autres• PRINT

PRINT I 4) Nombre de flchlers que VOU8 dealrez ( selecUons par lea codes )1

PRINT : PRINT

INPUT • Votre cholx (1, 2, 3 ou 4)'; CCg$

IF CCg$ •1• AND CCg$ •2• AND CCg$ •a• AND CCg$ •4• THEN GOTO lntroll

END IF PRINT

INPUT 'Impression du(dea) flchter(s)

a

l'lmprlmante (OIN)1

; lmpresslonU$

tmpresslonU$ = UCASES(ImpresslonUS)

Nom$ = LEFTS(Rchlerflnal$, LEN(RchlerflnaJ$) · 4)

LongFF% = LEN(Nom$)

SELECT CASE CCg$ CASE 111

CLS: LOCATE 2, 1: PRINT "TOUT DANS UN SEUL ACHIER .XYE•

PRINT : PRINT NomXS

=

NomS + 1

.XYE1

CALL flchler.xye(NomXS, "Tour. tmpresatonU$) CASE 1

21

CLS : LOCATE 2, 1

PRINT 1UN RCHIER POUR LES TERRAINS•: PRINT : PRINT

IF Longf'F% 7 THEN

NomXS = LEFT$(Nom$, 7) + "T.XVE• ELSE

NornXS = Nom$ + "T.XYE1

END IF

CALL flchler.xye(NomX$, rr', lmpreaslonUS)

PRINT • ET UN POUR LE RESTE•: PRINT : PRINT

IF Longf'F% 8 THEN

(43)

Nom><$ = LEFT$(Nom$, 6) + 'ST.XYE• ELSE

Nom><$ = Nom$ + 'ST.XYE' END IF

CALL flchler.xye(NomXS, •saurr, lmpresslonUS) CASE '3'

CLS: LOCATE 2, 1

PRINT 'UN FlCHIER POUR LES TERRAINS': PRINT : PRINT IF LongFF% 7 THEN

Nom><$ = LEF11(NomS, 7) + 'TJ<VE' ELSE

Nom><$ = Nom$ + 'T.XYE' END IF

CALL flchler.xye(NornX$, 'T', lmpresslonU$)

PRINT ' UN AUTRE POUR LES FOSSES': PRINT : PRINT IF LongFF% 7 THEN

Nom><$ = LEF11(Nom$, 7) + 'F.xve• ELSE

NomX$ = Nom$ + 'F.XYE' END IF

CALL flchler.xye(NomXS, 'P, lmpresslonU$)

PRINT • ET ENFlN POUR LE RESTE': PRINT : PRINT IF LongFF% 5 THEN

NomX$ = LEFT$(Nom$, 6) + 'STF.XYE' ELSE

Nom><$ = Nom$ + 'STF.XYE' END IF

CAU flchler.xye(NomX$, 'Autres', lmpresslonU$) CASE '41

CLS : PRINT 'SELECTIONS PAR LES CODES•: PRINT : PRINT Ncode: LOCATE 2, 1

INPUT 'Code de selection, quatre lettres maximum •; CodeSelect$ PRINT

CodeSelect$ = UCASES(CodeSelect$) LongCD%

=

LEN(CodeSelect$)

IF LongCD% 4 THEN

CLS : PRINT 'Pas plus de quatre letlres ... •: PRINT : GOTO Ncode END IF

Lmax% = 8 · LongCD% IF LongFF% Lmax% THEN

(44)

ELSE

NomXS = NomS + Code Select$ + • .xve•

END IF

CALL flchler.xye(Norn><$, CodeSelect$, lmpresslonU$)

Aselect INPUT •D'au1res silecUons a faJre sur la mime flchler (OIN)'; Autre$ Autre$ = UCASE$(Autre$)

IF Autre$ = •o• THEN CLS : GOTO Ncode IF Autre$ •N• THEN GOTO Aselect

END SELECT

PAINT : PAINT

PAINT •Preaaez una touche pour retoumer au menu prtnclpaJ•

w$ = 11 WHILEw$ = 11 w$ = INKEY$ WEND END SUB

I

Sous-programme •menuprincipal•l

11 effectue l'affichage des options du programme et enclenche l'appel du sous- programme correspondent au choix de l'utlllsateur.ll s'assure aussl qu'll

y

a bien un fichier du calepin Sdite et mis en memolre avant de permettre

racces aux routines de creation et d'lmpression de flchlers. SUB menuprtnclpal

SCREEN 10

WINDOW SCREEN (0, 25)·(80, 0) CLS : RANDOMIZE TIMER

LOCATE 1, 1: PAINT • Eh oul, on m'appelle ... •; xo = 40: yO = 12

FOR I = 1 TO 10

rangee

=

3 + INT(RND * 19): colonna

=

5 + INT(RND * 87) LOCATE rangee, colonne: PAINT rroPO•;

(45)

IF i 1 THEN UNE (x01 yO)-(colonnel rangee) CIRCLE (colonnel rangee)~ .6

CIRCLE ( colonne + 21 rangee · . 5), 7, , I I • 2 FOR J

=

1 TO 1 0: k

=

k + 1: NEXT J

xo = colonne: yO = rangee NEXT I

LOCATE 251 1: PRINT • FaJtes une touche ... •;

w$ = ..

WHILEw$ = .. w$ = INKEY$ WEND

EncoreMenu: SCREEN 0: CLS

PRINT •PROGRAMME TOPO : MENU' PRINT : PRINT : PRINT

IF AchlerEdlte$ = •out• THEN PRINT I

PRINT I PRINT END IF

Rchler editS : •; RchlerAnal$

PRINT •1 Edition et fusion de flchler1 .ASC': PRINT IF AchlerEdlte$ = 'Out• THEN

PRINT '2 Impression (Print) du flchler edlt8': PRINT END IF

IF RchlerEdlte$ = 'Out• THEN PRINT '3

PRINT END IF

Creation dlun flchler dXf pour Autocad'

IF RchlerEdlte$ = •out• THEN

PRINT '4 Creation des nchlers .xye pour Landlmprove• PRINT END IF PRINT'S PRINT'S PRINT PRINT

Retour momentane au DOS (Shell)': PRINT Sortie du programme TOPO': PRINT

(46)

WHILE AS •s• AS= INKEY$

IF AS = •1• THEN CALL edition: GOTO EncoreMenu IF A$ = 1

41

AND AchlerEdlteS = •out• THEN CALL landlmprove: GOTO EncoreMenu IF A$ = •a• AND AchlerEdlte$ = •out• THEN CALL flchler.dXf: GOTO EncoreMenu IF A$ = •2• AND AchlerEdlteS = •out• THEN CALL lmpresalon: GOTO EncoreMenu IF A$ = •s• THEN CALL retour. dos: GOTO EncoreMenu

WEND

END SUB

I

Sous- programme •nettoie•l

Une seule utilite pour cette routine: le remise

a

zero des cellules des differentes matrices avant une autre edition d'un fichier du calepin

electroni-que. SUB nettole FOR I = 0 TO NShob% Shot(l). station No = 0 Shot(l). NoPosltlon = •• Shot(l). HauteurMire =

o

Shot(l). F1 Distance = 0 Shot(l). F1 Vertical =

o

Shot( I). F1 Hortzontal = 0

Shot( I). MCDiatance = 0

Shot(l). MCVertlcal = 0

Shot(I).MCHortzontal = 0

Shot(l). Nord = 0 Shot(l). Eat = 0 Shot( I). Elevation = 0

Shot( I). Code = ••

NEXT I

END SUB

(47)

I

Sous-programme •retour _dos•

I

11 arrive souvent qu'on ne se rappelle plus ou (dans quel sous-directorie) est situe le fichier que l'on veut editer. Ou tout simplement on veut sortir du programme FXJUr verifier le contenu d'un autre fichier. 11 faut alors preserver les donnees mises en memoire et avoir acces au commandes du DOS. La procedure .. retour.dos .. permetdonc une sortie momentane dans la DOS, FXJUr revenir au programme des que l'on donne la commande EXIT. Toute l'information traitee avant la sortie au DOS aura alors ete preserves.

SUB retour. dos

CLS

PRINT

PRINT I Vous voila dans l•envtronnement oos•

PRINT

PRINT I'J'apez EXIT pour revenlr dans TOPO•

SHELL

END SUB

I

Sous- programme •sauvegarde•l

Le programme TOPO permet la correction et la fusion des fichiers du calepin electronique. Pour eviter le reprise des corrections

a

chaque edition, il

faut pouvoir sauver les releves corriges sur disquette. 11 en va de meme lors de la fusion de releves. Pour y parvenir, j'ai choisi de sauver seulement les lig-nes qui contiennent les coordonnees finales de chacun des points. Cela evite de rebatir une structure aussi complexe que le fichier du calepin et permet

I'

edition ulterieure des donnees et la creation des fichiers compatibles. Mais

il

ne sera plus possible d'y apporter des corrections angulaires,

a

mains de repartir du fichier original.

(48)

SUB sawegarde

CLS

SCREEN 0

PRINT •sAUVEGARDE• PRINT : PRINT : PRINT IF Correctlo118$ •out• THEN

PRINT • A molns que vous ne preclslez 'NON', lea Jobs fuslonnees• ELSE

PRINT • A molns que vous ne preclslez 'NON', lea corrections apportees• END IF

PRINT •seront sawees dans le flchler : •; Achlerflnal$ PRINT

INPUT 'Voulez -vous la sawegarde du flchler corrlge•; Corrlge$

Corrlge$ = UCASE$(Corrlge$)

IF Corrtge$ = •NoN• THEN

IF AchlersS •out• THEN Achlerflnal$ = Achler.ASC$(1)

GOTO RnSauve END IF

PRINT : PRINT : PRINT

PRINT • Sauvegarde de •; Achlerflnal$

OPEN Achlerflnal$ FOR OUTPlTT AS #1

PRINT : PRINT • Un petit Instant, 9a s'ra pas long ... •

PRINT #1, Rchlerflnal$

FOR I = 1 TO NbJob%

FOR k = Job(l). Polnteur TO Job( I + 1 ). Polnteur · 1

IF Shot(k). Nord 0 THEN

PrelimS =

•oaw

+ Shot(k). NoPosiUon

NO = Shot(k). Nord

ES = Shot(k). Est

EL = Shot(k). Elevation

Code$

=

Shot(k). Code

ForTOPO$ = "\ \####.### ####.### ###.### \ \1

PRINT #1, USING ForTOPO$; PrelimS; NO; ES; EL; Code$

END IF NEXTk NEXT I PRINT

PRINT •

ea

y'est, pressez une touche pour retoumer au menu principal'

w$ = ..

WHILEw$ = ..

Références

Documents relatifs

(Pour ne pas générer d'erreur cette valeur doit être un nombre entier) Entrez par exemple la valeur 0.. Le tableau de

Cristallisation du paracétamol brut Refroidir ensuite dans un bain d’eau glacée en interchangant le cristallisoir d’eau chaude et la plaque chauffante par un simple

Photographies: François Goalec.. » A chaque retour de l'été, potaches enfin libérés, nous nous échappions au rythme ironique de cette comptine. Dans le temps inversé où

Ce qui manque à ce paon : c'est bien voir, j'en conviens ; Mais votre chant, vos pieds, sont plus laids que les siens, Et vous n'aurez jamais sa queue. Jean-Pierre Claris de

Ensuite une fenêtre apparaît, vous demandant si vous voulez imprimer à partir de votre compte personnel ou d’un compte de facturation (appelé ici « compte partagé »).. Si

Une autre r` egle veut que deux ´ equipes du mˆ eme pays ne peuvent pas se rencontrer et qu’un premier de groupe ne rencontre pas un autre premier de groupe, mais on ignorera cette

Le diagnostic consiste à mettre en perspective des éléments de connaissance recueillis puis de les confronter avec son projet afin de mieux le positionner. Etude de Milieu Phase

Dolto livre au fil de ses différents ouvrages ou émissions définissent les contours d’un puérocentrisme maternel d’une grande exigence : les mères doivent être disponibles