Home
manuel d`installation, d`aide à la programmation et d`utilisation du
Contents
1. DEF POINT gt elseif iChoix 2 then call glutSetWindow imainWin call glutmousefunc sourisInfoPoint call glutSetWindow icom Win ANNEXE B FICHIER PIECE F90 91 call glutdisplayfunc comDisplayInfoPoint call glutPostRedisplay l ZOOM APA elseif iChoix 3 then lon passe dans le mode zoom bzoom TRUE variable du module varAffichage call sauvZoom lon affiche l aide au zoom Idans la fen tre de commentaire call glutSetWindow icom Win call glutdisplayfunc comDisplayZoom call glutPostRedisplay call glutSetWindow imainWin call glutmousefunc zoomSouris EE ZOOM ARRIERE o elseif iChoix 4 then call restaurZoom lon recadre call cadre lon rafraichit la fen tre d affichage call glutSetWindow imainWin call glutPostRedisplay AO FIN ZOOM elseif iChoix 5 then lon sort du mode zoom bzoom FALSE call remetInit Zoom lon change l affichage des commentaires ANNEXE B FICHIER PIECE F90 92 els call glutSetWindow icomWin call glutdisplayfunc comDisplayPiece call glutPostRedisplay lon recadre call cadre lon rafraichi la fen tre d affichage call glutSetWindow imainWin call glutPostRedisplay FIN I eif iChoix 6 then Ifen tre de commentaire call glutSetWindow icomWin l attachement du callback d affichage de l appelant call glutdisplayfunc comDisplayAppelant lon raffiche la fen tre Ipour afficher
2. dans le programme l le type des variables implicite doit l tre mis dans chaque nouveau module let ou subroutine IMPLICIT DOUBLE PRECISION A H O Z REALx4 PI ZERO UN DEUX TROIS QUATRE CINQ SIX PARAMETER P1I 3 141592654E 00 CHAPITRE 3 AIDE LA PROGRAMMATION 18 PARAMEIER ZERO 0 E 00 UN 1 E 00 DEUX 2 E 00 amp amp TROIS 3 E 00 QUATRE 4 E 00 amp amp CINQ 5 E 00 SIX 6 E 00 end module init Dans le fichier xxx f90 qui utilise une variable contenue dans init il faut remplacer INCLUDE INIT SDD par USE INIT Le fichier GKSGKS SDD a t remplac par le module varaffichage dans le fichier varaffichage f90 3 3 3 organisation Toutes les bo tes cr es jusqu alors ont une m me organisation Si l on prend un fichier xxx f90 ou f selon votre pr f rence j ai pour ma part utilis 90 pour une raison de compilateur et aussi pour signaler qu on fait du fortran 90 A vous de voir cela ne change rein il est compos de un module module callbacks Xxx qui contient le coeur de la bo te XXX une subroutine subroutine xxx qui permet de faire l initialisation cf ci apr s Dans notre exemple cela donne module callbacksPiece end module callbacksPiece subroutine PIECE end subroutine PIECE 3 3 4 initialisation C est la premi re partie constituant une boite Nous ne tenons pas compte des initialisations inh rente
3. TABLE DES MATI RES 3 5 conseils mise en garde 3 5 1 variables 3 5 2 fen tre courante 3 5 3 rafra chissement A compl ment sur l installation POM HITE st a en bete SENTE Lee E A et ne nette A ae pes A INS A ue ee sec tact ee ae Le Pot x PSP ni Key eset cg A aa ae B fichier piece f90 C fichier despiece f90 D corps des m thodes de zoom DEL ZooM o oe ka aR RS ON ce A ae te Gee eae Qu Wee CCUM MI ep au taht ne A ee OR oe SE oak ae eS Table des figures 3 1 tableau de correspondance valeur gt couleur 3 2 tableau de correspondance GKS gt openGL Chapitre 1 Installation 1 1 Linux 1 1 1 installation Ce document contient une description simplifi e des tapes suivre pour installer la librairie f90gl permettant de faire de l openGLavec le langage fortran 90 Il n est ni complet ni parfait ni exhaustif Si vous d sirez plus d informations reportez vous la documentation en ligne http math nist gov f90gl documentation html Vous pouvez t l charger les tar gz sur le site de la librairie http math nist gov f90gl software html requit Sur votre machine doivent tre install s les paquets de d veloppement des librairies suivantes X11 MesaGl ou autre distribution que Mesa MesaGlu ou autre que Mesa Attention il ne faut pas installer de librairie Glut ceci provoque
4. clic hors cadre else write 6 coordonn es du point write 6 X xreel Y yreel les points sont dessin s sur 3 pixels call glPointSize TROIS les points sont dessin s en rouge call choixCouleur KV2 les points sont dessin s dans la fen tre principale call glutSetWindow imainWin l dessin du point call glBegin GL POINTS call glVertex3d xreel yreel 0 0 gldouble call glEnd lon notera que ce point n tant pas dessiner dans une subroutine de callback ne sera pas Ir affich avec la fen tre end IF end if end subroutine sourisInfoPoint CHAPITRE 3 AIDE LA PROGRAMMATION 39 3 4 7 zoom Pour pouvoir faire un zoom un zoom arri re arr ter de zoomer il faut modifier le menu et le callback de menu Premi rement il faut rajouter dans le menu 3 item zoom zoom arri re fin zoom En fait il s agit de compl ter la cha ne STR avant de l appel la subroutine MENU cf section 3 3 4 page 19 Si nous reprenons notre exemple de la pi ce subroutine menuPiece iChoix use varAffichage integer intent in iChoix if ichoix 1 then ZOOM J elseif iChoix 3 then lon passe dans le mode zoom bzoom TRUE variable du module varAffichage call sauvZoom lon affiche l aide au zoom Idans la fen tre de commentaire call glutSetWindow icomWin call glutdisplayfunc comDisplayZoom call glutPostRedisplay call glutSet Window imainWin call glut
5. C6 amp WXMIN WXMAX WYMIN WYMAX ANNEXE D CORPS DES M THODES DE ZOOM 99 end if if IOK 0 then plusieur cas d erreur possible gt nouveau if lun erreur c est poduite lors de l allocation on arr te pas le programme on ne stock pas le zoom pr dent write 6 impossible de sauvegarder le zoom end if end if end subroutine restaurZoom subroutine remetInitZoom use callbacksPiece use varAffichage Ice module inclut OPENGL SDD IMPLICIT DOUBLE PRECISION A H 0 7 REAL KIND GLFLOAT DIMENSION ALLOCATABLE svgCoordCadres integer iok lon remet le zoom initiale if SIZE coordCadres DIM 1 gt 1 then WXMIN coordCadres 1 1 WYMIN coordCadres 1 2 WXMAX coordCadres 1 3 WYMAX coordCadres 1 4 lon supprime les zoom sauvegard if SIZE coordCadres DIM 1 gt 2 then if allocated svgCoordCadres then deallocate svgCoordCadres end if lon a plus qu un seul zoom a sauvegarder allocate svgCoordCadres 1 4 STAT IOK if allocated coordCadres then deallocate coordCadres end if allocate coordCadres 1 4 SSTAT IOK coordCadres svgCoordCadres ANNEXE D CORPS DES M THODES DE ZOOM deallocate svgCoordCadres end if end if end subroutine remetInitZoom subroutine finZoom use callbacksPiece use varAffichage Ice module inclut OPENGL SDD IMPLICIT DOUBLE PRECISION A H 0 Z7 REAL KIND GLFLOAT DIMENSION ALLOCATABLE integer iok lon supprime
6. attach lau bouton droit de la souris l avant de la supprimer lil faut le d tacher de ce bouton call glutDetachMenu GLUT RIGHT BUTTON destruction du menu call glutDestroyMenu glutGetMenu end if 4 restaurer le menu de l appelant Pour restaurer le menu de l appelant il suffit de le fixer dans la fen tre courante lon doit tre sur la fen tre de menu le menu de l appelant In a pas t d truit donc il suffit Ide le fixer la fen tre call glutSetMenu imenuAppelantPiece lon attache le menu courant qui est maintenant celui de l appelant sur le bouton droit de la souris call glutAttachMenu GLUT RIGHT BUTTON Maintenant que vous avez fait votre bo te il ne vous reste plus qu Pinclure dans le Makefile pour qu elle se compile avec le reste du logiciel et que vous puissiez ainsi l utiliser Pour savoir comment faire reportez vous la section 3 1 page 13 3 4 Explication des points r currents 3 4 1 cadre Pour recadrer la fen tre d affichage il faut modifier les valeurs de WXMIN WYMIN WXMAX et WYMAX puis appeler la subroutine cadre WXMIN 0 WYMIN 0 CHAPITRE 3 AIDE LA PROGRAMMATION 27 WXMAX 10 WYMAX 20 CALL CADRE la fen tre est maintenant recadr e Ison coin inf rieur gauche a pour coordonn es 0 0 Ison coin sup rieur droit a pour coordonn es 10 20 3 4 2 couleurs openGLutilise une variable d tat pour la gestion de la couleur C e
7. de l utilisateur dans la fen tre d affichage Premi rement il faut fixer la fen tre de commentaire comme tant la fen tre courante puis crire le texte sinon il s afficherai dans la fen tre principale 3 5 3 rafra chissement Avant de redessiner une fen tre il est obligatoire de l effacer pour vider les tampons de couleurs ceci permet de ne pas utiliser de la m moire inutilement Dans ce logiciel une subroutine a t cr e pour que cela soit plus lisible ainsi pour effacer une sous fen tre commentaire menu ou principale il faut faire appel la subroutine efface Ipour la fen tre de commentaire call efface com Ipour la fen tre principale ou d affichage call efface main nour la fen tre de menu call efface menu Une autre subroutine a t cr e pour dessiner le contour d une sous fen tre en bleu pour pouvoir d limiter les sous fen tres Ipour la fen tre de commentaire call desContourFenetre com Ipour la fen tre principale ou d affichage Cela n apporte rien De plus pour pouvoir utiliser la subroutine desContourFenetre il faudrait recadrer entre 1 et 1 Ipour la fen tre de menu call desContourFenetre menu Pour demander le rafra chissement d une fen tre il faut utiliser la subroutine glutPostRedisplay Ceci permet de noter la fen tre comme tant rafra chir au prochain tour de la boucle d affichage CHAPITRE 3 AIDE LA PROGR
8. le bon commentaire call glutPostRedisplay Ifen tre principale call glutSetWindow imainWin call glutdisplayfunc mainDisplayAppelant call glutPostRedisplay lon se met sur la fen tre de menu call glutSetWindow imenuWin lon ne peut supprimer le menu courant lque s il xiste vite les crashs if glutGetMenu 0 then le menu tait attach lau bouton droit de la souris l avant de la supprimer lil faut le d tacher de ce bouton call glutDetachMenu GLUT RIGHT BUTTON destruction du menu ANNEXE B FICHIER PIECE F90 93 call glutDestroyMenu glutGetMenu le menu de l appelant n a pas t d truit donc il suffit de le fixer la fen tre call glutSetMenu imenuAppelantPiece lon attache le menu courant qui est maintenant celui de l appelant sur le bouton droit de la souris call glutAttachMenu GLUT RIGHT BUTTON end if endif end subroutine menuPiece end module callbacksPiece SUBROUTINE PIECE use opengl glut le module callbacksPiece contient les callbacks d affichage la variable permettant de sauver le menu de l appelant use callbacksPiece Icontient les identifiant des fen tre use varAffichage use plast2 IMPLICIT DOUBLE PRECISION A H 0 Z7 Integer DIMENSION 1 20 IA Character 256 STR Integer NBCHOIX NBCHOIX 6 STR CONTOURDEF POINTZOOMZOOM ARRIEREFIN ZOOMFIN IA 1 7 ANNEXE B FICHIER PIECE F90 94 lon affiche la pi ce num ro dans notre ex
9. le texte en rouge l la ligne 3 et dans la colonne 2 call ectxColoneCouleur 3 2 13 col 2 KV2 criture dans la fen tre principale Pour crire le texte txt en couleur dans la fen tre principale avec pour coordonn es xt yt coordonn es dans le rep re de base utilisez la m thode ectxMainCouleur txt xt yt kcoul Vous pourrez trouver le corps des m thodes d criture se trouve dans l annexe D 2 page 60 3 4 5 menu Lorsque l utilisateur effectue un choix dans le menu le callbacks de menu est appel Reportez vous la section 3 3 4 page 19 pour savoir comment attacher un callbacks de menu une fen tre Quand le callbacks est appel le param tre iChoix a la valeur de l item s lectionn dans le menu Ainsi pour savoir quelle action effectuer il suffit de faire un test sur le param tre iChoix Dans notre exemple voil ce qu on obtient subroutine menuPiece iChoix integer intent in iChoix if ichoix 1 then call contour elseif ichoix 2 then CHAPITRE 3 AIDE LA PROGRAMMATION 33 endif end subroutine menuPiece 3 4 6 souris Comme nous l avons vu dans la section 3 3 5 le callback de gestion de souris est appel quand l utilisateur presse et ou rel che un des 3 boutons dans la fen tre Les coordonn es du point cliqu sont en coordonn es relatives il faut donc les convertir en coordonn es r elles Il faut ensuite appliquer les transformations inverses sur ces nouvell
10. svgCoordCadres pour tre sur Ide ne pas avoir de probl me d allocation dynamique if allocated svgCoordCadres then deallocate svgCoordCadres end if lon aloue svgCoordCadres avec la nouvelle taille allocate svgCoordCadres iTaille 4 STAT IOK if IOK 0 then 56 svgCoordCadres ANNEXE D CORPS DES M THODES DE ZOOM 97 lon a put alouer la m moire on copie le tableau coordCadres svgCoordCadres coordCadres lon d saloue coordCadres deallocate coordCadres lon alloue coordCadres avec la nouvelle taille allocate coordCadres iTaille 4 STATIOK lon recopie le tableau svgCoordCadres Idans le tableau coordCadres coordCadres svgCoordCadres lenfin on d salour svgCoordCadres qui est maintenant deallocate svgCoordCadres end if else Ic est le premier zoom iTaille 1 allocate coordCadres 1 4 SSTAT IOK end if if IOK 0 then lon a put augmenter la taille du Itableau de sauvegarde des coordonn es lon remplis la derni re ligne du tableau avec les coordonn es acutelles Ifen tre coordCadres iTaille 1 WXMIN coordCadres iTaille 2 WYMIN coordCadres iTaille 3 WXMAX coordCadres iTaille 4 WYMAX furite 65 taille iTaille sauv 8 168 coordCadres iTaille 1 coordCadres iTaille 2 6 6coordCadres iTaille 3 coordCadres iTaille 4 end if if IOK 0 then Iplusieur cas d erreur possible gt nouveau if lun erreur c est poduite lors de l allocation on arr te p
11. trage est plus ou moins identique celui du Makefile permettant de compiler les librairie f90gl Si vous avez install glut3 7 et f90gl 1 2 11 dans votre r pertoire de travail alors modifiez uniquement la variable REP TRAVAIL Remplacez home mlouvel par votre r pertoire de travail Il ne vous reste plus qu renseigner le nom du compilateur que vous utilisez en modifiant la variable F90 Remplacez ifort par votre compilateur Vous pouvez aussi modifier les flags de compilation par exemple pour optimiser le code produit Pour cela modifiez la variable FIOFLAGS 1 2 Autres syst mes d exploitation Faute de temps le programme n a put tre test sous d autres syst mes windows sun Hp Le code openGLest portable de m me que le fortran de plus la librairie f90gl est dite portable ainsi le passage sur un autre syst me ne devrait pas poser de probl me Pour installer les librairies glut3 7 f90gl 1 2 11 r f rez vous directement au site de la librairie f90gl http math nist gov f90gl Chapitre 2 Utilisation 2 1 menu Pour utiliser le menu cliquez sur le bouton droit dans la fen tre de menu et relachez sur l item de votre choix Une fois qu un choix a t fait dans le menu il est conserv tant que l on n a pas fait d autre choix Par exemple si on choisi d finition d un point dans le menu ceci permet de cliquer sur un point pour avoir ses informations on peut cliquer sur p
12. AMMATION 38 Il est conseill d utiliser cette m thode plut t que d appeler directement le callback d affichage Cependant dans certains cas on a besoin d un rafra chissement imm diat Par exemple pour une fen tre de commentaire indiquant l utilisateur d aller faire une saisie en console imm diatement suivi d un read 5 Dans ce cas il faut uniquement quelques instruction machine pour que le read 5 soit fait ce qui emp che le rafra chissement de se faire temps temps lt quelques micros voir nanosecondes selon la puissance de l ordinateur Annexe compl ment sur l installation A 1 glut3 7 A 2 f90gl A 2 1 INSTALL Voici le fichier INSTALL fournis par les d vellopeurs de la librairie f901 il contient des explication plus compl te sur la marche suivre pour installer la librairie This file contains instructions for building and installing the f90gl libraries Check the f90gl web page http math nist gov f90glforthe latest information makefiles for additional systems etc Look under the list of Unix workstations or list of Windows 95 NT systems for the status of systems that don t work at the time of this release Look under Software for additional makefiles Look under News for general announcements Table of Contents GLUT system code fpp preprocessor file makefile compile and install test system specific notes Noo PR Wn 39 ANNEXE A COMPLEMENT SUR L INSTAL
13. GL 2 YTOGL 2 0 0 gldouble call glVertex3d XTOGL 3 YTOGL 3 0 0 gldouble call glVertex3d XTOGL 4 YTOGL 4 0 0 gldouble call glEnd quivalent GKS CALL GPL KV5 XTGKS YTGKS avec 5 points dans XTGKS et YTGKS le dernier gal au premier trac d un quadrilataire plein On a la encore besoin de 4 sommets et on dessine un GL QUADS avec quatre sommets call glBegin GL QUADS call glVertex3d XTOGL 1 YTOGL 1 0 0 gldouble call glVertex3d XTOGL 2 YTOGL 2 0 0 gldouble call glVertex3d XTOGL 3 YTOGL 3 0 0 gldouble call glVertex3d XTOGL 4 YTOGL 4 0 0 gldouble call glEnd trac d une ligne On peut tracer une ligne entre 2 sommets ou plus les lignes se faisant dans l ordre d apparitions des sommets On dessine un GL_ LINES call glBegin GL LINES call glVertex3d XTOGL 1 YTOGL 1 0 0 gldouble call glVertex3d XTOGL 2 YTOGL 2 0 0 gldouble call glEnd quivalent GKS CALL GPL KV5 XTGKS YTGKS avec 2 points dans XTGKS et YTGKS trac d un point On peut tracer un ou plusieurs point s l aide de GL_ POINTS call glBegin GL_POINTS call glVertex3d XTOGL 1 YTOGL 1 0 0 gldouble call glEnd quivalent GKS CALL GPL KV5 XTGKS YTGKS avec 1 point dans XTGKS et YTGKS De plus on a pas choisir la forme du point comme dant GKS trac d un triangle On peut tracer un triangle l aide de GL_ TRI ANGLES call glBegin GL TRIANGLES call glVertex3d
14. LATION 40 all systems NASoftware Lahey DVF Salford XLF Digital Fortran on Digital Unix Pacific Sierra gfortran 1 GLUT You need version 3 7 or later of GLUT Build GLUT as per the usual instructions in the GLUT distribution but be certain to copy both glut h and glutf90 h to an include GL directory It seems the confusion of GLUT 3 7 versions will never be straightened out There are early versions of GLUT 3 7 still around and in some very popular places like Red Hat rpms These early 3 7 beta versions will not work with f90gl The correct versions of GLUT will have GLUT_XLIB_IMPLEMENTATION 14 or larger in glut h If you are not certain that you have the correct version of GLUT you should obtain GLUT from the f90gl web page http math nist gov f90gl It is available in tar gz and zip formats and precompiled for Windows The GLUT home page is http reality sgi com opengl glut3 glut3 html 2 system code Makefiles are provided for all systems on which f90gl has been tested To keep the names within the 8 3 naming convention a 4 or 5 character code is assigned to each system configuration These characters designate the hardware operating system Fortran compiler OpenGL and optionally special designations For example s4nm is the code for a Sun workstation with SunOS 4 x the NAGware compiler and Mesa Look in the file mf keys to determine the code for your system If you do not fin
15. UX i rix l Linux n Windows NT s Solaris v OpenVMS x MacOS X 3 f90 compiler a NASoftware b Absoft c Pacific Sierra d Compaq formerly Digital Fortran e EPC f F g SGI h HP i Intel ANNEXE A COMPLEMENT SUR L INSTALLATION 46 j Fujitsu including Lahey Fujitsu on Windows l Lahey m Microsoft n NAGWare o Salford p PGI s SunSoft t PathScale u Gnu g95 and gfortran add 2 for gfortran v CVF formerly DVF x xlf90 4 Opengl m Mesa n NVidia o Native OpenGL t MetroLink OpenGL for Linux s SGI OpenGL for Windows 5 misc special designations a Linux a out binaries 1 SunSoft versions before 2 0 2 SunSoft version 2 0 or later 2 Gnu gfortran as opposed to g95 3 SGI n32 6 SGI 64 6 Intel ifc versions before 7 0 7 Intel ifc version 7 0 or later b Borland C compiler on Windows Annexe B fichier piece f90 module callbacksPiece use varAffichage use plast2 IMPLICIT DOUBLE PRECISION A H 0 Z7 Integer imenuAppelantPiece contains subroutine mainDisplayPiece CALL DESPIECE end subroutine mainDisplayPiece subroutine comDisplayPiece use plast2 character TEXT 80 TEXT6 6 integer NOZODI Ipermet d effacer la fen tre lil faut appel cette m thode l chaque fois si on ne veut pas l avoir un r sultat tr s trange call efface com dessine les contour de la sous fen tre en bleu 47 ANNEXE B FICHIER PIECE F90 48 call desContourFenetre com NOZODI 2 WRITE TE
16. Win call glutdisplayfunc comDisplayPiece lon r affiche la fen tre lune fois qu elle est initialis e call glutPostRedisplay Ipour la fen tre de commentaire call glutSet Window imainWin call glutdisplayfunc mainDisplayPiece call glutPostRedisplay L in initialisation END SUBROUTINE PIECE Aller voir la section 3 5 3 pour avoir des pr cisions sur les callbacks de r affichage des fen tres En fait la subroutine PIECE est maintenant termin e il s agit d crire CHAPITRE 3 AIDE LA PROGRAMMATION 23 les callbacks La subroutine PIECE sert uniquement l initialisation 3 3 5 callbacks affichage Il est important de garder l esprit quel moment une fen tre est rafraichie Ceci impose certaines contraintes dans la programmation Notamment cela oblige attacher un callback pour un affichage qui doit durer En effet la fen tre se r affiche quand vous lui demandez voir ci apr s quand elle retrouve le focus c est dire qu elle n tait pas en premier plan et repasse en premier plan suite un clic par exemple quand elle est d plac Ainsi si on ne met pas de callback pour afficher quelque chose cela peut tr s bien dispara tre sans qu on l ai d sir si l utilisateur va par exemple faire une saisie dans la console Cependant si on peut viter d utiliser les callbacks cela permet de gagner du temps et de la m moire Par exemple quand l utilisateur doit fair
17. XT6 16 NUMPI TEXT DESSIN du BODY num TEXT6 l crit le TEXT en blanc dans la ligne NOZODI de la fen tre de commentaire CALL ECTX NOZODI TEXT end subroutine comDisplayPiece subroutine comDisplayInfoPoint character TEXTx80 integer NOZODI call efface com call desContourFenetre com NOZODI 2 TEXT cliquez sur un point du maillage amp amp pour avoir ses coordonn es CALL ECTX NOZODI TEXT end subroutine comDisplayInfoPoint subroutine sourisInfoPoint button state x y Coordronn s fen tre WXMIN WYMAX use varAffichage l etat et bouton use opengl glut Isubroutine de dessin use opengl gl Icertaines constante use init l utilisation des couleurs use couleur integer glcint intent inout button state x y real kind gldouble xreel yreel xcr ycr xcw ycw lon ne traite que l enfoncement du bouton gauche if state GLUT DOWN AND amp amp button GLUT LEFT BUTTON then ANNEXE B FICHIER PIECE F90 49 l centre de la fen tre I en tenant compte des sous fen tres ces coordonn es sont r elles Idans le rep re cran XCW 0 99 0 50 2 YCW 0 99 0 50 2 centre de la figure en coordonn e r elles dans le rep re de base XCR WXMAX 2 YCR WYMAX 2 Ix et y sont en coordonn es relatives par rapport au coin sup rieur gauche Ide la fen tre principale conversion des coordonn es en coordonn e
18. XTOGL 1 YTOGL 1 0 0 gldouble call glVertex3d XTOGL 2 YTOGL 2 0 0_ gldouble call glVertex3d XTOGL 3 YTOGL 3 0 0 gldouble CHAPITRE 3 AIDE LA PROGRAMMATION 30 call glEnd quivalent GKS CALL GFA KV3 XTGKS YTGKS avec 3 points dans XTGKS et YTGKS mise jour Les points cit s pr c demment s appliquent bien entendu Quelques modification suppl mentaire sont apporter Les appels GKS sont remplacer videments ceci est expliqu dans ce qui suit pour chaque appel pr sent on donnera son quivalent GKS en italique Pensez aussi utiliser des gldouble pour XTOGL et YTOGL pour viter de faire hurler le compilateur real kind gldouble XTOGL 4 YTOGL 4 modification de l paisseur d une ligne d un point On peut modifier l paisseur d une ligne ou d un point le nombre de pixels utilis s pour repr senter ce point ou les points de la ligne Par d faut la taille d un point est fix 1 pixel les prochains points affich s Iseront sur 3 pixels call glPointSize 3 les points des prochaines lignes affich es Iseront sur 3 pixels call glLineWidth 3 Vous trouverez dans le tableau 3 2 un r capitulatif des changement faire pour passer des appels GKS aux appels openGL On ne mentionnera que le type d objet dessiner d finit par glBegin car le reste est identique 31 CHAPITRE 3 AIDE LA PROGRAMMATION TOuodo lt SYN oouepuodsor109 op n
19. a commande gt make f mfxxxx o gt XXXX repr sente le code syst me Dans notre exemple nous tapons la commande make f mf8lim7 Si vous avez une erreur vous indiquant qu une librairie X11 n a pas put tre link il mest arriv d avoir ce probl me pour IXaw cela vient probablement d un probl me d installation Vous pouvez essayer d enlever cette librairie qui n est pas indispensable car dans le logiciel prplast2 nous n utilisons pas toutes les fonctionnalit s d openGL Erreur renvoy e par le compilateur usr bin ld ne peut trouver IXaw Cependant faites attention Il est pr f rable de v rifier l installation des librairies Si vous tes arriv ici les librairies de f90gl devraient avoir compil es avec quelques warning s rement mais Donc derni re tape de l installation CHAPITRE 1 INSTALLATION 9 v rifiez que les librairies aient bien t compil es dans le r pertoire rep Travail f90gl 1 2 11 lib vous devriez avoir les trois fichiers suivant libf90GL a libf90GLU a libf90glut a Si ceuxci sont pr sents vous pouvez passer a la compilation du logiciel 1 1 2 compilation du logiciel prplast2 Nous vous proposons un Makefile permettant de compiler tout le logiciel en une seul commande Il n cessite d tre l g rement param tr R f rez vous la section 3 1 page 12 pour savoir comment bien utiliser et mettre jour ce Makefile En fait le param
20. aque clic cette m thode est appel e 2 fois Icar opengl fait la diff rence entre Il enfoncement et le rel chement du bouton Ipour plus de d tails reportez vous la section gestion de souris end subroutine gestionSouris CHAPITRE 3 AIDE LA PROGRAMMATION 16 subroutine init lon travail sur la fen tre principale call glutSetWindow imainWin l attachement du callback gestionSouris call glutmousefunc gestionSouris end subroutine init 3 3 Cr ation d une bo te Cette section d crit le protocole suivre pour cr er une bo te Il s agit de cr er une bo te partir de rien Cependant nous expliqueront en parall le la mise jour d une bo te existante Cette section s appuiera sur un exemple de bo te simplifi e piece qui affiche un body et permet d afficher son contour de cliquer sur un point pour afficher ses informations d effectuer des actions de zoom et de revenir au menu pr c dent ou menu appelant 3 3 1 changements effectu s depuis la version GKS Ce premier point est consacr aux modifications qui ont t apport es par rapport l ancienne version du logiciel avant le passage openGL NUMPI NOPIECE NELPI ces variables ont t mises dans la module plast2 il ne faut donc plus les passer en param tre mais utiliser le module plast2 WXMIN WYMIN WXMAX WYMAX ces variables ont t mises dans le module varaffichage Il n est pas n cessaire d
21. as le programme on ne stock pas le zoom pr c dent write 6 impossible de sauvegarder le zoom end if end subroutine sauvZoom ANNEXE D CORPS DES M THODES DE ZOOM 98 subroutine restaurZoom use callbacksPiece use varAffichage Ice module inclut OPENGL SDD IMPLICIT DOUBLE PRECISION A H 0 Z7 REAL KIND GLFLOAT DIMENSION ALLOCATABLE svgCoordCadres integer iTaille iok lil faut restaurer le cadre courant iTaille SIZE coordCadres DIM 1 lon v rifie que l on est pas revenu au zoom initial if write 05 test itaille iTaille iTaille gt 1 then if allocated svgCoordCadres then deallocate svgCoordCadres end if lon cr e un tableau avec un l ment de moins allocate svgCoordCadres iTaille 1 4 STAT IOK if IOK 0 then lon peut sauvegarder le zoom pr dent svgCoordCadres coordCadres lon enl ve le zoom courant du tableau iTaille iTaille 1 if allocated coordCadres then deallocate coordCadres end if lon recopie le tableau sauvegard sans le zoom courant Idans le tableau de zoom allocate coordCadres iTaille 4 STATIOK coordCadres svgCoordCadres deallocate svgCoordCadres lon restaure les coordonn es de la fen tre lavec le dernier l mentdu tableau WXMIN coordCadres iTaille 1 WYMIN coordCadres iTaille 2 WXMAX coordCadres iTaille 3 WYMAX coordCadres iTaille 4 furite 6 taille iTaille restaur
22. d a preprocessor file and makefiles for your system you should find a similar system and make your own files using the files for that system as a starting point If you have success with a new system and would like to share your makefiles and preproccessor file with other users send email to william mitchell nist gov 3 fpp preprocessor file f00gl uses a simple preprocessor for conditional compilations to handle differences in the OpenGL version supported extensions ways that ANNEXE A COMPLEMENT SUR L INSTALLATION 41 Fortran and C interface limitations in the subset languages and compiler bugs The directory f90gl fppincs contains files of definitions for the preprocessor for each system The names of these files are of the form fppxxxx where xxxx is the system code described above There is also a file fppnada which is used by systems that do not need any information in this file As of version 1 2 6 the remainder of this section is relevant only to MS Windows systems except for the last paragraph Identify the fpp file for your system or create one from the file for a similar system Then verify that the define statements are correct for your system There are three sets of these OpenGL version extensions and special system designations You must first identify the OpenGL version and extensions supported by your OpenGL library To do this look at the file include GL gl h To determine your OpenGL version look for t
23. des conflit avec celle que vous allez installer Vous devez aussi poss der un compilateur fortran g95 de la GNU ifort d Intel et un compilateur C gcc de la GNU CHAPITRE 1 INSTALLATION 5 Glut3 7 T l chargez la version de Glut3 7 disponible sur le site de la librairie f90gl http math nist gov f90gl software html D compressez ce fichier dans r pertoire de travail gt cd home mlouvel amp amp tar zxf glut 3 7 1 tar gz Rentrez ensuite dans le r pertoire qui vient d tre cr gt cd glut 3 7 1 Nous utiliserons ici le script imakes pour utiliser le script sgi gt reportez vous la documentation associ e gt mkmkfiles imake Ne pas s inqui ter s il y a une erreur disant que le r pertoire progs n existe pas car il n y en a pas Ensuite compilez la librairie Glut3 7 gt make Idem si la m me erreur survient pas d inqui tude Pour v rifier que la librairie a bien t compil e vous pouvez v rifier que r pertoire le lib glut contient bien le fichier libglut a gt Is lib glut ou encore gt ls lib glut grep libglut a Si vous avez bien ce fichier alors vous pouvez passer l tape suivante compilation des librairies de f90gl f90g1 T l chargez la version de f90gl disponible sur le site de la librairie f90gl http math nist gov f90gl software html D compressez ce fichier dans votre r pertoire de travail gt cd ho
24. dessiner une ligne il en faudrait 2 lun carre 4 ete call glVertex3d X Y 0 0 gldouble lon finit le dessin de la forme call glEnd glVertex3d gl signifie que la subroutine appartient au module openGL _ gl faisant le lien avec la biblioth que en langage C libgl c est le m me principe pour les subroutines des librairies glut et glu Vertex repr sente un sommet 3 signifie que l on dessine dans un rep re x y z d signifie que les coordonn s sont donn es par un r el de type gldouble avec double pr cision pour un r el simple utilisez f Pour crire une valeur constante sous la forme d un gldouble pour viter une erreur de compilation lors de l appel glVertex3d il faut rajouter _ gldouble apr s le r el Par exemple 9 5 gldouble liste non exhaustive des formes dessiner Pour avoir des images du code fournis vous pouvez vous rendre sur le site suivant http raphaello univ fcomte fr 1G OpenGL OpenGL 1 htm trac du contour d un quatrilataire avec openGLon a besoin des 4 sommets dont les coordonn s sont XTOGL 1 YTOGL 1 XTOGL 4 YTOGL 4 On a donc pas besoin d un cinqui me sommet gal au premier comme c tait le cas pour GKS GL_LINE_LOOP permet de rajouter un trait lentre le dernier et le premier point call glBegin GL LINE LOOP CHAPITRE 3 AIDE LA PROGRAMMATION 29 call glVertex3d XTOGL 1 YTOGL 1 0 0 gldouble call glVertex3d XTO
25. e 2 clic souris pour d finir le 1 et le 2 si on veut afficher le 1 point il n est pas n cessaire de tout r afficher Cependant si jamais la fen tre est r affich e le point ne le sera pas et il faut avertir l utilisateur qu il en est au deuxi me point dans le callbacks de la fen tre de commentaire gestion de la souris openGLpermet de traiter les clics de souris dans une fen tre Pour interpr ter ces v nements il faut attacher la fen tre en question un callback de gestion des v nements souris Ce dernier sera appel lorsque l un des 3 boutons de la souris est press et ou rel ch dans la fen tre Un callback de gestion de souris est une subroutine avec les param tres suivants ibutton c est un entier qui repr sente le bouton de la souris qui est cliqu il y a donc 3 possibilit s GLUT LEFT BUTTON GLUT MIDDLE BUTTON GLUT RIGHT BUTTON istate c est un entier qui repr sente l tat du bouton CHAPITRE 3 AIDE LA PROGRAMMATION 24 GLUT_DOWN si le bouton est enfonc GLUT_UP si le bouton est rel ch ix c est un entier qui repr sente l abscisse du curseur au moment ou l v nement est d clench Attention ceci est en coordonn es relatives c est dire par rapport au coin sup rieur gauche de la fen tre iy c est un entier qui repr sente l ordonn e du curseur au moment ou l v nement est d clench Attention ceci est en coordonn es relat
26. emple NUMPI 1 NUMPI se trouve dans le module plast2 Ipour pouvoir afficher la pi ce lon a besoin de cadrer Ipour cela on calcul les points lbas gauche WXMIN WYMIN let haut droit WXMAX WYMAX Ide la pi ce call rechEspaceMin puis on cadre avec les points pr c dents call cadre Y 2 initialisation Isauvegarde de l identifiant du menu call glutSetWindow imenuWin imenuAppelantPiece glutGet Menu cr ation du menu de piece call menu nbChoix menuPiece IA STR modification des callbacks d affichage Ipour la fen tre principale call glutSet Window icomWin call glutdisplayfunc comDisplayPiece lon raffiche la fen tre une fois qu elle est initialis e call glutPostRedisplay Ipour la fen tre de commentaire call glutSet Window imainWin call glutdisplayfunc mainDisplayPiece call glutPostRedisplay LL Fin initialisation END SUBROUTINE PIECE Annexe C fichier despiece f90 Annexe D corps des m thodes de zoom D 1 zoom subroutine sauvZoom use callbacksPiece use varAffichage IMPLICIT DOUBLE PRECISION A H 0 7 REAL KIND GLFLOAT DIMENSION ALLOCATABLE integer iTaille iok lil faut sauvegarder le cadre courant Isi on a pas encore zoom il faut initialiser if allocated coordCadres then lon avait d j zoom lon ajoute un zoom on a besoin d un l ment de plus dans le tableau iTaille SIZE coordCadres DIM 1 1 lon d saloue
27. es coordonn es pour obtenir les coordonn es du point dans le rep re de base subroutine sourisInfoPoint button state x y use varAffichage integer glcint intent inout button state x y DOUBLE PRECISION xreel yreel xcr ycr xcw ycw character text 80 lon ne traite que enfoncement du bouton gauche if state GUT DOWN AND button amp amp GLUT LEFT BUTTON then centre de la fen tre en tenant compte des sous fen tres ces coordonn es sont r elles Idans le rep re cran XCW 0 99 0 50 2 YCW 0 99 0 50 2 centre de la figure en coordonn es r elles dans le rep re de base XCR WXMAX 2 YCR WYMAX 2 Ix et y sont en coordonn es relatives par rapport au coin sup rieur gauche Ide la fen tre principale conversion des coordonn es en coordonn es r elles Idans le rep re cran CHAPITRE 3 AIDE LA PROGRAMMATION 34 xreel yreel real x WIDTH 2 1 real y HEIGHT 2 1 Itransformation inverse des points Ipour avoir les coordonn es dans lle rep re de base homot cie inverse translation inverse xreel xreel rapport 0 80 XCW xRAPPORT XCR yreel yreel rapport 0 80 YCWxRAPPORT YCR lon va crire dans la fen tre de commentaire call efface com call desContourFenetre com IF XREEL lt WXMIN OR XREEL WXMAX amp amp OR YREEL lt WYMIN OR YREEL WYMAX THEN write 6
28. esqey ZE DIY quiod un 3s9 yurod un EAM MINSD TIVO quiod np uorequosaidor NN HMPIMOUTTIS peo NOJOSMISD TIVO dus Sun p Inossteda NA eztg ato g s Teo NOJOSMINSD TIVO quiod un p Inossredo LAM InofnoHxtoy Teo TAMIOTASO TIVO TAM NANO xtoyp guado podde SH Jodde 9118 Y UO0IJI8 SLNIOd TO ulsegis IDOLA IDOLXTAM NdD TIVO qurod SANIT T utsog s IDOLA IDOLXZAM TADO oust IIONVIAL TD usegs IDOLA IDOLXZAM1dD uly o 3uera dOOT ANIT TD Utseqis IDOLA TDOLXZAM Td9 SUR UN Pp INOJUOD sayn TD utseqis IDOLATDOLXZAM TADO ud areyepapenb dOOT ANIT TD Utseqis IDOLA TDOLXZAM TADO 91189 UN P 1NOJUO guado podde SH edde IQUISSIP e Jofqo CHAPITRE 3 AIDE LA PROGRAMMATION 32 3 4 4 criture de texte criture dans la fen tre de commentaire Pour crire un texte blanc d une ligne enti re dans la fen tre de commentaire utilisez la m thode ECTX NOZODI TEXT NOZODI est un entier indiquant sur quel ligne le texte TEXT on crit CALL ECTX 2 crit sur la ligne 2 en blanc Pour crire un texte en couleur d une ligne enti re dans la fen tre de commentaire utilisez la m thode ectxCouleur nozodi txt kcoul call ectxCouleur 2 crit sur le ligne 2 en rouge KV2 Pour crire un texte en couleur d 1 5 de ligne dans la fen tre de commentaire utilisez la m thode ectxColoneCouleur nLigne nCol txt kcoul l crit
29. et enfin quelques conseils mise en garde Quelques principes d openGLsont abord s mais nous resterons superficiels et il serait pr f rable d utiliser en plus de la documentation openGLdisponible tr s facilement sur Internet en anglais ou en fran ais ou encore de regarder dans les nombreux livres traitant d openGL 3 1 Makefile utilisation Le Makefile fourni permet de compiler l ensemble du logiciel prplast2sous Linux Il est possible de trouver des quivalents pour windows Pour compiler le logiciel en entier taper la commande gt make Ceci aura pour effet de recompiler tous les fichiers sources non jour C est dire ceux qui ont une date de modification post rieure celle de Pex cutable et ou du fichier binaire translatable o correspondant Ceci permet d viter de tout recompiler chaque fois 12 CHAPITRE 3 AIDE LA PROGRAMMATION 13 Attention Ilfaut cependant faire attention car la gestion des d pendances n est pas toujours parfaite Ainsi dans certains cas il est n cessaire de tout recompiler Par exemple suite la modification d une interface le nom d une subroutine par exemple le compilateur ne peut pas savoir que l ancienne interface n existe plus Pour recompiler la totalit du logiciel 1 effacer il s agit d effacer tous les fichier o gt mod et l ex cutable ceci grace la commande gt make clean 2 recompiler il suffit de compi
30. ette section Dans notre exemple on affiche le body sur lequel on travail et on crit dans la fen tre commentaire son num ro on modifie le callbacks de la fen tre principale et celui de la fen tre de dessin module callbacksPiece contains subroutine mainDisplayPiece CALL DESPIECE end subroutine mainDisplayPiece subroutine comDisplayPiece character TEXT 80 TEXT6 6 integer NOZODI Ipermet d effacer la fen tre lil faut appeler cette m thode l chaque fois si l on ne veut pas l avoir un r sultat tr s trange call efface com l dessine les contours de la sous fen tre en bleu call desContourFenetre com NOZODI 2 WRITE TEXT6 16 NUMPI TEXT DESSIN du BODY num TEXT6 l crit le TEXT en blanc la ligne NOZODI de la fen tre de commentaire CALL ECTX NOZODI TEXT end subroutine comDisplayPiece CHAPITRE 3 AIDE LA PROGRAMMATION 22 end module callbacksPiece SUBROUTINE PIECE use opengl glut lon affiche la pi ce num ro dans notre exemple NUMPI 1 NUMPI se trouve dans le module plast2 pour pouvoir afficher la pi ce lon a besoin de cadrer Ipour cela on calcul les points lbas gauche WXMIN WYMIN let haut droit WXMAX WYMAX Ide la pi ce call rechEspaceMin puis on cadre avec les points pr c dents call cadre IL jnitialisation modification des callbacks d affichage Ipour la fen tre principale call glutSet Window icom
31. he string VERSION There should be a few of them of the form GL VERSION 11 GL_ VERSION _1_ 2 etc These tell you what version is supported The fpp file should have a define for each version number up to your version of OpenGL For example if you have OpenGL 1 1 then the fpp file should have define OPENGL_1_0 define OPENGL 1 1 define OPENGL_1_2 Note that the last one is commented out To determine which extensions are supported by your OpenGL search for GL_ EXT in gl h You should find the list of supported extensions e g Extensions define GL_EXT_abgr 1 define GL_ EXT blend color 1 The fpp file has a define statement for each extension currently supported by f90gl You should comment out any that are not supported by your OpenGL If you don t comment out one that is not supported you will get undefined symbol errors from the linker If you do comment out one that is supported you will not be able to use that extension from Fortran If your favorite extension is not listed in the fpp file it is not currently supported by f90gl send email to william mitchell nist gov and we ll consider adding it to the next release The final set of define statements indicate system configuration details usually indicating what compiler is being used These are only necessary when the f90gl source code needs to do something special for this sytem for example work around a compiler bug You should probably leave these alone and for a new sys
32. ives Attention si on clic pression rel chement d un bouton dans la fen tre ayant un callbacks de gestion souris alors le callbacks sera appel 2 fois subroutine sourisPiece button state x y use opengl gl integer glcint intent inout button state x y end subroutine sourisPiece subroutine xxx use opengl glut call glutSetWindow imainWin call glutmousefunc sourisPiece end subroutine xxx Pour d tacher un callback d une fen tre il faut passer un pointeur de fonction null la subroutine glutmousefunc En fait on attache un callback null Dans la librairie f90gl le pointeur de fonction null est GLUTNULLFUNC subroutine xxx use opengl glut call glutSetWindow imainWin call glutmousefunc GLUTNULLFUNC end subroutine xxx Pour plus de pr cision sur les callbacks de gestion souris reportez vous la section 3 4 6 page 33 3 3 6 remplissage de la bo te Rendez vous la section 3 4 page 26 pour avoir des informations sur ce qui compose en g n rale une bo te gestion souris menu choix des couleurs sous programme de dessin CHAPITRE 3 AIDE LA PROGRAMMATION 25 3 3 7 fin retour au menu sup rieur Avant de quitter une bo te il faut 1 rattacher les callbacks d affichage de l appelant Dans notre exemple de piece nous avons dans l initialisation modifi les callbacks d affichage de la fen tre principale et de la fen tre de commentaire Ainsi nous dev
33. jitsu LF95 on Windows the mf key uses j for Fujitsu you must use LF95 if you use MS VC With the Borland C compiler you can use either LF90 or LF95 with LF95 5 5 or later and MS VC you may find multiple definitions of WinMain when you link an example If so comment out the line that creates winmain obj in f90gl gl mf8njo DVF Compaq Digital supplies a binary version of f90gl for DVF Go to http www compaq com fortranandlookunder Downloads Salford does not currently work with Salford ftn95 Check the f90gl web page for the latest information XLF XLF versions before 3 2 5 2 and 4 1 0 1 do not allow the target attribute on assumed size arrays in both fwrap fpp and interf fpp If you get a compile time error message related to this then add define OLDXLF to the end of the fpp file in f90gl fppincs Note that if you do this then arrays for which C keeps a pointer and uses the array later may not work properly for example the glutdino example will not draw the sides of the dino Digital Fortran on Digital Unix with Digital Fortran 90 V4 1 you need to apply a patch to the compiler Without it you will get an error message about no matching specific routine for the generic subroutine gluTessCallback when you compile the glutdino example You can either ANNEXE A COMPLEMENT SUR L INSTALLATION 44 Download ECO 02 for DIGITAL Fortran for DIGITAL UNIX from http www digital com fortran down
34. ler normalement commande unix gt make modification IN ATTENTION La syntaxe des Makefile est tr s strict surtout au niveau des tabulations des espaces des retours la ligne Ce makefile compile uniquement des fichiers f et f90 Le makefile cr e les binaires translatables 0 n cessaires la compilation de l x cutable puis cr e P x cutable Pour cr er un fichier xxx o il compile avec l option c le fichier xxx f90 fichier de nom identique sans l extension Si le fichier xxx f90 n existe pas il compile avec l option c gt le fichier xxx f Si ce dernier n existe pas il renvoie une erreur Modifier le makefile consiste en fait rajouter le s fichier s o que l on veut cr er et indiquer qu ils sont n cessaires la compilation de l ex cutable ajout d un module Pour ajouter un module au projet comme init plast2 il faut le rajouter dans la variable MOD INCLUDE ce qui permet qu il soit compil en premier Pour rajouter le module dans la variable il faut le mettre la fin de la ligne en ajoutant un espace avant CHAPITRE 3 AIDE LA PROGRAMMATION 14 Par exemple si on veut rajouter le module xxx qui se trouve dans le fichier xxx f90 MOD_ INCLUDE init o devient MOD INCLUDE init o Xxx 0 Pour ajouter un autre fichier il faut proc der de la m me mani re que pour l ajout d un module il suffit modifier la bonne va
35. les zoom sauvegard if SIZE coordCadres DIM 1 gt 2 then if allocated svgCoordCadres then deallocate svgCoordCadres end if allocate svgCoordCadres 1 4 STAT IOK if allocated coordCadres then deallocate coordCadres end if allocate coordCadres 1 4 SSTAT IOK coordCadres svgCoordCadres deallocate svgCoordCadres end if end subroutine finZoom D 2 criture 60 svgCoordCadres
36. lim7 avant modification 4__ User configuration parameters the include directory ies for OpenGL GL is a subdirectory of it and GLUT OGLINC I MESAHOME include the include directory for X11 X11INC I usr X11R6 include the library directory ies for OpenGL and GLUT OGLLIBDIR L MESAHOME lib the OpenGL GLU and GLUT libraries OGLLIB lglut IGLU IGL CHAPITRE 1 INSTALLATION 7 the library directory for X11 X11LIBDIR L usr X11R6 lib the X11 libraries X11LIB IXaw IXt IXmu 1Xi IXext IX11 Im extra characters to put into the library names in case there is more than one OpenGL installed For example if LIBNAME is Mesa then the libraries will be libMesaf90GL a etc LIBNAME commands for making a library MAKELIB ar rcv RANLIB ranlib fortran 90 compiler and compiler flags F90 ifort F9OFLAGS O C compiler and compiler flags CC gcc CFLAGS O DFNAME FNAME The suffix for module files generated by the compiler If none are generated then use junk or something do not leave it blank MOD mod The compiler flag to get at the module file for opengl_ kinds in include GL USEMOD L include GL end of user configuration parameters Liste des diff rents points changer 1 OGLINC il faut indiquer au compilateur o se trouve les fichiers d en t te les headers de la librairie glut Remplacez MESAHOME include par repT
37. loads html and patch the compiler before building f90gl or add define DIGITAL NO ECO 02 to the fpp file but this is a hack that changes the API for glu TessCallback see USRGUIDE I only recommend this for someone who does not have root privileges so can t patch the compiler and can t get the sysadmin to patch it right away You should reinstall f90gl without the hack once you finally do get the sysadmin to patch the compiler PACIFIC SIERRA currently does not work with the Pacific Sierra compiler on Linux Check the f90gl web page for the latest information gfortran requires a version of gfortran newer than 10 23 2005 ANNEXE A COMPLEMENT SUR L INSTALLATION 45 A 2 2 mf key Voici le fichier mf key fournis par les d vellopeurs de la librairie f901 il explique comment trouver le code de votre syst me This file describes the naming convention for the makefiles mf and include files for the preprocessor fppincs fpp In some cases a common makefile handles many systems this is called mfmost In fppincs there is a fppmesa that is used by several of the systems with Mesa Otherwise the naming convention for makefiles is mf12345 and preprocessor files is fpp12345 where 1 computer 8 x86 or Pentium a alpha g sgi h hp i Itanium in some cases 8 may apply to Itanium o sgi origin p Power Macintosh r rs6000 s sun 2 OS 4 SunOS 4 5 Windows 95 a AIX d Tru64 and other descendents of Digital Unix h HP
38. lusieurs points la suite sans avoir retourner dans le menu 2 2 Zoom Pour faire un zoom il faut passer dans le mode zoom ceci se fait en cliquant sur ZOOM dans le menu Dans la fen tre de commentaire une aide au zoom s affiche Pour faire un zoom il faut enfoncer presser le bouton gauche de la souris sur le coin sup rieur gauche du rectangle de zoom que l on d sire et rel cher le bouton sur le coin inf rieur droit Pour revenir au zoom pr c dent il faut choisir ZOOM ARRIERE dans le menu Pour arr ter le zoom il faut choisir FIN ZOOM dans le menu la fen tre de commentaire nous indique que l on a quitt le mode zoom elle n affiche plus d aide au zoom Tant que l on n a pas quitt explicitement le mode zoom clic sur Fin Zoom ou effectu un choix dans le menu modifiant l utilisation de la souris on reste dans le mode zoom 10 CHAPITRE 2 UTILISATION 11 2 3 en g n ral En r gle g n rale il suffit de suivre les commentaires qui sont affich s dans la fen tre de commentaire pour avoir plus de pr cision Chapitre 3 Aide la programmation Ce chapitre contient une s rie de conseils sur la mani re d incr menter l interface graphique du logiciel prplast2 Il est compos des sections suivantes philosophie de programmation cr ation d une nouvelle bo te explication sur la programmation des points r curent zoom criture de commentaire cadrage
39. manuel d installation d aide la programmation et d utilisation du logiciel prplast2 Maxime Louvel stagiaire sous la responsabilit de Mr Laurent Baillet 4 ao t 2006 Table des mati res 1 Installation Doe ins 228 A GRR MAR ROL TA 4 eo LE SOS i oe eseni See Se rentes m re Fe 1 1 2 compilation du logiciel prplast2 1 2 Autres syst mes d exploitation 2 Utilisation D PE ATEN AE CR A A ee oat DD LOOM SLA A O A SAN ne esse Soin E 2 3 en g n ral ok toga ae ne eue a rel dE 3 Aide la programmation idl Makefile Sr e BN Sh MANN APR ET AR EX 3 2 philosophie de programmation Baek CAIDA Keli wlan Sate Gat ht an pe ds nier re 3 3 Cr ation d une BO t 22 4 0 ee dd badd ad Rage 3 3 1 changements effectu s depuis la version GKS Deore INCLUDE e he e ia Apr 3 3 9 organisation Let ie te dee gtk e ay J34 AISLE LE ee an ven in eee E oh eae duo CAllbacis ta de fetes dE alae BS a eg ae rae Gage 3 3 6 remplissage de la bo te 3 3 7 fin retour au menu sup rieur 3 4 Explication des points r currents SL CA RE D ET ae Re 3 4 2 couleurs nes Pas en Vus ee nes rt nee DR ES ee eae Sa ag A MA LEA See 3 4 4 criture de texte 3 40 CMON es te ed we Den baies D eo nu KO a we 4 we OO SOURIS die Seeks Vee ite dense sit JA ZOON A net AR aus de 10 10 10 11
40. me mlouvel amp amp tar zxf f90gl 1 2 11 tar gz Rentrez ensuite dans le r pertoire gt cd f90gl 1 2 11 CHAPITRE 1 INSTALLATION 6 Dans le fichier INSTALL se trouve les instructions pour installer la librairie f90gl nous donnons ici une version simplifi e et surtout moins compl te une copie du fichier INSTALL est disponible en dans l annexe A 2 1 page 39 Il convient maintenant de trouver le code de votre syst me pour cela regardez dans le fichier mf key une copie est disponible en Annexe A 2 2 Ici nous travaillons sur un PC x86 avec Linux un compilateur intel ifort et la distribution Mesa d openGL Notre code syst me est donc 8lim7 Car nous avons un noyau lt 2 16 6 s il s agit d un noyau gt 2 16 Pour conna tre la version de son noyau ex cutez la commande gt kernelversion Une fois le code du syst me trouv il faut remplir le fichier fppxxxxqui se trouve dans le r pertoire home mlouvel fppincs xxxx est le code syst me pr c demment mentionn Dans notre cas il s agit du fichier fpp8lim Dans ce fichier renseignez la version que vous utilisez d openGLsous la forme define OPENGL _v_ v nous utilisons la version 4 0 nous mettons donc define OPENGL_4_0 Il faut maintenant modifier le fichier makefile correspondant votre installation mfxxxx dans notre exemple mf8lim7 Pour ceci modifiez ce qui est n cessaire dans la partie User configuration parameters mf8
41. mousefunc zoomSouris ZOOM ARRIERE l elseif iChoix 4 then call restaurZoom lon recadre call cadre lon rafra chit la fen tre d affichage CHAPITRE 3 AIDE LA PROGRAMMATION 36 call glutSetWindow imainWin call glutPostRedisplay A FIN ZOOM S elseif iChoix 5 then lon sort du mode zoom bzoom FALSE call remetInitZoom lon change l affichage des commentaires call glutSet Window icomWin call glutdisplayfunc comDisplayPiece call glutPostRedisplay lon recadre call cadre lon rafra chit la fen tre d affichage call glutSetWindow imainWin call glutPostRedisplay endif end subroutine menuPiece Vous trouverez Le corps des m thodes de zoom de trouve dans l annexe D 1 page 56 3 5 conseils mise en garde Cette section contient quelques mises en garde permettant d viter des erreurs de programmation Elle contient aussi quelques points sur le fonctionnement d openGL elle vient en compl ment de la section 3 2 3 5 1 variables Il est important de faire attention a la port e visibilit dur e de vie des variables surtout quand l on cr e une bo te partir d une bo te existante CHAPITRE 3 AIDE LA PROGRAMMATION 37 3 5 2 fen tre courante openGLutilise la notion de fen tre courante c est dire que toutes les actions sont effectu es dans la fen tre courante Par exemple on veut modifier l affichage de commentaire suite un clic
42. ompiler on Windows use make This will compile the f90g1 libraries move them to f90g1 lib and move any module files to either f90gl include GL or f90gl lib depending on the system After testing you can either leave them there or move them to another home for example the lib and include directories containing OpenGL make f mfxxxx clean in Unix or mfxxxx clean in DOS will delete all files generated by the building process but leave the library and module files in f90gl include GL and f90g1 lib make f mfxxxx reallyclean or mfxxxx reallyclean will delete the files in f90gl include and f90g1 lib too 6 test Finally you should test the libraries by building and running the example programs in f90gl examples See the README file in that directory ANNEXE A COMPLEMENT SUR L INSTALLATION 43 7 system specific notes all systems no notes NASoftware Linux you must use FortranPlus Version 2 0 5 or later you must have the directory containing the libraries e g lt path to f90gl gt f90g1 lib in your LIBRARY_ PATH environment variable to build the examples NASoftware WinNT you must use FortranPlus Version 2 0 55 or later Lahey Lahey supplies a binary version of f90gl that works with LF90 LF95 and ELF90 Go to http www lahey com andsearchforOpenGL The remaining comments pertain to building f90gl from the sources instead of using the precompiled libraries Note that for Lahey Fu
43. ons restaurer ceux de l appelant pour chacune de ses fen tres Pour pouvoir conna tre les callbacks de l appelant il faut utiliser le module callbacksAppelant use callbacksAppelant Ifen tre de commentaire call glutSetWindow icomWin l attachement du callback d affichage de l appelant call glutdisplayfunc comDisplayAppelant lon ne traite plus les clics call glutmousefunc GLUTNULLFUNC lon raffiche la fen tre pour l afficher le bon commentaire call glutPostRedisplay Ifen tre principale call glutSetWindow imainWin call glutdisplayfunc mainDisplayAppelant call glutmousefunc GLUTNULLFUNC call glutPostRedisplay 2 d tacher les ventuels callbacks de gestion de souris Pour annuler la gestion des v nements souris sur une fen tre il faut passer un pointeur de fonction null GLUTNULLFUNC car nous utilisons la librairie f90gl lors de l attachement d un callback de gestion de souris call glutSetWindow imainWin call glutmousefunc GLUTNULLFUNC 3 d truire le menu de la bo te Pour viter une utilisation n faste de la m moire il faut d truire le menu courant car il ne sera plus utilis par la suite on cr e un nouveau menu chaque fois CHAPITRE 3 AIDE LA PROGRAMMATION 26 lon se met sur la fen tre de menu call glutSetWindow imenuWin lon ne peut supprimer le menu courant lque s il xiste vite les crashs if glutGetMenu 0 then le menu tait
44. pil avant les autres fichiers MOD_MOD cette variable contient les fichiers mod supprimer lors que l appel a la commande make clean Rajoutez ici tous vos modules pour le module xxx rajoutez xxx mod CHAPITRE 3 AIDE LA PROGRAMMATION 15 3 2 philosophie de programmation Cette section contient quelques points qui sont importants avoir en t te lors de la modification du logiciel 3 2 1 callbacks Un callback ou fonction de rappel est une fonction procedure ousubroutine qui est appel e suite un v nement Un v nement pouvant tre un clic avec la souris le d placement de la fen tre son rafra chissement etc openGLutilise ce prinicpe Ainsi pour chaque v nement que l on veut traiter il faut au pr alable attacher un callback sur la fen tre susceptible de traiter v nement Prenons pour exemple l v nement suivant utilisateur clic sur la fen tre princpale 1 tout d abord il faut se positionner sur la fen tre principale subroutine init call glutSetWindow imainWin end subroutine init 2 ensuite on attache la subroutine de callbacks qui sera appel e lorsque l utilisateur cliquera sur la fen tre principale subroutine gestionSouris button state x y les param tres de cette subroutine Isont fir s par opengl integer glcint intent inout amp amp button state x y code ex cut chaque clic de souris Idans la fen tre principale lEn fait ch
45. r de chaque l ment du menu STR la cha ne de caract re contenant les l ments du menu Dans notre exemple cela donne module callbacksPiece Integer imenuAppelantPiece contains subroutine menuPiece iChoix integer intent in iChoix CHAPITRE 3 AIDE LA PROGRAMMATION 20 if ichoix 1 then Icalcul le contour call contour Idessine le contou call desContour endif end subroutine menuPiece end module callbacksPiece SUBROUTINE PIECE Icontient la variable imenuAppelantPiece use callbacksPiece use opengl glut Integer DIMENSION 1 20 IA CHARACTER 256 STR integer ICHOIX NBCHOIX NBCHOIX 6 STR CONTOURDEF POINTZOOMZOOM ARRIEREFIN ZOOMFIN IA 1 7 TA 2 9 TA 3 4 TA 4 12 TA 5 8 IA 6 3 YAA An itialisation Isauvegarde de l identifiant du menu call glutSetWindow imenuWin imenuAppelantPiece glutGetMenu cr ation du menu de piece call menu nbChoix menuPiece IA STR A Fin initialisation CHAPITRE 3 AIDE LA PROGRAMMATION 21 END SUBROUTINE PIECE attachement des callbacks Comme nous l avons vu dans la section 3 2 1 il s agit d attacher un callback pour tous les v nements que l on veut traiter En g n ral on traite principalement deux v nements le r affichage de la fen tre de commentaire et celui de la fen tre principale Nous traiterons v nement l utilisateur clic dans la fen tre principale plus tard dans c
46. ravail glut 3 7 1 include 2 OGLLIBDIR les librairies gl et glu sont install es dans gt usr lib il n y donc rien faire normalement Au contraire pour la librairie glut il faut indiquer au compilateur o elle se trouve dans votre r pertoire de travail repTravail glut 3 7 1 lib glut dans notre exemple gt home mlouvel glut 3 7 1 lib glut CHAPITRE 1 INSTALLATION 8 Remplacez MESAHOME lib par repTravail glut 3 7 1 lib glut 3 X11INC sous Linux les librairies de X devraient se trouv es dans le r pertoire donc ne changez rien Si ces librairies se trouvent dans un autre r pertoire indiquez ce r pertoire contenant le headers 4 X11LIBDIR idem X11INC 5 CC renseignez ici le nom de votre compilateur C ici celui de la GNU est utilis 6 USEMOD cette variable permet d indiquer au compilateur o trouver les modules openGL Remplacez include GL par repTravail f90g1 1 2 11 include Dans notre exemple home mlouvel f90g1 1 2 11 include Note les option L et I permettent de sp cifier au compilateur o se trouve les librairies resp les headers sont utilis es par les compilateur fortran ifort et g95 mais je n ai pas test pour les autres compilateurs Ainsi si vous utilisez un autre compilateur v rifiez que les options L et I sont bien implant es sinon trouvez un quivalent Vous pouvez enfin compiler la librairie Placez vous dans le r pertoire de travail et taper l
47. riable Liste des variables MOD _ INCLUDE contient les modules utilis s par les diff rentes bo tes MODULES idem MOD INCLUDE OBJECTS contient tous les fichiers o gt compiler qui ne sont pas des modules et qui ne contiennent pas de modules utilis s dans d autres fichiers Cette variable contient de nombreux fichiers ils sont donc rang s par ordre alphab tique et un seul fichier par ligne Le symbole A gt permet d ignorer le retour la ligne Ainsi les mots sont bien s par s pas un seul espace Donc si vous rajouter un fichier o dans cette variable 1 positionnez vous sur la bonne ligne ordre alphab tique 2 cr ez une nouvelle ligne 3 rajoutez xxx o en commancant au d but de la ligne avec uniquement un espace avant le symbole 4 En cas de probl mes v rifiez que toutes lignes sont du type xxx 0 qu il n y ait pas d autres espaces que celui obligatoire sur chaque v rifiez aussi qu il n y ai pas de tabulations MOD _ USED les fichiers sont compil s dans l ordre ou il apparaissent dans la variable OBJECTS Ils sont pour l instant dans l ordre alphab tique Ainsi si un module m2 dans un fichier f2 est utilis par un fichier f1 alors le compilateur va renvoyer une erreur Car il veut que le module m2 soit compil avant d tre utilis C est pourquoi dans ce cas on place le fichier f2 0 dans la variable MOD _ USED pour qu il soit com
48. s au corps de la boite initialisation de variables Cette partie remplace dans les anciennes bo te l appel la subroutine MENU CHAPITRE 3 AIDE LA PROGRAMMATION 19 CALL MENU ICHOIX NBCHOIX IA STR L initialisation se d compose en deux sous partie cr ation du menu la cr ation du menu se fait en deux tapes 1 sauvegarde du menu de l appelant Ceci permet de pouvoir restaurer le menu de l appelant lorsque l on quitte la bo te On stock l identifiant du menu de l appelant dans une variable du module car elle est persistante c est dire qu elle n est pas d truite apr s l ex cution de la subroutine d initialisation Si on a une bo te xxx par convention la variable qui va contenir le menu de l appelant est nomm iMenuAppelantXxx sauvegarde de l identifiant du menu lon veut travailler sur la fen tre de Menu lil faut donc la positionner comme Ifen tre courante call glutSetWindow imenuWin lon stock l identifiant du menu courant dans la variable imenuAppelantPiece imenuAppelantPiece glutGetMenu 2 appel la subroutine MENU qui prend en param tre nbChoix le nombre de choix que contient le menu menuAppel le callback qui sera appel quand l utilisateur fera un choix dans le menu Cette subroutine prend obligatoirement un seul param tre un entier qui contiendra la valeur du choix de Putilisateur IA le tableau d entier contenant la longueu
49. s r elles Idans le rep re cran xreel real x WIDIH 2 1 yreel real y HEIGHT 2 1 transformation inverse des points pour avoir les coordonn es dans le rep re de base lhomot cie inverse translation inverse xreel xreelx rapport 0 80 XCW xRAPPORT XCR yreel yreel rapport 0 80 YCW RAPPORT YCR IF XREEL lt WXMIN OR XREEL WXMAX amp amp OR YREEL lt WYMIN OR YREEL WYMAX THEN write 6 clic hors cadre else write 6 x coordonn es du point write 6 X xreel Y yreel les points sont dessin s sur 3 pixels call glPointSize TROIS les points sont dessin s en rouge call choixCouleur KV2 les points sont dessin s Idans la fen tre principale call glutSetWindow imainWin ANNEXE B FICHIER PIECE F90 90 l dessin du point call glBegin GL POINTS call glVertex3d xreel yreel 0 0 gldouble call glEnd lon notera que ce point n tant pas dessiner l dans une subroutine de callback ne sera pas Ir affich avec la fen tre end IF end if end subroutine sourisInfoPoint subroutine menuPiece iChoix Icontient bzoom les identifiant use varAffichage Ides fen tres use opengl glut pour les callbacks de zoom use callbacksGeneral Ipour les callbacks de l appelant use callbacksAppelant integer intent in iChoix CONTOUR l if ichoix 1 then Icalcul du contour call contour Idessin du contour call descont je
50. st dire que tous les dessins sont faits dans la couleur courante A nsi pour changer de couleur il faut d abord charger la couleur que l on d sire puis dessiner ce que l on veut sans pr ciser la couleur Un module couleur a t fait pour rendre plus lisible la gestion des couleurs Pour changer de couleur il faut appeler la subroutine choixCouleur kcoul qui prend en param tre un entier Le tableau 3 1 tablit la correspondance entre kcoul et la couleur KV1 blanc KV2 rouge KV3 jaune KV4 vert KV5 cyan KV6 bleu KV7 magenta KV8 gris clair KV9 orange autre blanc FIG 3 1 tableau de correspondance valeur gt couleur Les valeurs KV1 KV9 sont des constantes enti res d finies telles que KV1 1 KV2 2 KV9 9 quivalent GKS la m thode choix couleur CALL GSPLCI kcoul 3 4 3 dessin Avant toute chose il faut effacer la fen tre cela se fait gr ce l appel de la m thode efface avec main en param tre pour indiquer que l on veut effacer la fen tre principale CHAPITRE 3 AIDE LA PROGRAMMATION 28 l effacement de la fen tre de dessin call efface main forme g om trique Pour dessiner une forme dans la fen tre courante lon dit ce qu on va dessiner ici un point call glBegin GL POINTS lon donne les sommets de ce que l on veut dessiner ici il s agit uniquement d un point on a donc un Isommet pour
51. tem not define any An exception ANNEXE A COMPLEMENT SUR L INSTALLATION 42 is GLU_1_1_ TESS which should be defined if and only if the OpenGL library does not support GLU 1 2 tesselation Look for GLU VERSION 1 2 in include GL glu h 4 makefile The makefile names begin with mf In the top directory there is a file for each system on which f90gl has been tested of the form mfxxxx for makefiles or mfxxxx bat for DOS batch files where xxxx is the system code Identify your makefile and edit it to set the directories in which your system keeps the OpenGL and X11 include files If your system is not supported then find a similar system and use it as a starting point for your makefile You will probably have to change some additional macros at the beginning of the makefile The subdirectories util gl glu and glut contain makefiles that are called by the top level makefile Some of these are common to many systems e g mfmost for most systems and some are system specific using the name mfxxxx where xxxx is the system code You should not have to make any changes to these makefiles The subdirectory examples contains a makefile for each system on which f00gl has been tested This will need to be edited to for your system similar to the top level makefile 5 compile and install If xxxx is your system code then from the top f90gl directory at a Unix prompt type make f mfxxxx at a DOS prompt type mfxxxx exception for the PGI c
52. utiliser des variables interm diaires WXINF WXSUP WYINF WYSUP ZOOML1 l appel de zoom1 WXINF WXSUP WYINF WYSUP a t supprim il faut appeler la subroutine CADRE qui se charge de recadrer la fen tre d affichage avec les valeurs de WXMIN WYMIN WXMAX WYMAX segment GKS il n y pas de notion de segment dans openGL il y a uniquement un d coupage de la fen tre affich e en 2 sous fen tres commentaire et menu se positionnant par dessus la fen tre principale ou de dessin CHAPITRE 3 AIDE LA PROGRAMMATION 17 3 3 2 INCLUDE Tout d abord dans l ancienne version du logiciel crit en fortran 77 les variables communes plusieurs subroutines bo tes tait d clar es dans des fichiers SDD ces fichiers tant inclus si besoin Dans la version actuel ces fichiers ont t remplac s par des modules de la mani re suivante INIT SDD Q a IM C STRUCTURE DE DONNFE INIT SDD G ES C Initialisation de toutes les C constantes utilis es C dans le programme C Initialisation du type C des variables utilis es AA AAA A IMPLICIT DOUBLE PRECISION A H 0 Z7 REALx4 PI ZERO UN DEUX TROIS QUATRE CINQ SIX PARAMEIER PI 3 141592654E 00 PARAMETER ZERO 0 E 00 UN 1 E 00 DEUX 2 E 00 amp amp TROIS 3 E 00 QUATRE 4 E 00 amp amp CINQ 5 E 00 SIX 6 E 00 AAA A ee E FIN DE SDD SAA devient init f90 module init l Initialisation de toutes les constantes utilis es
Download Pdf Manuals
Related Search
Related Contents
Samsung Galaxy Express 2 Bruksanvisning Guide Utilisateur du robot humanoïde NAO GPIB-232CV User Manual BMW X5 xDrive30i Service and Warranty Information Manuel d`utilisation MS-02 Bedienungsanleitung 8650~8659取扱説明書 Avaya Business Ethernet Switch 50 Series User's Manual Transcend JetRam 512MB DDR2-667 CL5 Copyright © All rights reserved.
Failed to retrieve file