Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
991 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C / librairie xlib] Partitionner une fenetre en 4

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C / librairie xlib] Partitionner une fenetre en 4

n°725303
-Jc-
Posté le 13-05-2004 à 23:02:09  profilanswer
 

Salut a tous, je dois réaliser un modeleur 3D en C.
Mon prof m'a obligé à utliser le C pour le faire et je dois donc utliser xlib.
 
En fait, c'est l'interface mon problème :  
 
j'arrive pas gérer independamment les unes des autres 4 régions différentes sur mon interface. Vous pouvez m'aidez please?  
 
Voila mon code :  
void expose()
{
 
   
 new=0;
 if ((fp = fopen("test.txt","r" )) == NULL) {
  printf("Probleme\n" );
 }
 else {
  np=0;
  nl=0;
  while ((fpc = fgetc(fp)) != EOF ) {
         if (fpc == 10 ) {
          /* Fin de ligne */          
          new=0; separator=0;
          }
         else {
          if (new==0) {
       if (fpc != 80 && fpc != 76) {
            fprintf (stderr, "Ni P ni L\n" );
            }
           else {                           /*differentitation d'une ligne point d'une ligne arete*/
             fprintf (stderr, " \n" );
            if(fpc == 80) {                                      
         ltype='P'; np=np+1;
         if (np>npm) {
          fprintf (stderr, "Trop de points \n" );         /*Trop de points rentrés*/
          exit(0);
          }
         npa=np;
                     }
            else {
             ltype='L';nl=nl+1;
         if (np>nlm) {
          fprintf (stderr, "Trop de lignes \n" );        /*Trop de lignes rentrees*/
          exit(0);
          }
             nla=nl;              
         }
            new=1;separator=0;
            }
           }
          else {  
           if (ltype=='P') {
        if (fpc==';') {separator=separator+1;
         }                    
        else {
         if (fpc<'0'|| fpc>'9') {
          fprintf(stderr, "Error point %d\n",np);      
          }
          else {                                   /*Analyse des points*/
          fpn=fpc-48;          
          switch (separator) {
           case 0: px[np]=px[np]*10+fpn;break;
           case 1: py[np]=py[np]*10+fpn;break;
           case 2: pz[np]=pz[np]*10+fpn;break;}          
          }
         }            
            }
           
               else {  
            if (fpc==';') {separator=separator+1;
          }
            else {
             if (fpc<'0' || fpc>'9' && fpc==76){
              fprintf(stderr, "Error ligne \n" );
          }
         else {                                       /*Analyse des aretes*/  
          fpn=fpc-48;          
          switch (separator){
           case 0: A[nl]= A[nl]*10+fpn;break;
                                 case 1: B[nl]= B[nl]*10+fpn;break;}
                               }
               }  
        }
      }
  }
 }
}
 
 
 np=1;
 while (np<=npa) {
  printf("Point %d x=%d y=%d z=%d\n", np, px[np], py[np], pz[np]);np=np+1;}
 np=1;
 while(np<=npa){
 
  //coordonnees en cm dans le repere de l'ecran//
 
   x2d[np]=px[np]*d/pz[np];
   y2d[np]=py[np]*d/pz[np];
 
         //coordonnes en pixel dans le repere de l'ecran//
 
       
   xe[np]=x2d*DisplayWidth(display,screen)/DisplayWidthMM(display,screen);
   ye[np]=y2d*DisplayHeight(display,screen)/DisplayHeightMM(display,screen);
   Xe[np]=xe[np];
   Ye[np]=ye[np];
   
 
  printf("Nouvelles coordonnees: Xe=%d Ye=%d\n",Xe[np],Ye[np]);
  np=np+1;}
 nl=1;  
 for (nl=1;nl<=nla;nl++){  
 printf("Ligne %d A=%d B=%d\n",nl,A[nl],B[nl]);
  if (A[nl]>npa || B[nl]>npa) {  
     printf("les points %d et %d n'existent pas\n",A[nl],B[nl]);
     }
  else {    
   np1= A[nl]; np2= B[nl];
   int line_width=0;
   
   XSetLineAttributes(display, gc, line_width, line_style, cap_style, join_style);    
   XDrawLine(display, mother, gc, px[np1],py[np1], px[np2],py[np2]);
   XDrawLine(display, mother, gc, px[np1]+ DisplayWidth(display,screen)/2,pz[np1], px[np2]+ DisplayWidth(display,screen)/2,pz[np2]); /*fenetre 2, vue de dessus*/
   XDrawLine(display, mother, gc, py[np1],pz[np1]+DisplayHeight(display,screen)/2, py[np2],pz[np2]+DisplayHeight(display,screen)/2);/*fenetre vue de cote*/
   XDrawLine(display, mother, gc, x2d[np1],y2d[np1],x2d[np2],y2d[np2]);}}
   
 
   
   
  /***Creation de qà3ã@e regions de la fenetre******************/  
 int line_width=3;  
  XSetLineAttributes(display, gc, line_width, line_style, cap_style, join_style);
 XDrawLine(display, mother,gc,DisplayWidth(display,screen)/2 ,0, DisplayWidth(display,screen)/2,DisplayHeight(display, screen));
   
 XDrawLine(display, mother,gc,0,DisplayHeight(display,screen)/2, DisplayWidth(display,screen),DisplayHeight(display, screen)/2);
   
   
/*****************creation titres des fenetres*************************/
   line_width=0;
 XSetLineAttributes(display, gc, line_width, line_style, cap_style, join_style);  
 /*XDrawRectangle(display, mother, gc,DisplayWidth(display,screen)/8,0,DisplayHeight(display, screen)/4,15);
 XDrawRectangle(display, mother, gc,5*DisplayWidth(display,screen)/8,0,DisplayHeight(display, screen)/4,15);
 XDrawRectangle(display, mother, gc,DisplayWidth(display,screen)/8,DisplayHeight(display, screen)/2,   DisplayHeight(display, screen)/4,15);
 XDrawRectangle(display, mother, gc,5*DisplayWidth(display,screen)/8,DisplayHeight(display, screen)/2,DisplayHeight(display, screen)/4,15);*/
 XDrawString(display, mother, gc, DisplayWidth(display,screen)/8,14,"vue de face",11);
 XDrawString(display, mother, gc, 5*DisplayWidth(display,screen)/8,14,"vue de dessus",13);
 XDrawString(display, mother, gc, DisplayWidth(display,screen)/8,DisplayHeight(display, screen)/2+14,"vue de cote",11);
 XDrawString(display, mother, gc, 5*DisplayWidth(display,screen)/8,DisplayHeight(display, screen)/2+14,"vue perspective",15);
   
 
 fclose(fp);
 
   }

