
1 '---------- Carreaux de Bézier --------- 2 ' 3 ' par Rocanin-Borraz Jean-Max 4 ' calculs par itérations 5 ' gwbasic Mai 1989 6 ' 7 ON ERROR GOTO 60000 10 GOSUB 10000 ' init 15 GOSUB 11000 ' init variables & sigle 20 WHILE FIN=0 25 CLS 2 30 LOCATE 22,2 :PRINT "[Appeler Créer Sauver Modifier Graph Iso Dos Fin]:"; 35 INPUT R$ 40 IF R$="a" OR R$="A" THEN GOSUB 150 :R$="" 45 IF R$="c" OR R$="C" THEN GOSUB 100 :R$="" 50 IF R$="s" OR R$="S" THEN GOSUB 200 :R$="" 55 IF R$="m" OR R$="M" THEN GOSUB 300 :R$="" 60 IF R$="i" OR R$="I" THEN GOSUB 500 :R$="" 65 IF R$="d" OR R$="D" THEN GOSUB 650 :R$="" 70 IF R$="g" OR R$="G" THEN GOSUB 900 :R$="" 75 IF R$="f" OR R$="F" THEN GOSUB 750 :FIN=1 90 WEND 95 VIEW PRINT :CLS :SYSTEM 98 END '--------------------------------- 99 ' 100 'Saisie des Polygones Directeurs 102 GOSUB 750 :CLS 2 104 LOCATE 22,1 :PRINT "CREER un carreau" 106 INPUT "nombre de pìles du polygone générateur:";POLESG 108 INPUT "nombre de segments Générateurs:";SEGMG 110 INPUT "nombre de pìles des Polygones Directeurs:";POLESD 112 INPUT "nombre de passes sur l'axe directeur:";SEGMD 114 GOSUB 9000 116 FOR I=0 TO POLESG-1 118 FOR J=0 TO POLESD-1 120 GOSUB 700 'saisie 122 NEXT J 124 NEXT I 128 GOSUB 725 :GOSUB 800 :SAUVEGARDE=0 'cadrage 148 RETURN 149 ' 150 'charger 152 GOSUB 750 :CLS 2 154 LOCATE 22,1 :PRINT "APPELER un Carreau" 156 INPUT "nom du fichier:";R$ :R$=CHM$+LEFT$(R$,8)+".BZR" 158 OPEN"i",#1,R$ 160 INPUT #1,POLESG,POLESD,R$ 'lecture des poles 162 INPUT #1,SEGMG,SEGMD,R$ :GOSUB 9000 'init des tableaux 164 FOR I=0 TO POLESG-1 166 FOR J=0 TO POLESD-1 168 INPUT #1,POLD(I,J,1),POLD(I,J,2),POLD(I,J,3) 170 PRINT POLD(I,J,1),POLD(I,J,2),POLD(I,J,3) 172 NEXT J 176 NEXT 178 CLOSE #1 180 GOSUB 725 :GOSUB 975 :GOSUB 800 'cadrage 198 RETURN 199 ' 200 'sauver 202 IF CRBE=0 THEN RETURN ELSE CLS 2 204 LOCATE 22,1 :PRINT "SAUVER un Carreau" 206 INPUT "nom du fichier:";R$ :R$=CHM$+LEFT$(R$,8)+".BZR" 208 OPEN"o",#1,R$ 210 PRINT #1,POLESG,POLESD,"(polesG-polesD)" 212 PRINT #1,SEGMG,SEGMD,"(segmG-segmD)" 214 FOR I=0 TO POLESG-1 216 FOR J=0 TO POLESD-1 218 PRINT #1,POLD(I,J,1),POLD(I,J,2),POLD(I,J,3) 220 PRINT POLD(I,J,1),POLD(I,J,2),POLD(I,J,3) 222 NEXT J 224 NEXT I 226 CLOSE #1 :SAUVEGARDE=1 248 RETURN 249 ' 300 'modifier 302 IF CRBE=0 THEN RETURN ELSE CLS 2 304 R$="toto" :REP=1 306 WHILE R$<>"" 308 CLS 2 :LOCATE 22,2 310 PRINT"[Directrice Homotétie Translation rOtation Miroir Retour]:"; 312 INPUT R$ 314 IF R$="D" OR R$="d" THEN GOSUB 350 :R$="" 316 IF R$="H" OR R$="h" THEN GOSUB 400 :R$="" 318 IF R$="T" OR R$="t" THEN GOSUB 430 :R$="" 320 IF R$="M" OR R$="m" THEN GOSUB 460 :R$="" 321 IF R$="O" OR R$="o" THEN GOSUB 370 :R$="" 322 IF R$="R" OR R$="R" THEN R$="" :REP=0 324 WEND 326 IF REP THEN GOSUB 725 :GOSUB 800 :SAUVEGARDE=0 ' cadrage 348 RETURN 349 ' 350 'Directrice à modifier 351 I=-1 352 WHILE I<0 OR I>POLESG-1 353 INPUT "n° de la directrice à modifier:";I :I=INT(I) 354 WEND 355 J=-1 356 WHILE J<0 OR I>POLESD-1 357 INPUT "n° du pole à modifier:";J :J=INT(J) 358 WEND 360 GOSUB 700 'saisie 368 RETURN 369 ' 370 'Rotation 371 CLS 2 372 LOCATE 22,1 :PRINT "Rotation" 373 INPUT "Axe de rotation <X Y Z>:";R$ :GOOD=0 374 IF R$="X" OR R$="x" THEN AX1=2 :AX2=3 :GOOD=1 375 IF R$="Y" OR R$="y" THEN AX1=1 :AX2=3 :GOOD=1 376 IF R$="Z" OR R$="z" THEN AX1=1 :AX2=2 :GOOD=1 377 IF GOOD=0 THEN RETURN 378 INPUT "valeur Rotation sur l'axe:";ANGLE :ANGLE=ANGLE*DEG 380 FOR I=0 TO POLESG-1 381 FOR J=0 TO POLESD-1 382 COORD1=POLD(I,J,AX1) :COORD2=POLD(I,J,AX2) 384 POLD(I,J,AX1)=COORD1*COS(ANGLE)-COORD2*SIN(ANGLE) 386 POLD(I,J,AX2)=COORD1*SIN(ANGLE)+COORD2*COS(ANGLE) 396 NEXT J 397 NEXT I 398 RETURN 399 ' 400 'Homotétie 402 CLS 2 404 LOCATE 22,1 :PRINT "Homotétie" 406 INPUT "coefficient d'homotétie:";COEFFH 408 FOR I=0 TO POLESG-1 410 FOR J=0 TO POLESD-1 412 POLD(I,J,1)=POLD(I,J,1)*COEFFH 414 POLD(I,J,2)=POLD(I,J,2)*COEFFH 416 POLD(I,J,3)=POLD(I,J,3)*COEFFH 418 NEXT J 420 NEXT I 428 RETURN 429 ' 430 'Translation 432 CLS 2 434 LOCATE 22,1 :PRINT "Translation" 435 INPUT "valeur translation X:";X 436 INPUT "valeur translation Y:";Y 437 INPUT "valeur translation Z:";Z 438 FOR I=0 TO POLESG-1 440 FOR J=0 TO POLESD-1 442 POLD(I,J,1)=POLD(I,J,1)+X 444 POLD(I,J,2)=POLD(I,J,2)+Y 446 POLD(I,J,3)=POLD(I,J,3)+Z 448 NEXT J 450 NEXT I 458 RETURN 459 ' 460 'Miroir 462 CLS 2 464 LOCATE 22,1 :PRINT "Miroir" 466 INPUT "Miroir sur l'axe [X Y Z]:";R$ :AXX=1 :AXY=1 :AXZ=1 468 IF R$="X" OR R$="x" THEN AXX=-1 470 IF R$="Y" OR R$="y" THEN AXY=-1 472 IF R$="Z" OR R$="z" THEN AXZ=-1 474 FOR I=0 TO POLESG-1 476 FOR J=0 TO POLESD-1 478 POLD(I,J,1)=POLD(I,J,1)*AXX 480 POLD(I,J,2)=POLD(I,J,2)*AXY 482 POLD(I,J,3)=POLD(I,J,3)*AXZ 484 NEXT J 486 NEXT I 498 RETURN 499 ' 500 'générer de l'ISO 502 IF CRBE=0 THEN RETURN ELSE CLS 2 504 LOCATE 22,1 :PRINT "GENERER du code CN" 505 INPUT "nom du fichier (Dos):";R$ :R$=LEFT$(R$,8)+".srf" 506 INPUT "nom du fichier (ISO> %...):";R2$ 508 INPUT "Rayon de la Fraise:";RF 510 INPUT "n° de ligne de départ [valeur]:",LIGNE 512 OPEN"o",#1,R$ 514 PRINT#1,R2$+" ( "+R$+" )":PRINT R2$+" ( "+R$+" )" 516 RESTORE 62005 518 FOR I=0 TO 9 520 READ LIGNE$ :PRINT #1,LIGNE$ :PRINT LIGNE$ 522 NEXT I 524 I=0 :J=0 :PREC=0 :TEST=1 :GOSUB 609 :TEST=0 526 IF Z3<0 THEN SIGNORM=-1 ELSE SIGNORM=1 528 FOR I=0 TO SEGMD 530 IF I=SEGMD THEN PREC=1 ELSE PREC=0 'Tangence aux bords 532 J=0 :TEST=1 :GOSUB 609 :TEST=0 534 PRINT #1,TAB(7) "(Isoparametrique:"+STR$(I)+")" 536 X$=STR$(INT(NORM(0,1)*1000)) :X$=STR$(VAL(X$)/1000) 538 IF INSTR(X$," ") THEN X$=MID$(X$,2) 540 Y$=STR$(INT(NORM(0,2)*1000)) :Y$=STR$(VAL(Y$)/1000) 542 IF INSTR(Y$," ") THEN Y$=MID$(Y$,2) 543 NUM=LIGNE :NUM$="N"+MID$(STR$(NUM),2) 544 PRINT NUM$ TAB(7) "G00 X"+X$ TAB(22) "Y"+Y$ 546 PRINT #1,NUM$ TAB(7) "G00 X"+X$ TAB(22) "Y"+Y$ 548 GOSUB 600 550 FOR J=0 TO SEGMG 552 CF=NORM(J,2)*.7 554 PSET(NORM(J,1)+CF,NORM(J,3)+CF) 556 NUM=LIGNE+J+1 :NUM$="N"+MID$(STR$(NUM),2) 558 X$=STR$(INT(NORM(J,1)*1000)) :X$=STR$(VAL(X$)/1000) 560 IF INSTR(X$," ") THEN X$=MID$(X$,2) 562 Y$=STR$(INT(NORM(J,2)*1000)) :Y$=STR$(VAL(Y$)/1000) 564 IF INSTR(Y$," ") THEN Y$=MID$(Y$,2) 566 Z$=STR$(INT(NORM(J,3)*1000)) :Z$=STR$(VAL(Z$)/1000) 568 IF INSTR(Z$," ") THEN Z$=MID$(Z$,2) 570 PRINT NUM$ TAB(7) "G01 X"+X$ TAB(22) "Y"+Y$ TAB(33) "Z"+Z$ 572 PRINT #1,NUM$ TAB(7) "G01 X"+X$ TAB(22) "Y"+Y$ TAB(33) "Z"+Z$ 574 NEXT J 576 LIGNE=LIGNE+SEGMG+2 578 PRINT#1,TAB(7) "G00 ZL1 ( Degagement )" 580 NEXT I 582 PRINT#1,TAB(7) "G77 N1 N3" 584 PRINT#1,TAB(7) "M02 (................ fin surf )" 586 DEGAG=DEGAG+1 588 D$=STR$(INT(DEGAG*1000)) :D$=STR$(VAL(D$)/1000) 590 IF INSTR(D$," ") THEN D$=MID$(D$,2) 592 PRINT#1,"N9000 (affectation des variables) 594 PRINT#1,TAB(7) "L1="+D$ :PRINT TAB(7) "L1="+D$ 596 PRINT#1,"N9999 (fin affectation) 597 CLOSE #1 598 RETURN 599 ' 600 'Normale 604 FOR J=0 TO SEGMG 606 IF J=SEGMG THEN CALCUL=0 ELSE CALCUL=1 608 WHILE CALCUL 609 '2 vecteurs au point considéré 610 X1=SURF(I-PREC,J+1,1)-SURF(I-PREC,J,1) 612 Y1=SURF(I-PREC,J+1,2)-SURF(I-PREC,J,2) 614 Z1=SURF(I-PREC,J+1,3)-SURF(I-PREC,J,3) 616 X2=SURF(I-PREC+1,J,1)-SURF(I-PREC,J,1) 618 Y2=SURF(I-PREC+1,J,2)-SURF(I-PREC,J,2) 620 Z2=SURF(I-PREC+1,J,3)-SURF(I-PREC,J,3) 622 'Produit Vectoriel 624 X3=Y1*Z2-Z1*Y2 :Y3=-(X1*Z2-Z1*X2) :Z3=X1*Y2-X2*Y1 626 MODULE=SQR(X3^2+Y3^2+Z3^2) 628 CALCUL=0 :IF TEST THEN RETURN 630 WEND 632 NORM(J,1)=SURF(I,J,1)+((X3/MODULE)*RF)*SIGNORM 634 NORM(J,2)=SURF(I,J,2)+((Y3/MODULE)*RF)*SIGNORM 636 NORM(J,3)=SURF(I,J,3)+((Z3/MODULE)*RF)*SIGNORM 637 IF NORM(J,3)>DEGAG THEN DEGAG=NORM(J,3) 638 NEXT J 648 RETURN 649 ' 650 'Ms-Dos 652 WHILE FAN=0 654 CLS 2 :CMD$="":R=0 :DOS=0 :FIC$="" :EXT$="" 656 LOCATE 22,1 :PRINT "[Chemin Lire>Iso Lire>Courbe Dos Retour]:"; 658 INPUT R$ 660 IF R$="c" OR R$="C" THEN INPUT"Chemin:";CHM$ 662 IF R$="li" OR R$="LI" THEN CMD$="EDIT/R " :EXT$=".srf" :R=1 664 IF R$="lc" OR R$="LC" THEN CMD$="EDIT/R " :EXT$=".bzr" :R=1 666 IF R$="d" OR R$="D" THEN DOS=1 :R=1 668 IF R$="r" OR R$="R" THEN FAN=1 670 WHILE R 672 IF DOS=0 THEN INPUT"nom du fichier:";FIC$ 674 CMD$=CMD$+CHM$+FIC$+EXT$ :R=0 676 IF DOS THEN INPUT"commande:";CMD$ 678 CLS 0 :VIEW PRINT 680 SHELL "dos "+CMD$ 682 GOSUB 10000 :GOSUB 950 'init écran 684 IF CRBE THEN FOR I=0 TO POLESG-1 :GOSUB 975 :NEXT I 'dessin 686 IF CRBE=0 THEN GOSUB 11000 'sigle 688 GOSUB 950 :VIEW PRINT 21 TO 24 690 WEND 692 WEND 694 FAN=0 698 RETURN 699 ' 700 'saisie d'un pole 702 CLS 2 705 PRINT "SAISIE D'UN POLE DU POLYGONE: ";"Directrice ";I;" pìle ";J 710 INPUT"X=";X :POLD(I,J,1)=X 712 INPUT"Y=";Y :POLD(I,J,2)=Y 715 INPUT"Z=";Z :POLD(I,J,3)=Z 718 RETURN 719 ' 725 'cadrage 726 GOSUB 11075 'init variables 727 FOR I=0 TO POLESG-1 728 FOR J=0 TO POLESD-1 729 X=POLD(I,J,1)+POLD(I,J,2)*.8 :IF X>XMAX THEN XMAX=X 730 IF X<XMIN THEN XMIN=X 731 Z=POLD(I,J,3)+POLD(I,J,2)*.8 :IF Z>ZMAX THEN ZMAX=Z 732 IF Z<ZMIN THEN ZMIN=Z 735 NEXT J 736 NEXT I 740 LGX=XMAX-XMIN :LGZ=ZMAX-ZMIN 742 IF LGX/LGZ>RAPP THEN Q=200/LGX ELSE Q=150/LGZ 744 DECX=(XMIN+XMAX)/2 :DECY=(ZMIN+ZMAX)/2 746 GOSUB 950 748 RETURN 749 ' 750 'écraser? 752 WHILE CRB AND SAUVEGARDE=0 755 PRINT "Sauver la Courbe précédente <O/N>:"; 757 INPUT R$ 760 IF R$="o" OR R$="O" THEN GOSUB 200 762 IF R$="n" OR R$="N" THEN SAUVEGARDE=1 767 WEND 768 RETURN 769 ' 800 'calculs des points des directrices 802 CLS 1 :CLS 2 :LOCATE 23,20 :PRINT "CALCUL DES COURBES DIRECTRICES" 804 FOR I=0 TO POLESG-1 806 FOR J=0 TO SEGMD 808 FOR K=0 TO POLESD-1 810 VECT(K,1)=POLD(I,K,1) :VECT(K,2)=POLD(I,K,2) :VECT(K,3)=POLD(I,K,3) 812 NEXT K 814 U=J/SEGMD : NBVECT=POLESD-1 816 WHILE NBVECT 818 FOR K=0 TO NBVECT-1 820 AX=VECT(K,1) :AY=VECT(K,2) :AZ=VECT(K,3) 822 BX=VECT(K+1,1) :BY=VECT(K+1,2) :BZ=VECT(K+1,3) 824 CX=AX+((BX-AX)*U) :CY=AY+((BY-AY)*U) :CZ=AZ+((BZ-AZ)*U) 826 VECT(K,1)=CX :VECT(K,2)=CY :VECT(K,3)=CZ 828 NEXT K 830 NBVECT=NBVECT-1 832 WEND 834 CRBD(I,J,1)=CX :CRBD(I,J,2)=CY :CRBD(I,J,3)=CZ 836 NEXT J 838 GOSUB 975 840 NEXT I 849 ' 850 'calculs des points des génératrices 852 CLS 2 :LOCATE 23,20 :PRINT "CALCUL DES COURBES GENERATRICES" 853 DEGAG=-9999 854 FOR I=0 TO SEGMD 857 FOR J=0 TO SEGMG 858 FOR K=0 TO POLESG-1 860 VECT(K,1)=CRBD(K,I,1) :VECT(K,2)=CRBD(K,I,2) :VECT(K,3)=CRBD(K,I,3) 862 NEXT K 864 U=J/SEGMG : NBVECT=POLESG-1 866 WHILE NBVECT 868 FOR K=0 TO NBVECT-1 870 AX=VECT(K,1) :AY=VECT(K,2) :AZ=VECT(K,3) 872 BX=VECT(K+1,1) :BY=VECT(K+1,2) :BZ=VECT(K+1,3) 874 CX=AX+((BX-AX)*U) :CY=AY+((BY-AY)*U) :CZ=AZ+((BZ-AZ)*U) 876 VECT(K,1)=CX :VECT(K,2)=CY :VECT(K,3)=CZ 878 NEXT K 879 NBVECT=NBVECT-1 880 WEND 882 SURF(I,J,1)=CX :SURF(I,J,2)=CY :SURF(I,J,3)=CZ :RF=1 888 NEXT J 889 GOSUB 990 890 NEXT I 899 ' 900 'Gestion graphique 902 IF CRBE=0 THEN RETURN ELSE DRAP=1 904 WHILE DRAP 905 FLG=1 907 WHILE FLG 910 CLS 2 912 LOCATE 22,65 :PRINT"Ech:"Q 915 LOCATE 22,2 :PRINT "[Droite Gauche Haut Bas Centre Retour] zoom:"; 917 INPUT R$ 920 IF VAL(R$)<>0 THEN Q=VAL(R$) :FLG=0 921 IF R$="a" OR R$="A" THEN AXE=1 :FLG=0 922 IF R$="d" OR R$="D" THEN D=D+49 :FLG=0 925 IF R$="g" OR R$="G" THEN D=D-49 :FLG=0 927 IF R$="h" OR R$="H" THEN H=H+38 :FLG=0 930 IF R$="b" OR R$="B" THEN H=H-38 :FLG=0 932 IF R$="c" OR R$="C" THEN H=0 :D=0 :FLG=0 935 IF R$="r" OR R$="R" THEN DRAP=0 :FLG=0 937 WEND 938 IF DRAP THEN GOSUB 950 :CLS 1 :FOR I=0 TO POLESG-1 :GOSUB 975 :NEXT I 940 IF DRAP THEN FOR I=0 TO SEGMD :GOSUB 990 :NEXT I 942 WEND 945 RETURN 949 ' 950 'window 955 WINDOW((WX1+D)/Q+DECX,(WY1+H)/Q+DECY)-((WX2+D)/Q+DECX,(WY2+H)/Q+DECY) 957 'WINDOW((WX1+DECX+D)/Q,(WY1+DECY+H)/Q)-((WX2+DECX+D)/Q,(WY2+DECY+H)/Q) 960 RETURN 969 ' 975 'dessin courbes Directrices 977 FOR K=0 TO POLESD-1 978 CF=POLD(I,K,2)*.7 980 IF K THEN LINE-(POLD(I,K,1)+CF,POLD(I,K,3)+CF),1 981 IF K=0 THEN PSET(POLD(I,K,1)+CF,POLD(I,K,3)+CF),1 982 NEXT 983 FOR K=0 TO SEGMD 984 CF=CRBD(I,K,2)*.7 985 IF K THEN LINE-(CRBD(I,K,1)+CF,CRBD(I,K,3)+CF),3 986 IF K=0 THEN PSET(CRBD(I,K,1)+CF,CRBD(I,K,3)+CF),3 987 NEXT 988 RETURN 989 ' 990 'dessin courbes Génératrices 991 FOR K=0 TO SEGMG 992 CF=SURF(I,K,2)*.7 993 IF K THEN LINE-(SURF(I,K,1)+CF,SURF(I,K,3)+CF),6 994 IF K=0 THEN PSET(SURF(I,K,1)+CF,SURF(I,K,3)+CF),6 995 NEXT K 998 RETURN 999 ' 9000 'def des tableaux 9010 IF CRBE THEN ERASE POLD,CRBD,SURF,VECT,NORM 9020 DIM POLD(POLESG,POLESD,3) 'PolesDirecteurs(nbDir,nbPoles,XYZ) 9030 DIM CRBD(POLESG,SEGMD,3) 'CourbesDir(nombre,n°segm,XYZ) 9040 DIM SURF(SEGMD,SEGMG,3) 'CourbesGén(nombre,n°segm,XYZ) 9045 IF POLESG<POLESD THEN MAXPOLES=POLESD ELSE MAXPOLES=POLESG 9050 DIM VECT(MAXPOLES,3) 'Tableau des vecteurs temporaires 9060 DIM NORM(SEGMG,3) 'Tableau des vecteurs normaux à 1 Génératrice 9080 CRBE=1 9090 RETURN 9099 ' 10000 'init écran 10010 SCREEN 9 :CLS 0 :WINDOW 10030 LINE(510,10)-(630,44),2,B 10035 LINE(510,50)-(630,270),2,B 10040 VIEW SCREEN(10,10)-(500,270),,1 10045 LOCATE 2,68 :PRINT" SURFACES" 10050 LOCATE 3,68 :PRINT"DE BEZIER" 10090 RETURN 10099 ' 11000 'sigle 11010 LOCATE 3,7 :PRINT" " 11012 LOCATE 4,7 :PRINT"OO " 11016 LOCATE 5,7 :PRINT"OOOO OOOOOOOOOOOOOO " 11018 LOCATE 6,7 :PRINT"OOOO OOOOO " 11020 LOCATE 7,7 :PRINT"OOOO OOOO " 11022 LOCATE 8,7 :PRINT"OOOO OOOO " 11024 LOCATE 9,7 :PRINT"OOOO OOO OOO OOOOOOOOOO " 11026 LOCATE 10,7 :PRINT"OOOO OOOOOOOOOOOOOO OOOO " 11030 LOCATE 11,7 :PRINT"OOOO OOOOOO " 11032 LOCATE 12,7 :PRINT"OOOO OOOOOO " 11040 LOCATE 13,7 :PRINT" OOOOOOOOOOOOOOO OOOOOOOOOOOOOO " 11044 LOCATE 14,7 :PRINT" OOOO " 11046 LOCATE 15,7 :PRINT" OOOO Moules métalliques " 11048 LOCATE 16,7 :PRINT" OOOO Structures métalliques" 11050 LOCATE 17,7 :PRINT" OOO Productique " 11052 LOCATE 18,7 :PRINT" O DAO " 11054 VIEW PRINT 21 TO 24 11075 'init variables 11080 WX1=-105 :WX2=155 :WY1=75 :WY2=-125 :PI=3.1415927# :DEG=PI/180 11085 Q=1 :DECX=0 :DECY=0 :RAPP=200/150 :D=0 :H=0 11090 XMAX=-9999 :XMIN=9999 :ZMAX=-9999 11095 YMAW=-9999 :YMIN=9999 :ZMIN=9999 11098 RETURN 60000 'traitement des erreurs 60010 VIEW PRINT:ON ERROR GOTO 0 60020 RETURN 62000 'data 62005 DATA " ( Carreau de Bezier )","" 62010 DATA "N1 G90 G80 G51X+Y+ G40 M5 M9 (securite)" 62020 DATA "N2 G52 G00 Z00" 62030 DATA "N3 G52 G00 X00 Y00","" 62035 DATA "N5 G77 N9000 N9999 (init des variables)","" 62040 DATA "N10 T01 D01 M06" 62050 DATA "N20 F100 S800 M40"