Forum » Programiranje » [opengl] Pop-up menu
[opengl] Pop-up menu
archer ::
Z uporabo pop-up menujev v opengl bi rad dodal možnost izbire izpisa izračunanih podatkov.
Program imam sestavljen iz numeričnega dela, kjer računam željene podatke sistema. Nato nadaljujem z grafičnim delom, kjer sistem izrišem in izpišem podatke (v prostoru z bitmap fonti), ki sem jih prej izračunal.
Prvotni izpis podatkov zgleda takole (deluje):
Pri čemer je print3D tale podprogram:
Izris zgleda takole:
Kot sem že omenil, bi rad imel možnost izbire podatka message2 (druga vrstica vsakega izpisa na sliki zgoraj) preko pop-up menuja, da bi namesto Q-ja izpisal fi oz. L. Poizkusil sem s temle a mi zamenjava ne deluje (menuji se pokažejo ob desnem kliku miške, vendar se message2 ne zamenja):
Bi mogoče prosim kdo znal pomagati. Če sem napisal nerazumljivo prosim povejte, kaj še dodam.
Hvala!
Program imam sestavljen iz numeričnega dela, kjer računam željene podatke sistema. Nato nadaljujem z grafičnim delom, kjer sistem izrišem in izpišem podatke (v prostoru z bitmap fonti), ki sem jih prej izračunal.
Prvotni izpis podatkov zgleda takole (deluje):
//napisi cevi in rezultatov preračuna for(i = 0; i<npipes; i++) { sprintf(message1, "Cev %d", i); sprintf(message2, "Q=%.1f l/h", q[i]); glColor3f(1.0f, 1.0f, -0.3f); print3D((xroom1[i]+xroom2[i])/2, (yroom1[i]+yroom2[i])/2, zroom1[i]+roomh/2, message1); print3D((xroom1[i]+xroom2[i])/2, (yroom1[i]+yroom2[i])/2, zroom1[i]+roomh/4, message2); }
Pri čemer je print3D tale podprogram:
/* PRINT3D */ void print3D(float x, float y, float z, char *string) { char *c; glRasterPos3f(x, y, z); for (c=string; *c != '\0'; c++) { glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, *c); } }
Izris zgleda takole:
Kot sem že omenil, bi rad imel možnost izbire podatka message2 (druga vrstica vsakega izpisa na sliki zgoraj) preko pop-up menuja, da bi namesto Q-ja izpisal fi oz. L. Poizkusil sem s temle a mi zamenjava ne deluje (menuji se pokažejo ob desnem kliku miške, vendar se message2 ne zamenja):
/* PODMENU IZBOR PODATKOV */ void selectData(int msg) { int i; char message2new[50]; switch (msg) { case 1: for(i = 0; i<npipes; i++) { sprintf(message2new, "fi=%d mm", diameter[i]); strcpy(message2,message2new); } break; case 2: for(i = 0; i<npipes; i++) { sprintf(message2new, "L=%.2f m", length[i]); strcpy(message2,message2new); } break; } }
Bi mogoče prosim kdo znal pomagati. Če sem napisal nerazumljivo prosim povejte, kaj še dodam.
Hvala!
- spremenilo: archer ()
archer ::
Pozabil sem omeniti. V OpenGL-u sem popolni začetnik. Malo si pomagam s primeri, ki jih najdem na netu. Za ta izpis podatkov sem program gradil na tem primeru: bitmap.c @ OpenGL.org
Senitel ::
Vprasanje kako dejansko renderiras, oziroma kdaj delas redraw. Ampak selectData ti sicer spremeni message2, ce pa prides za redraw nazaj v prvi del kode, ki si jo postal, potem bo ta del povozil message2.
archer ::
Aha, razumem. Hvala za odgovor!
Verjetno se res zgodi to. Tu imam sicer še main del programa:
Obstaja kakšna enostavna možnost, da tole popravim, da bo delovalo??
Verjetno se res zgodi to. Tu imam sicer še main del programa:
int main(int argc, char *argv[]) { /* BRANJE VHODNE DATOTEKE IN DODELITEV VREDNOSTI SMERNE MATRIKE */ read_input(); /* DOLŽINE CEVI */ if(verzija >= 2.0 && verzija <= 2.9) dolzine_cevi(); /* IZPIS SISTEMA */ print_pipes(); /* IZPIS SMERNE MATRIKE */ //print_direction_matrix(); /* VNOS ZAČETNIH PRETOKOV */ zacetni_pretoki(); /* KONSTANTE N K CEVI */ calculate_n_k_pipe(0, 16.0, 0.1*0.1, 230.0, 10.0*0.1); calculate_n_k_pipe(1, 32.0, 0.1*0.1, 400.0, 7.0*0.1); calculate_n_k_pipe(2, 65.0, 0.1*0.1, 365.0, 2.0*0.1); /* KONSTANTE N K VENTILI */ calculate_n_k_valve(0, 0.01*3600, 5.5, 0.031*3600, 50.0); calculate_n_k_valve(1, 0.01*3600, 1.2, 0.062*3600, 50.0); calculate_n_k_valve(2, 0.01*3600, 1.0, 0.08*3600, 50.0); calculate_n_k_valve(3, 0.017*3600, 1.0, 0.11*3600, 50.0); calculate_n_k_valve(4, 0.025*3600, 1.0, 0.17*3600, 50.0); calculate_n_k_valve(5, 0.029*3600, 1.0, 0.195*3600, 50.0); calculate_n_k_valve(6, 0.031*3600, 1.0, 0.215*3600, 50.0); /* TLAK ČRPALKE */ calculate_pump_c(); /* POSTAVITEV SISTEMA */ postavitev_sistema(); /* ZAPIS MATRIKE m IN VEKTORJA b */ matrika_vektor(); /* IZPIS MATRIKE m */ //print_matrix_m(); /* IZPIS VEKTORJA b */ //print_vector_b(); /* REŠEVANJE SISTEMA */ resevanje(); /* Matrika m in vektor b po končanih iteracijah */ //print_matrix_m(); //print_vector_b(); /* PODATKI IZRAČUN */ podatki_izracun(); printf("\n"); /* IZRIS GRAFIKE */ if(verzija >= 2.0 && verzija <= 2.9) { /* RAZDALJA MED CEVMI */ dcevi(); printf("\n## MENU POMOČ: Pritisni H. ##\n\n"); /* MAKSIMALEN PRETOK */ FindMaxQ(); /* MINIMALEN PRETOK */ FindMinQ(); /* MAKSIMALNE KOORDINATE SOB */ FindMaxCoor(); /* MINIMALNE KOORDINATE SOB */ FindMinCoor(); glutInit(&argc, argv); trackball(cur, 0.0, 0.0, 0.0, 0.0); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB); glutInitWindowSize(700, 700); glutInitWindowPosition(700, 80); glutCreateWindow("Izgled napeljave talnega gretja"); /* REDRAW */ glutDisplayFunc(redraw); /* MOUSE */ glutMouseFunc(mouse); /* MOTION */ glutMotionFunc(motion); /* MOUSEWHEEL */ glutMouseWheelFunc(mouseWheel); /* RESHAPE */ glutReshapeFunc(reshape); /* KEYBOARD */ glutKeyboardFunc(keyboard); /* TICK */ glutIdleFunc(tick); /* PODMENU IZBOR PODATKOV */ int data_submenu; data_submenu = glutCreateMenu(selectData); glutAddMenuEntry("Premer cevi", 1); glutAddMenuEntry("Dolzina cevi", 2); /* GLAVNI MENU */ glutCreateMenu(selection); glutAddSubMenu("Izracunani podatki", data_submenu); glutAddMenuEntry("Help", 0); glutAddMenuEntry("Izhod", 1); glutAttachMenu(GLUT_RIGHT_BUTTON); glutMainLoop(); } return EXIT_SUCCESS; }
Obstaja kakšna enostavna možnost, da tole popravim, da bo delovalo??
Senitel ::
Ja kodo moras popravit tako, da bos pred print3D spravil pravo stvar v message2... As simple as that.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [ACCESS] PomočOddelek: Programiranje | 1683 (1480) | Stewie |
» | Sms ni prišel do naslovnika?Oddelek: Mobilne tehnologije | 13816 (12342) | kunigunda |
» | [PHP] Uporaba ReCaptchaOddelek: Programiranje | 2494 (2149) | Blisk |
» | T-2 telefonija krši zasebnost uporabnikov ?! In pravni vidik ?Oddelek: Omrežja in internet | 6917 (5521) | ales85 |
» | Kako pobrat podatke iz datotekeOddelek: Programiranje | 1189 (928) | Trancedeejay |