mood
Publicité
Posté le 13-05-2004 à 23:02:09  profilanswer
 

n°725489
cricri_
Posté le 14-05-2004 à 09:15:41  profilanswer
 

Modifie ton message et utilise les balises code C pour rendre ton code plus lisible déjà ;)

n°726661
MaxMaveric​k
bli bli
Posté le 14-05-2004 à 22:33:01  profilanswer
 

Ya et puis, la methode la plus simple pour decouper une zone de travail en X11: creer des window, ce n'est pas le meme comportement qu'en Win32. Une Window sous X11 est l'objet de base des tout les objet graphiques.
 
Donc tu decoupe ta fenetre en 4 en utilisant ces Window et ensuite tu les geres une par une.
 
N'empeche faire un modeleur 3D, en C en utilisant que des primitives X11 ... ta pas finit mon gars, parce que la xlib elle fournit vraiment pas grand chose et c'est peu de le dire. Le temps que tu fasse tes widget et tout tu risque de jamais commencer le vrai boulot (vues en 3D etc)
 
S'il faut rester en C utilise les libraires Glib >= 2.2, GTK+ >=2.2 (+ GtkGl2.0 si tu peut le faire passer). Ou les equivalent en Gtk+ 1 mais la ca date.
 
Pare que vu le temps necessaire pour faire une application tout con en X11 (parcours de graphes pour ne pas le nommer n'ayant besoin que d'affichage) je sais par experience que tu va passer plus de temps a debogguer l'interface X11 qu'a reellement bosser sur ton modeleur.
Deplus la libraire Gtk, il lui a fallut un temps certain pour commencer a arriver a maturité hein.

n°726812
-Jc-
Posté le 15-05-2004 à 13:45:13  profilanswer
 

oué je commence a m'en rendre compte mais j'ai pas le choix  :cry: je suis obligé d'utiliser xlib  :cry:  
Enfin j'ai trouvé la solution merci de votre aide.
P.S. délsolé pour le code mal indenté  :sweat:  je connaissais pas les balises C...  :)  
 
En tout cas merci de vos réponses  :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C / librairie xlib] Partitionner une fenetre en 4

 

Sujets relatifs
[JAVA ] Qui connait JAL (Librairie baser sur JXTA)c++, prb de rafraichissement des fenetre Gtk2
[GridBagLayout] des problèmes de taille de contenu dans la fenetreouvrir une fenetre lorsqu'on clique sur le menu
griser la croix de la fenetre en javaFermer un popup et actualiser la fenetre qui a lancé le popup
JNI : désigner une librairie native autrement que par son nom[VBS] Quelle est la commande pour fermer une fenêtre IE ?
[JavaScript] Fenetre confirmationRedimmensionner la fenetre ?
Plus de sujets relatifs à : [C / librairie xlib] Partitionner une fenetre en 4


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR