;============================================================================ ;---------------------------------------------------------------------------- ; ; fichier ***test1.ll*** ; 19.01.88 Ilog/ing bounthara ; test des primitives graphiques, chapitre 20 ; ; fichier issu dufichier: ***testgraph.ll*** ILOG ; Les principales modifications concernent l'utilisation de fenetres et ; sous-fenetres ;============================================================================ #| Test du bitmap virtuel Le-Lisp v15.2 du 1er Aout 1987 Test du chapitre 20 |# ; Les primitives graphiques ; fonctions testees ; . current-font ; . font-max ; . load-font ; . current-line-style ; . line-style-max ; . current-pattern ; . pattern-max ; . current-mode ; . current-clip ; . #:clip:x, #:clip:y, #:clip:w, #:clip:h ; ; . draw-polyline ; . draw-polymarker ; . fill-area ; . draw-substring ; . draw-ellipse ; . clear-graph-env ; ; . draw-point ; . draw-line ; . draw-rectangle ; . draw-circle ; ; . fill-rectangle ; . fill-circle ;============================================================================ ; dernier numero test : #415# ;---------------------------------------------------------------------------- (bitprologue) ;---------------------------------------------------------------------------- ; ---- loader les fichiers communs (unless (featurep 'format) (libload format)) (unless (featurep 'testcomm) (libload testcomm)) (unless (featurep 'testbvcomm) (libload testbvcomm)) ;============================================================================ ;---------------------------------------------------------------------------- ; ---- on teste les fonctions decrites dans le chaitre suivant (tycls) (tyflush) (terpri) (print " Test interactif des primitives graphiques") (terpri) (terpri) (print " 20. Les primitives graphiques") (print "----------------------------------------------------------------------------") (terpri) ;============================================================================ (sous-titre "#401# Initialisation") (verif "Fene^tre w1" '(setq w1 (create-window 'window 10 (div quarty 2) demix demiy "w1" 0 1))) (current-window w1) ; ---- (affich "(current-pattern) = 0 ?" '(current-pattern)) (affich "(current-line-style) = 0 ?" '(current-line-style)) (affich "(current-font) = 0 ?" '(current-font)) ; ---- (current-clip) (affich "#:clip:x ?" '#:clip:x) (affich "#:clip:y ?" '#:clip:y) (affich "#:clip:w ?" '#:clip:w) (affich "#:clip:h ?" '#:clip:h) ;---------------------------------------------------------------------------- (titre "#402# 20.1.1 Structure des environnements graphiques") ; ---- (affich "Nombre de polices disponibles initialement" '(add1 (font-max))) (clear-graph-env) (verif "affichage des differentes polices" '(let ((j 0)) (for (i 0 1 (font-max)) (current-font i) (draw-string 0 (add (add j (height-space)) (x-base-space)) "ABCDEFabcdef GHIJKLghijkl 0123 !@#()*") (draw-cursor 0 (add (add j (height-space)) (x-base-space)) t) (incr j (height-space))))) ; ---- (affich "Nombre de styles de lignes disponibles initialement" (add1 (line-style-max))) (clear-graph-env) (verif "Affichage des differents styles de ligne" '(for (i 0 1 (line-style-max)) (current-line-style i) (draw-line 0 0 (add 10 (mul i 10)) 200))) ; ---- (current-pattern 0) (current-line-style 0) (current-font 0) (current-mode #:mode:set) (clear-graph-env) (verif "Les 2 lignes vont delimiter la zone d'ecriture des caracteres" '(progn (draw-line 0 9 (#:window:width w1) 9) (draw-line 0 (add1 (add 9 (height-space))) (#:window:width w1) (add1 (add 9 (height-space)))))) (verif "La chaine ""ayt|jlp^*@{],"" en 10,10" '(my-draw-string 10 10 "ayt|jlp^*@{],")) ; ---- (affich "Nombre motifs de remplissage disponibles initialement" (add1 (pattern-max))) (clear-graph-env) (verif "Affichage des differents pattern" '(for (i 0 1 (pattern-max)) (current-pattern i) (fill-rectangle (mul i 10) (mul i 10) 100 100))) ; ---- (current-pattern 0) (current-line-style 0) (current-font 0) (current-mode #:mode:set) ;------------------------ (sous-titre "#403# Test des modes avec fill-rectangle") (clear-graph-env) (for (i 0 1 15) (verif (catenate " mode avec fill-rectangle = " (format () "~2,4,'0R" i)) '(progn (clear-graph-env) (current-mode 3) (draw-rectangle -1 39 161 41) (current-pattern 1) (fill-rectangle 40 40 40 40) (fill-rectangle 120 40 40 40) (current-mode i) (current-pattern 0) (fill-rectangle 0 40 80 40) (current-pattern 1) (fill-rectangle 80 40 80 40) (current-mode 3)))) ;------------------------ (sous-titre "#405# Test des modes avec fill-area") (current-pattern 0) (current-line-style 0) (current-font 0) (current-mode #:mode:set) (clear-graph-env) (print "Le test avec fill-area est effectue' avec 2 trape`zes:") (print "ces 2 trape`zes (correspondant au pattern 0 et 1) sont dessine's avec") (print "les 16 modes de combinaison sur les rectangles de pattern 0 et 1.") (for (i 0 1 15) (verif (catenate " mode avec fill-area = " (format () "~2,4,'0R" i)) '(progn (clear-graph-env) (current-mode 3) (draw-rectangle -1 39 161 41) (current-pattern 1) (fill-rectangle 40 40 40 40) (fill-rectangle 120 40 40 40) (current-mode i) (current-pattern 0) (fill-area 4 #[0 80 80 0] #[40 40 80 60]) (current-pattern 1) (fill-area 4 #[80 160 160 80] #[40 40 80 60]) (current-mode 3)))) ;------------------------ (sous-titre "#406# Test de la zone de de'coupe") (current-pattern 0) (current-line-style 0) (current-font 0) (current-mode #:mode:set) (clear-graph-env) (verif "Deux diagonales orthogonales dans un cadre (current-clip 100 100 100 100)" '(progn (draw-rectangle 100 100 100 100) (current-clip 100 100 100 100) (draw-line 0 0 300 300) (draw-line 0 300 300 0))) (print "Je teste si les valeurs de #:clip:x,y,w,h sont correctes.") (testsuite) (progn (current-clip) t) t #:clip:x 100 #:clip:y 100 #:clip:w 100 #:clip:h 100 (exit eof) () (de centre-char (x y cn) (draw-cn (add x (sub (x-base-space) (quo (width-space) 2))) (add y (sub (y-base-space) (quo (height-space) 2))) cn)) (verif "Deux diagonales orthogonales et 9 caracteres coupes dans le cadre" '(progn (centre-char 100 100 #/A) (centre-char 150 100 #/B) (centre-char 200 100 #/C) (centre-char 100 150 #/D) (centre-char 150 150 #/E) (centre-char 200 150 #/F) (centre-char 100 200 #/G) (centre-char 150 200 #/H) (centre-char 200 200 #/K))) ;------------------------ (sous-titre "#407# 20.2 Test des primitives graphiques") (current-pattern 0) (current-line-style 0) (current-font 0) (current-mode #:mode:set) (current-clip 0 0 (#:window:width (current-window)) (#:window:height (current-window))) (clear-graph-env) (verif "Dessin d'un triangle de sommet (10,10) (100,100) (200,10)" '(draw-polyline 4 #[10 100 200 10] #[10 100 10 10])) (clear-graph-env) (verif "Dessin des sommets du triangle" '(draw-polymarker 4 #[10 100 200 10] #[10 100 10 10])) (clear-graph-env) (verif "Remplissage du triangle avec le motif courant" '(fill-area 3 #[10 100 200] #[10 100 10])) (clear-graph-env) (verif "Remplissage du triangle avec le plus grand motif" '(with ((current-pattern (pattern-max))) (fill-area 3 #[10 100 200] #[10 100 10]))) (clear-graph-env) (verif "Dessin d'une ellipse de centre (120,120) et de rayons 50 et 70" '(draw-ellipse 120 120 50 70)) ;------------------------ (sous-titre "#408# 20.3.1 Test des fonctions etendues: trace de lignes") (current-pattern 0) (current-line-style 0) (current-font 0) (current-mode #:mode:set) (clear-graph-env) (verif "Une ligne de (0,0) a (50,100) en utilisant draw-point" '(for (i 0 1 50) (draw-point i (* 2 i)))) (clear-graph-env) (verif "Une ligne de (0,0) a (50,100) dans style de ligne courant" '(draw-line 0 0 50 100)) (clear-graph-env) (verif "Une ligne de (0,0) a (50,100) dans plus grand style de ligne" '(with ((current-line-style (line-style-max))) (draw-line 0 0 50 100))) (clear-graph-env) (verif "Un rectangle en (0,0) de width(w1)xheight(w1) (seult 2 cotes visibles)" '(draw-rectangle 0 0 (#:window:width w1) (#:window:height w1))) (clear-graph-env) (verif "Un rectangle en (0,0) de (w(w1)-1)x(h(w1)-1) (les 4 cotes visibles)" '(draw-rectangle 0 0 (sub1 (#:window:width w1)) (sub1 (#:window:height w1)))) (clear-graph-env) (verif "Un rectangle en (10,10) de w = 100 et h = 200" '(draw-rectangle 10 10 100 200)) (verif "Un rectangle en (20,20) de w = 10 et h = 0 (trait horiz.)" '(draw-rectangle 20 20 10 0)) (verif "Un rectangle en (20,30) de w = 0 et h = 10 (trait vert.)" '(draw-rectangle 20 30 0 10)) (verif "Un rectangle en (20,50) de w = 0 et h = 0 (point)" '(draw-rectangle 20 50 0 0)) (clear-graph-env) (verif "Un cercle de centre (100,120) de rayon 90" '(draw-circle 100 120 90)) (clear-graph-env) (verif "Dessin d'une ellipse et d'un cercle superposees" '(progn (draw-circle 100 100 100) (draw-ellipse 100 100 50 70))) ;------------------------ (sous-titre "#409# 20.3.1 Test des fonctions etendues: remplissage") (print "current-pattern = " (current-pattern 1)) (current-line-style 0) (current-font 0) (print "current-mode = " (current-mode #:mode:xor)) (clear-graph-env) (verif "Un rectangle en (10,10) de w = 100 et h = 200" '(fill-rectangle 10 10 100 200)) (verif "Un rectangle plein en (300,10) de 10x0 (vous ne devez rien voir)" '(fill-rectangle 300 10 10 0)) (verif "Un rectangle plein en (300,30) de 0x10 (vous ne devez rien voir)" '(fill-rectangle 300 30 0 10)) (verif "Un rectangle plein en (300,50) de 0x0 (vous ne devez rien voir)" '(fill-rectangle 300 50 0 0)) (verif "Un super-rectangle en (-500,-500) de w = 10000 et h = 10000" '(fill-rectangle -500 -500 10000 10000)) (clear-graph-env) (verif "Un cercle de centre (100,120) de rayon 90" '(fill-circle 100 120 90)) (clear-graph-env) (verif "Un cercle de centre (0,0) de rayon 90" '(fill-circle 0 0 90)) (verif "Un cercle de centre (100,100) de rayon 0" '(fill-circle 100 100 0)) (clear-graph-env) (verif "Remplissage d'une forme convexe avec fill-area (forme de papillon)" '(fill-area 6 #[10 60 110 110 60 10] #[10 40 10 100 70 100])) (clear-graph-env) (verif "Dessin du rectangle et du cercle superposees" '(progn (fill-rectangle 60 10 100 200) (with ((current-pattern (pattern-max))) (fill-circle 110 110 60)))) ;------------------------ (sous-titre "#410# 20.3.1 Test des fonctions etendues: affichage de texte") (current-pattern 0) (current-line-style 0) (current-font 0) (current-mode #:mode:set) (clear-graph-env) (verif "Une suite de 20 A espace' de 5 pixels" '(for (i 0 5 99) (draw-cn i 50 #/A))) (verif "Une suite de 20 B" '(draw-string 10 80 "BBBBBBBBBBBBBBBBBBBB")) ;---------------------------------------------------------------------------- ; ---- une seconde fenetre pour tester le cliping (titre "#411# Une seconde fenetre pour tester la de'coupe") (verif "Fenetre-bande w2 est cre'e'e" '(setq w2 (create-window 'window (sub (#:window:left w1) 50) (add (#:window:top w1) (div (#:window:height w1) 4)) (add (#:window:width w1) 100) (mul (div (#:window:height w1) 5) 3) "w2" 1 1))) (print "Je teste (current-clip) avec current-window=w2") (testsuite) (progn (current-window w2) (current-clip) t) t #:clip:x 0 #:clip:y 0 #:clip:w #.(#:window:width w2) #:clip:h #.(#:window:height w2) (exit eof) () (verif "w2 au dessus de w1" '(move-behind-window w1 w2)) (current-window w1) (current-pattern 0) (current-line-style 0) (current-font 0) (current-mode #:mode:set) (clear-graph-env) (quad-window1 w2) (quad-window1 w1) (setq left-w1 (#:window:left w1) top-w1 (#:window:top w1) width-w1 (#:window:width w1) height-w1 (#:window:height w1) bottom-w1 (add top-w1 (#:window:height w1)) right-w1 (add left-w1 (#:window:width w1))) ;------------------------ (sous-titre "#412# Les operations graphiques dans w1") (current-pattern 1) (affich "Nous passons en mode XOR" '(current-mode #:mode:xor)) (verif "Les diagonales de w1" '(progn (draw-line 0 0 width-w1 height-w1) (draw-line 0 height-w1 width-w1 0))) (verif "Un rectangle dans w1 (20 pixels a l'inte'rieur de w1)" '(draw-rectangle 20 20 (sub width-w1 40) (sub height-w1 40))) (verif "Un rectangle plein ""vertical"" coupant w1" '(fill-rectangle 30 -20 (sub width-w1 60) (add height-w1 40))) (verif "Un cercle plein en 0,0 de rayon width(w1)/4" '(fill-circle 0 0 (div (#:window:width w1) 4))) (verif "Une suite de 20 B en 10,10" '(draw-string 10 10 "BBBBBBBBBBBBBBBBBBBB")) ;---------------------------------------------------------------------------- ; ---- une sous-fenetre pour tester le cliping (titre "#413# Une sous-fenetre de w2") (verif "Sous-fenetre sw1 de w2 en 1/4,1/4 de 1/3x1/2" '(setq sw1 (create-subwindow 'window (div (#:window:width w2) 4) (div (#:window:height w2) 4) (div (#:window:width w2) 3) (div (#:window:height w2) 2) "sw1" 1 1 w2))) (affich "Mode set" '(current-mode #:mode:set)) (current-window sw1) (clear-graph-env) (verif "Bordure de sw1 dans sw1" '(draw-rectangle 0 0 (sub1 (#:window:width sw1)) (sub1 (#:window:height sw1)))) (verif "Une ellipse dans sw1 en (0,0) de width(sw1)/3,height(sw1)/2" '(fill-ellipse 0 0 (div (#:window:width sw1) 3) (div (#:window:height sw1) 2))) (verif "Une suite de 20 B en -10,10" '(draw-string -10 10 "BBBBBBBBBBBBBBBBBBBB")) (current-window w2) (verif "Bordure de sw1 dans w2" '(draw-rectangle (sub1 (#:window:left sw1)) (sub1 (#:window:top sw1)) (add (#:window:width sw1) 1) (add (#:window:height sw1) 1))) (verif "Les 2 diagonales de w2" '(progn (draw-line 0 0 (#:window:width w2) (#:window:height w2)) (draw-line 0 (#:window:height w2) (#:window:width w2) 0))) (current-window sw1) (verif "clear sw1" '(clear-graph-env)) (current-window w1) (verif "clear w1" '(clear-graph-env)) ;---------------------------------------------------------------------------- (titre "#415# Effacement des fenetres") (clear-graph-env) (verif "w1 est tue'e" '(kill-window w1)) (verif "w2 est tue'e" '(kill-window w2)) ;---------------------------------------------------------------------------- (titre "Fin du test des primitives graphiques") ;---------------------------------------------------------------------------- (terpri) (terpri) (terpri) (bitepilogue) (setq automatic ()) ;---------------------------------------------------------------------------- ;============================================================================