Mai 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | Calendrier |
|
| | PanoMap | |
| | Auteur | Message |
---|
The Gamer
Nombre de messages : 110 Age : 30 Localisation : Toulouse (31) Date d'inscription : 11/05/2010
| Sujet: PanoMap Lun 24 Aoû 2015 - 20:59 | |
| Bonjour à tous ! J'ai hésité... Je met ça en inutilitaire ou pas ? Je m'éparpille souvent, alors mettre ce programme en projet alors qu'il risque de ne pas aboutir... Ca pourrait faire un flop. Mais bon, c'est le programme le plus élaboré que j'ai fais jusqu'ici (sans trop de bogues d'ailleurs ) alors je me permet de vous le présenter dans cette rubrique, surtout qu'il est fonctionnel pour les cubes: PanoMap est un outil que j’essaie de programmer pour me permettre de créer rapidement des maps en 3D sans avoir à coder avec Panoramic (Ou du moins c'est le programme qui le fait à ma place). Par ailleurs, j'aurais la possibilité de modifier autant de fois que je veux mon environnement 3D grâce à un enregistrement dans un fichier Excel. - Code:
-
' On cache la fenetre principale le temps du démarage du programme hide 0
' On passe le débug enn Français error_french
' Merci Silverman pour ton code sur la position de la souris
' ======= Chargement des librairies ============ dll_on "user32"
' ======= On allume Excel des le début ========= message "Veuillez patienter le temps que Excel s'ouvre" excel_start
' ======= Déclaration des label ======= ' Positionnnement de la souris label Scene_3d,Activation_scene3d,Quitter,Creation_cube,Activation_creer_cube,Nouveau_projet,Activation_modifier, Orientation_modification, Modification_cube, Exportation, Ouverture_fichier label Fermeture_fichier
' ======= Déclaration des variables =======
' Activation de la scene_3d dim scene_active
' Paramètres de l'affichage dim demi_ecran_x% dim demi_ecran_y%
' Comportement de la souris dim souris_mouv_x dim souris_mouv_y dim init_pos_souris dim position_souris
' Repère sphérique et cartésiens pour le pointage caméra dim sph_point_teta dim sph_point_phi dim sph_point_R
dim cart_point_x dim cart_point_y dim cart_point_z
' Repère cartesien pour la position de la caméra dim cam_pos_x dim cam_pos_y dim cam_pos_z dim cam_ampli dim cam_osci dim cam_freq
' Position du pointeur 3d (autour duquel la caméra tourne) dim pos_pointeur_x dim pos_pointeur_y dim pos_pointeur_z dim vit_mouv_camera
' Repère sphérique + variables nécéssaire a la rotation de la caméra pendant le chargement dim cam_pos_phi
' Sensibilité de la souris dim sensi
' Paramètre du zoom caméra dim vitesse_zoom
' Variable de création d'objets dim num_dernier_objet dim num_courant_objet dim type_courant_objet$
' Variables pour la lecture et l'édition du fichier de sauvegarde dim edition_fichier dim a$ dim fichier_courant_bas$ dim fichier_courant_xls$ dim ligne$
' Compteurs pour boucle utilisés de multiples fois ' Compteur utilisés dans les timers dim i dim j ' Compteur hors timer dim f dim n
' ======= Initialisation des variables =======
' Activité de la scene_3d scene_active = 0
' Position/sensibilité du pointeur sph_point_R = 3 sph_point_teta=0 sph_point_phi=0 sensi=0.5 vit_mouv_camera = 0.1
' Position du pointeur 3d (autour duquel la caméra tourne) pos_pointeur_x = 0 pos_pointeur_y = 0 pos_pointeur_z = 0
' Position de la caméra cam_pos_x = 0 cam_pos_y = 0 cam_pos_phi = 0
' Paramètres de la fenetre demi_ecran_x% = screen_x/2 demi_ecran_y% = screen_y/2
' Paramètre du zoom caméra vitesse_zoom = 0.1
' Initialisation des variables de création d'objet num_dernier_objet = 0 num_courant_objet = num_dernier_objet
' Variables relative a l'édition du ficher edition_fichier = 0
' ======= Initialisation de l'affichage =======
' Création de la fenetre caption 0,"PanoMap" ' width 0,screen_x ' height 0,screen_y full_space 0 on_close 0,Quitter
' Création de la fenetre de création d'objet
form 65 hide 65 Caption 65, "Conversion..." Border_small 65 height 65,95 width 65,316 left 65,screen_x/2-155.5 top 65,screen_y/2-52.5
alpha 66 parent 66,65 caption 66,"Veuillez patienter..."
progress_bar 67 parent 67,65 height 67,45 width 67,300 top 67,15 min 67,0 max 67,num_dernier_objet position 67,0
' Création de la barre de menus main_menu 1
sub_menu 2 parent 2,1 caption 2,"Fichier" sub_menu 3 parent 3,2 caption 3,"Nouveau projet" on_click 3,Nouveau_projet
sub_menu 63 parent 63,2 Caption 63,"Ouvrir" on_click 63,Ouverture_fichier
sub_menu 61 parent 61,2 Caption 61,"Exporter en .bas" on_click 61,Exportation
sub_menu 4 parent 4,2 caption 4,"Quitter" on_click 4,Quitter
sub_menu 5 parent 5,1 caption 5,"Créer" inactive 5
sub_menu 6 parent 6,5 caption 6,"Cube" On_click 6,Activation_creer_cube
sub_menu 60 parent 60,1 caption 60,"Modifier" on_click 60,Activation_modifier inactive 60
' Création des objets de création ' --> Paramètre de position alpha 7 caption 7,"Position objet:" top 7,3 left 7,screen_x - 190
alpha 8 top 8,28 left 8,screen_x - 190 caption 8,"X:"
edit 9 top 9,25 height 9,20 left 9,screen_x-180 width 9,30
alpha 10 top 10,28 left 10,screen_x - 145 caption 10,"Y:"
edit 11 top 11,25 height 11,20 left 11,screen_x-135 width 11,30
alpha 12 top 12,28 left 12,screen_x - 95 caption 12,"Z:"
edit 13 top 13,25 height 13,20 left 13,screen_x-85 width 13,30
' --> Couleur alpha 14 caption 14,"Couleur" top 14,48 left 14,screen_x - 190
alpha 15 top 15,68 left 15,screen_x - 190 caption 15,"R:"
edit 16 top 16,65 height 16,20 left 16,screen_x-180 width 16,30
alpha 17 top 17,68 left 17,screen_x - 145 caption 17,"V:"
edit 18 top 18,65 height 18,20 left 18,screen_x-135 width 18,30
alpha 19 top 19,68 left 19,screen_x - 95 caption 19,"B:"
edit 20 top 20,65 height 20,20 left 20,screen_x-85 width 20,30
' --> Rotation du cube
alpha 21 caption 21,"Rotation objet:" top 21,88 left 21,screen_x - 190
alpha 22 top 22,108 left 22,screen_x - 190 caption 22,"X:"
edit 23 top 23,105 height 23,20 left 23,screen_x-180 width 23,30
alpha 24 top 24,108 left 24,screen_x - 145 caption 24,"Y:"
edit 25 top 25,105 height 25,20 left 25,screen_x-135 width 25,30
alpha 26 top 26,108 left 26,screen_x - 95 caption 26,"Z:"
edit 27 top 27,105 height 27,20 left 27,screen_x-85 width 27,30
' --> Transparence alpha 28 caption 28,"Transparence:" top 28,140 left 28,screen_x - 190
edit 29 top 29,137 height 29,20 left 29,screen_x-120 width 29,30
' --> Paramètre spécifiques au cube
alpha 30 caption 30,"Taille arete:" top 30,163 left 30,screen_x - 190
edit 31 top 31,160 height 31,20 left 31,screen_x-130 width 31,30
' --> Boutton de création d'un cube button 32 caption 32,"Valider le cube" top 32,screen_y - 150 left 32, screen_x - 160 height 32,30 width 32,100 on_click 32,Creation_cube
' --> List pour la sélection d'objet sur la map alpha 33 top 33,10 left 33,screen_x-190 caption 33,"Sélection objet:"
list 34 top 34,30 left 34,screen_x-190
Button 35 caption 35,"Selectionner" Top 35,150 left 35,screen_x-150 on_click 35,Orientation_modification
' --> On cache les objets relatifs a la création d'objets 3D for f=7 to 35 hide f next f
' Création de la scene 3d scene3d 50 color 50,0,0,0 axes_show height 50,screen_y - 120 width 50,screen_x-200 on_click 50,Activation_scene3d hide 50 ' Création du quadrillage de la map n =100 for i=0 to n 3d_line 90,-1*(n/2),0,-1*(n/2)+i 3d_line 90,n/2,0,-1*(n/2)+i i=i+1 3d_line 90,n/2,0,-1*(n/2)+i 3d_line 90,-1*(n/2),0,-1*(n/2)+i next i
for i=0 to 100 3d_line 91,-1*(n/2)+i,0,(n/2) 3d_line 91,-1*(n/2)+i,0,-1*(n/2) i=i+1 3d_line 91,-1*(n/2)+i,0,-1*(n/2) 3d_line 91,-1*(n/2)+i,0,(n/2) next i
3d_color 90,100,100,100 3d_color 91,100,100,100
' Calcul des coordonnées de la caméra 3D cart_point_x = sph_point_R*cos(sph_point_teta*(3.141592654/180))*cos(sph_point_phi*(3.141592654/180))+ pos_pointeur_x cart_point_z = sph_point_R*cos(sph_point_teta*(3.141592654/180))*sin(sph_point_phi*(3.141592654/180))+ pos_pointeur_z cart_point_y = sph_point_R*sin(sph_point_teta*(3.141592654/180)) + 0.3*cam_ampli*sin(cam_osci*(3.141592654/180)) + pos_pointeur_y
' Actualisation affichage cam_position cart_point_x,cart_point_y,cart_point_z light_position cart_point_x+1,cart_point_y+1,cart_point_z+1 point_position pos_pointeur_x,pos_pointeur_y,pos_pointeur_z
' On affiche la fenetre principale wait 500 ' hide 100 show 0
' Création des TIMER timer 51 timer_interval 51,5 on_timer 51,Scene_3d timer_off 51
' Création de la fenetre de sauvegarde open_dialog 52 filter 52,"Fichier excel|*xlsx"
end
' ======= Ecriture des sous-programmes =======
' === Scene_3d (mouvement caméra) ===
Scene_3d:
' Actualisation des informaion de position print_locate 10,screen_y - 115 print "Vue active" + " X=" + str$(pos_pointeur_x) + " Y=" + str$(pos_pointeur_y) + " Z=" + str$(pos_pointeur_z) + " ==> Echap pour quitter <=="
' Détection des mouvements de souris if init_pos_souris=1 init_pos_souris=0 souris_mouv_x=mouse_x_position(50) souris_mouv_y=mouse_y_position(50) end_if
' Réinitialisation de la position curseur et calcul de son déplacement position_souris= dll_call2("SetCursorPos",demi_ecran_x%,demi_ecran_y%) sph_point_phi = sph_point_phi-(mouse_x_position(50)-souris_mouv_x)*sensi sph_point_teta=sph_point_teta+(mouse_y_position(50)-souris_mouv_y)*sensi
' Vérrouillage de l'axe vertical if sph_point_teta > 85 sph_point_teta=85 end_if if sph_point_teta < -85 sph_point_teta=-85 end_if
' Detection des cmandes clavier ' --> Quitter if scancode = 27 scene_active = 0 timer_off 51 ' On écrit la position du pointeur 3d wait 100 print_locate 10,screen_y - 115 print "Vue inactive" + " X=" + str$(pos_pointeur_x) + " Y=" + str$(pos_pointeur_y) + " Z=" + str$(pos_pointeur_z) + " ==> Cliquez pour entrer <==" cursor_default 50 end_if ' --> Zoom avant if scancode=107 and sph_point_R > 1 sph_point_R = sph_point_R - vitesse_zoom end_if if scancode=109 and sph_point_R < 10 sph_point_R = sph_point_R + vitesse_zoom end_if ' --> Déplacement de la caméra if scancode=38 pos_pointeur_x = pos_pointeur_x + vit_mouv_camera end_if if scancode=40 pos_pointeur_x = pos_pointeur_x - vit_mouv_camera end_if if scancode=39 pos_pointeur_z = pos_pointeur_z + vit_mouv_camera end_if if scancode=37 pos_pointeur_z = pos_pointeur_z - vit_mouv_camera end_if
' Calcul des coordonnées de la caméra 3D cart_point_x = sph_point_R*cos(sph_point_teta*(3.141592654/180))*cos(sph_point_phi*(3.141592654/180))+ pos_pointeur_x cart_point_z = sph_point_R*cos(sph_point_teta*(3.141592654/180))*sin(sph_point_phi*(3.141592654/180))+ pos_pointeur_z cart_point_y = sph_point_R*sin(sph_point_teta*(3.141592654/180)) + 0.3*cam_ampli*sin(cam_osci*(3.141592654/180)) + pos_pointeur_y
' Actualisation affichage cam_position cart_point_x,cart_point_y,cart_point_z light_position cart_point_x+1,cart_point_y+1,cart_point_z+1 point_position pos_pointeur_x,pos_pointeur_y,pos_pointeur_z
return
Activation_scene3d: ' Sous-programme qui permet de se déplacer de façon facile dans la scene 3d ' Test pour voir si l'utilisation n'a pas déja activé la scene 3d if scene_active=0 ' On cache le curseur cursor_hide 50 ' On écrit la position du pointeur 3d print_locate 10,screen_y - 115 print "Vue active" + " X=" + str$(pos_pointeur_x) + " Y=" + str$(pos_pointeur_y) + " Z=" + str$(pos_pointeur_z) + " ==> Echap pour quitter <=="
' Initialisation position souris init_pos_souris = 1 position_souris = dll_call2("SetCursorPos",demi_ecran_x%,demi_ecran_y%)
' Activation du timer de programme principal scene_active = 1 timer_on 51 end_if
return
Quitter: timer_off_all if edition_fichier = 1 message "Pensez a sauvegarder votre projet excel avant de quitter." excel_file_close 2 end_if excel_stop terminate return
Activation_creer_cube: ' Programme qui active le module de création de cube ' On cache les commandes de modification for f=33 to 35 hide f next f
' Affichage des commandes de création for f=7 to 32 show f next f
' Création d'un nouveau numéro de cube num_dernier_objet = num_dernier_objet + 1 num_courant_objet = num_dernier_objet
' On demande a l'utilisateur de nommer l'objet ligne$ = str$(num_courant_objet+2) excel_write "A"+ligne$,message_input$("Nom de l'objet","Donnez un nom au cube","Nouveau_cube"+str$(num_dernier_objet)) ' On ecrit le numéro du dernier objet créé excel_write "B1",num_dernier_objet return
Creation_cube: ' Programme qui permet la création de cube
' On vérifie la présence préalable du cube et on le supprime si OUI if o3d_object_exists(num_courant_objet)=1 3d_delete num_courant_objet end_if
' Création de l'objet pour l'aperçu 3d_cube num_courant_objet, val(text$(31)) 3d_position num_courant_objet,val(text$(9)),val(text$(11)),val(text$(13)) 3d_color num_courant_objet,val(text$(16)),val(text$(18)),val(text$(20)) 3d_rotate num_courant_objet,val(text$(23)),val(text$(25)),val(text$(27)) 3d_transparent num_courant_objet,val(text$(29))
' Enregistrement dans le fichier excel ligne$ = str$(num_courant_objet+2) excel_write "B"+ligne$,"Cube" excel_write "C"+ligne$,val(text$(9)) excel_write "D"+ligne$,val(text$(11)) excel_write "E"+ligne$,val(text$(13)) excel_write "F"+ligne$,val(text$(16)) excel_write "G"+ligne$,val(text$(18)) excel_write "H"+ligne$,val(text$(20)) excel_write "I"+ligne$,val(text$(23)) excel_write "J"+ligne$,val(text$(25)) excel_write "K"+ligne$,val(text$(27)) excel_write "L"+ligne$,val(text$(29)) excel_write "M"+ligne$,val(text$(31))
' Centrage de la caméra sur le nouvel objet pos_pointeur_x = val(text$(9)) pos_pointeur_y = val(text$(11)) pos_pointeur_z = val(text$(13))
' Calcul des coordonnées de la caméra 3D cart_point_x = sph_point_R*cos(sph_point_teta*(3.141592654/180))*cos(sph_point_phi*(3.141592654/180))+ pos_pointeur_x cart_point_z = sph_point_R*cos(sph_point_teta*(3.141592654/180))*sin(sph_point_phi*(3.141592654/180))+ pos_pointeur_z cart_point_y = sph_point_R*sin(sph_point_teta*(3.141592654/180)) + 0.3*cam_ampli*sin(cam_osci*(3.141592654/180)) + pos_pointeur_y
' Actualisation affichage cam_position cart_point_x,cart_point_y,cart_point_z light_position cart_point_x+1,cart_point_y+1,cart_point_z+1 point_position pos_pointeur_x,pos_pointeur_y,pos_pointeur_z
' On cache les des commandes de création for f=7 to 35 hide f next f
return
Nouveau_projet: ' Programme qui crée un nouveau projet ' Fermeture du projet existant si un projet est ouvert if edition_fichier =1
end_if
' On crée le nouveau fichier excel dans lequel seront enregistrés les différentes valeurs excel_file_new 2 ' On ecrit le début de la ligne qui annonce le numéro maximal d'objet 3D excel_write "A1","Numéro du dernier objet:" ' On crée les nom des colonnes du fichier Excel excel_write "A2","Nom" excel_write "B2","Type" excel_write "C2","Pos X" excel_write "D2","Pos Y" excel_write "E2","Pos Z" excel_write "F2","Coul R" excel_write "G2","Coul V" excel_write "H2","Coul B" excel_write "I2","Rot X" excel_write "J2","Rot Y" excel_write "K2","Rot Z" excel_write "L2","Transp" excel_write "M2","Arr-Ray (cube,sphere)" ' On déclare le fichier actif au programme edition_fichier = 1 ' Activation des commandes d'édition de l'environnemnt 3d active 5 active 60 inactive 3 ' Affichage de la scene3d de travail show 50
return
Activation_modifier: ' On cache les commandes de modification for f=7 to 32 hide f next f
' Affichage des commandes de sélection for i=33 to 35 show i next i
' On vide la liste des items déja_présents clear 34
' Création d'une liste des objets présents for i=3 to num_dernier_objet+2 item_add 34,excel_read$("A"+str$(i)) next i
return
Orientation_modification:
' On désigne l'objet courant à modifier num_courant_objet = item_index(34) type_courant_objet$ = excel_read$("B"+str$(num_courant_objet+2))
' On oriente l'utilisateur vers une série de commande d'édition en fonction de la nature de l'objet if type_courant_objet$ = "Cube" gosub Modification_cube end_if
return
Modification_cube: ' Programme permettant d'éditer un cube ' On cache les commandes de modification for f=33 to 35 hide f next f
' Affichage des commandes de création for f=7 to 32 show f next f
' Chargement des propriétés de l'objet dans les édits ligne$ = str$(num_courant_objet+2) text 9,excel_read$("C"+ligne$) text 11,excel_read$("D"+ligne$) text 13,excel_read$("E"+ligne$) text 16,excel_read$("F"+ligne$) text 18,excel_read$("G"+ligne$) text 20,excel_read$("H"+ligne$) text 23,excel_read$("I"+ligne$) text 25,excel_read$("J"+ligne$) text 27,excel_read$("K"+ligne$) text 29,excel_read$("L"+ligne$) text 31,excel_read$("M"+ligne$)
' Centrage de la caméra sur l'objet a modifier pos_pointeur_x = val(text$(9)) pos_pointeur_y = val(text$(11)) pos_pointeur_z = val(text$(13))
' Calcul des coordonnées de la caméra 3D cart_point_x = sph_point_R*cos(sph_point_teta*(3.141592654/180))*cos(sph_point_phi*(3.141592654/180))+ pos_pointeur_x cart_point_z = sph_point_R*cos(sph_point_teta*(3.141592654/180))*sin(sph_point_phi*(3.141592654/180))+ pos_pointeur_z cart_point_y = sph_point_R*sin(sph_point_teta*(3.141592654/180)) + 0.3*cam_ampli*sin(cam_osci*(3.141592654/180)) + pos_pointeur_y
' Actualisation affichage cam_position cart_point_x,cart_point_y,cart_point_z light_position cart_point_x+1,cart_point_y+1,cart_point_z+1 point_position pos_pointeur_x,pos_pointeur_y,pos_pointeur_z
return
Exportation:
' On inactive la fenetre pendant que l'utilisateur patiente inactive 0
' On affiche la fenetre d'exportation et les élément indiquant la progression Caption 65,"Exportation" show 65 ' On demande a l'utilisateur de choisir l'emplacement du fichier a exporter a$=file_name$(52)+".bas"
' On crée le fichier en .bas qui va accueillir le code en panoramic file_open_write 1,a$ ' Début d'écriture du fichier (on écrit la date et l'heure en commentaires) file_writeln 1,"' Map créée le " + date$ + " - " + time$ file_writeln 1,""
' Lecture linéaire du fichier Excel for i=3 to num_dernier_objet+3 j=i-2 ' Encodage dans le cas d'un cube if excel_read$("B"+str$(i))="Cube" file_writeln 1,"' "+excel_read$("A"+str$(i)) file_writeln 1,"3d_cube " + str$(j) + "," + excel_read$("M" + str$(i)) file_writeln 1,"3d_position " + str$(j) + "," + excel_read$("C" + str$(i)) + "," + excel_read$("D" + str$(i)) +"," + excel_read$("E" + str$(i)) file_writeln 1,"3d_color " + str$(j) + "," + excel_read$("F" + str$(i)) + "," + excel_read$("G" + str$(i)) +"," + excel_read$("H" + str$(i)) file_writeln 1,"3d_rotate " + str$(j) + "," + excel_read$("I" + str$(i)) + "," + excel_read$("J" + str$(i)) +"," + excel_read$("K" + str$(i)) file_writeln 1,"3d_transparent " + str$(j) + "," + excel_read$("L" + str$(i)) file_writeln 1,"" position 67,i end_if next i ' Fermeture du fichier en écriture file_close 1 ' Fin de l'exportation hide 65 message "Exportation en fichier Panoramic terminée" active 0
return
Ouverture_fichier:
' On vérifie s'il y a un fichier déja en édition if edition_fichier = 1 if message_confirmation_ok("Pour créer un nouveau projet, vous devez enregistrer le projet courant. Enregistrer le projet courant et créer un nouveau projet ?")=1 ' fermeture du fichier excel excel_file_close 2
' On nettoie la scene 3D hide 50 for i=1 to num_dernier_objet if o3d_object_exists(i)=1 3d_delete i end_if next i end_if end_if
' Ouverture du nouveau fichier excel i=0 while i = 0 a$=file_name$(52) fichier_courant_xls$=a$ if file_exists(fichier_courant_xls$)=1 excel_file_open 2,fichier_courant_xls$ i=1 else i=0 message "Fichier non valide" a$=file_name$(52) end_if end_while
' On identifie le nombre d'objets a charger dans le nouveau projet num_dernier_objet = val(excel_read$("B1"))
' Affichage de la fenetre de chargement caption 65,"Ouverture du fichier" position 67,0 max 67,num_dernier_objet inactive 0 show 65
' On rempli le scene 3D avec les objets du projet chargé for i=1 to num_dernier_objet ligne$=str$(i+2) if excel_read$("B"+ligne$)="Cube" 3d_cube i,val(excel_read$("M"+ligne$)) 3d_position i,val(excel_read$("C"+ligne$)),val(excel_read$("D"+ligne$)),val(excel_read$("E"+ligne$)) 3d_color i,val(excel_read$("F"+ligne$)),val(excel_read$("G"+ligne$)),val(excel_read$("H"+ligne$)) 3d_rotate i,val(excel_read$("I"+ligne$)),val(excel_read$("J"+ligne$)),val(excel_read$("K"+ligne$)) 3d_transparent i,val(excel_read$("L"+ligne$)) position 67,i end_if next i ' Fermeture de la fenetre de chargement hide 65 position 67,0 message "Ouverture du fichier réussie" active 0 ' Centrage de la caméra pos_pointeur_x = 0 pos_pointeur_y = 0 pos_pointeur_z = 0 ' Affichage de la scene 3d show 50 ' Activation des menu de modification active 5 active 60 ' On déclare l'édition du fichier au logiciel edition_fichier = 1 return
Fermeture_fichier:
' On vérifie s'il y a un fichier déja en édition if edition_fichier = 1 if message_confirmation_ok("Pour fermer le projet, vous devez l'enregistrer avec Excel afin de pouvoir le modifier a l'avenir")=1 ' fermeture du fichier excel excel_file_close 2
' On nettoie la scene 3D hide 50 for i=1 to num_dernier_objet 3d_delete i next i show 50 ' On déclare au programme qu'il n'y a pas d'édition de fichier edition_fichier = 0 end_if else message "Aucun fichier en édition pour le moment" end_if
return Quelques éléments pour utiliser le programme: cliquer dans le scene_3d pour allumer la rotation de la caméra et les comandes ci-dessous • + : Zoom avant • - : Zoom arrière • Fleches du clavier : déplacement sur les axes X et Z Echap : permet de quitter le déplacement dans le scene_3d pour accéder aux commandes de la fenetre Menu fichier: Ouvrir, Enregister, EXPORTER ==> permet de convertir en projet en language Panoramic (et sa marche normalement) Menu Créer: permet de créer un cube Menu modifier : Permet de modifier un cube existant Il y a encore beaucoup de bug, le programme n'est pas encore performant et stable: --> Bug a la fermeture (PREPAREZ LE GESTIONNAIRE) Je sais pas d'ou sa vient mais des fois sa plante (peut etre quand plusieurs processus excel sont en cours...) --> Les numéro des objets manquent de structuration... --> Pas de chexking du remplissage des EDIT (proporiétés objets) ce qui peut amener a des pb si vous dépassez les limites (ex: 400 dans la case "R") --> Vous rencontrez d'autres bug majeurs ? EDIT: Je viens de regarder ce qu'a fait Bigono... Et effectivement, il a conçu ce genre de programme de façon beaucoup plus complette. Je suis d'ailleurs hyper admiratif Mais j'éssaie de créer un programme a ma sauce du coup car ca m'intérresse. EDIT BIS: Si vous avez Excel 2003, modifiez l'extension du filter pour l'OPEN_DIALOG
Dernière édition par The Gamer le Lun 24 Aoû 2015 - 23:46, édité 4 fois | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: PanoMap Lun 24 Aoû 2015 - 22:18 | |
| J'ai pas Excel dommage... | |
| | | The Gamer
Nombre de messages : 110 Age : 30 Localisation : Toulouse (31) Date d'inscription : 11/05/2010
| Sujet: Re: PanoMap Lun 24 Aoû 2015 - 22:41 | |
| Pour l'instant je reste avec excel, mais je vais essayer de m'en passer en utilisant un grid par exemple ou un fichier texte tout simplement | |
| | | Yannick
Nombre de messages : 8611 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 25 Aoû 2015 - 3:23 | |
| Excel, pas tout le monde s' est décidé à renflouer les caisses de microsoft ( si fut il qu' il en ai besoin ). Tu peux soit partir sur un fichier type *.csv avec un séparateur ";" soit t' inspirer de la base de données ISAM de Klaus dans un fichier texte. excel_write "A2","Nom" ==> 30 caractères ( les carateres vides remplacés par chr$(32) ) excel_write "B2","Type" ==> x caractères excel_write "C2","Pos X" ==> y caractères etc.... Puis tu charges ce fichier dans un dlist et tu récupères tes données avec a$ =trim$(mid$( item_read$(dlist%,ligne%),pos%,nb_car%) ) | |
| | | The Gamer
Nombre de messages : 110 Age : 30 Localisation : Toulouse (31) Date d'inscription : 11/05/2010
| Sujet: Re: PanoMap Mar 25 Aoû 2015 - 7:39 | |
| @ Igeromini, Merci d'avoir testé ce début de projet, et merci pour ta suggestion. - Petite plaisanterie:
On peut avoir Excel sans renflouer les caisse a Microsoft ^^ mais bon la on passe un peu du coté obscur de la force ...
Trêve de plaisanterie, utiliser un grid pour stocker les données en mémoire ne serait pas mieux adapté dans mon cas qu'un dlist ? | |
| | | Yannick
Nombre de messages : 8611 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 25 Aoû 2015 - 12:14 | |
| @ The gamer, Un grid est un objet visuel, un tableau, moins évolué qu' excel. Pour le stockage tu devras de toute manière avoir un fichier externe. Pour visualiser ces données, il te faudra faire un viewer avec un grid qui sera moins formatable qu 'un fichier excel. Dans ton programme, le fichier excel est juste un fichier de stockage et la visualisation se fait dans les objets "edit". Un autre truc, si ton fichier est un stockage de données pour ta map, tant que tu travail avec ton programme, ce fichier est très bien. Mais si tu dois utiliser ces données dans un autre programme, le programme du jeu 3d, il faudra soit que ton programme récupère ces données depuis ce fichier externe, soit que ces données soient transformées en un fichier de "data" en *.bas pour être mis en "include" dans le programme. J' espère que je ne suis pas trop confus... Pour ce qui est du côté obscure de la force, cela fait un moment que j' ai la cape noire. Donc les soultions, c' est en mp.... | |
| | | The Gamer
Nombre de messages : 110 Age : 30 Localisation : Toulouse (31) Date d'inscription : 11/05/2010
| Sujet: Re: PanoMap Mer 26 Aoû 2015 - 18:23 | |
| Ok igeromini,
Pour ton système de fonctionnement de l'enregistrement, c'est le systeme que j'utilise déja avec Excel. Mon programme integre également une fonction d'export en .bas. Je vais transposer mon fonctionnement a un grid (pour l'enregistrement dynamique pendant le fonctionnement du programme, c'est plus simple de gerer les modif post-création dans un tableau que dans un fichier ou c'est écrit de façon linéaire) et enregistrer le projet en .csv (tout le monde peut lire ca ;P) au lieu d'utiliser l'excel. | |
| | | Yannick
Nombre de messages : 8611 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 26 Aoû 2015 - 19:27 | |
| Ok The Gamer, j' attends de voir pour te donner d' autres appréciations. | |
| | | The Gamer
Nombre de messages : 110 Age : 30 Localisation : Toulouse (31) Date d'inscription : 11/05/2010
| Sujet: Re: PanoMap Ven 28 Aoû 2015 - 19:52 | |
| Voila, A la demande de plusieurs d'entre vous, j'ai refais une version qui se passe totalement d'Excel pour fonctionner et fonctionne avec un grid. Si vous avez le temps d'y jeter un coup d'oeil, j'attends vos avis. Bug connus: - pas de vérification du remplissage formulaire - les fonctions des boutons "Réglage manuel" permettant de créer des cubes ne sont pas encore faites Quelques éléments pour utiliser le programme: cliquer dans le scene_3d pour allumer la rotation de la caméra et les comandes ci-dessous • + : Zoom avant • - : Zoom arrière • Fleches du clavier : déplacement sur les axes X et Z Echap : permet de quitter le déplacement dans le scene_3d pour accéder aux commandes de la fenetre Menu fichier: Ouvrir, Enregister, EXPORTER ==> permet de convertir en projet en language Panoramic (et sa marche normalement) Menu Créer: permet de créer un cube Menu modifier : Permet de modifier un cube existant - Code:
-
' PanoMap version 0.2 Bêta 1 ' Merci Silverman pour ta contribution au code de déplacement de la caméra 3D
' On cache la fenetre principale le temps du démarage du programme hide 0
' Merci Silverman pour ton code sur la position de la souris
' ======= Chargement des librairies ============ dll_on "user32"
' ======= Déclaration des label ======= label Scene_3d,Activation_scene3d,Quitter,Creation_cube,Activation_creer_cube,Nouveau_projet,Activation_modifier, Actualisation_camera label Fermeture_fichier, Orientation_modification, Modification_cube, Exportation, Ouverture_fichier, Enregistrement_fichier, Chargement_fichier
' ======= Déclaration des variables =======
' Activation de la scene_3d dim scene_active
' Paramètres de l'affichage dim demi_ecran_x%, demi_ecran_y%
' Comportement de la souris dim souris_mouv_x, souris_mouv_y dim init_pos_souris, position_souris
' Repère sphérique et cartésiens pour le pointage caméra dim sph_point_teta, sph_point_phi, sph_point_R dim cart_point_x, cart_point_y, cart_point_z
' Repère cartesien pour la position de la caméra dim cam_pos_x, cam_pos_y, cam_pos_z dim cam_ampli, cam_osci, cam_freq
' Position du pointeur 3d (autour duquel la caméra tourne) dim pos_pointeur_x, pos_pointeur_y, pos_pointeur_z dim vit_mouv_camera
' Sensibilité de la souris dim sensi
' Paramètre du zoom caméra dim vitesse_zoom
' Variable de création d'objets dim num_dernier_objet dim num_courant_objet dim num_premier_objet dim type_courant_objet
' Variables pour la lecture et l'édition du fichier de sauvegarde dim edition_fichier dim confirmation_fermeture dim a$,b$ dim fichier_courant_xls$
' Variable pour le déplacement dynamique dans le grid de stockage dim ligne dim colonne dim n_col_grid
' Compteurs pour boucle utilisés de multiples fois dim i,j,l : ' compteur pour timers dim f,n : ' compteur hors timers
' ======= Initialisation des variables =======
' Activité de la scene_3d scene_active = 0
' Position/sensibilité du pointeur sph_point_R = 3 sph_point_teta=20 sph_point_phi=-45 sensi=0.5 vit_mouv_camera = 0.1
' Position du pointeur 3d (autour duquel la caméra tourne) pos_pointeur_x = 0 pos_pointeur_y = 0 pos_pointeur_z = 0
' Position de la caméra cam_pos_x = 0 cam_pos_y = 0
' Paramètres de la fenetre demi_ecran_x% = screen_x/2 demi_ecran_y% = screen_y/2
' Paramètre du zoom caméra vitesse_zoom = 0.1
' Initialisation des variables de création d'objet num_premier_objet = 3 num_dernier_objet = num_premier_objet-1 num_courant_objet = num_dernier_objet
' Variables relative a l'édition du ficher edition_fichier = 0 ' Variables de réglage du grid n_col_grid = 13
' ======= Création des objets de fenetre =======
' Fenetre principale caption 0,"3D Mapper" full_space 0 on_close 0, Quitter
' Fenetre de chargement form 1 : hide 1 caption 1, "Chargement..." : border_small 1 height 1, 95 : width 1,316 left 1, demi_ecran_x%-155.5 : top 1,demi_ecran_y%-52.5
' Fenetre de débug form 2 : hide 2 Caption 2,"Fenetre de débug" print_target_is 2
' Fenetre d'ouverture open_dialog 3
' ============ Menus de la fenetre principale ================ main_menu 4
' Fichier sub_menu 5 : parent 5,4 : caption 5,"Fichier" sub_menu 6 : parent 6,5 : caption 6,"Nouveau projet" : on_click 6,Nouveau_projet sub_menu 7 : parent 7,5 : caption 7,"Ouvrir" : on_click 7,Ouverture_fichier sub_menu 51: parent 51,5: caption 51,"Enregistrer" : on_click 51,Enregistrement_fichier : inactive 51 sub_menu 8 : parent 8,5 : caption 8,"Exporter en .bas" : on_click 8,Exportation sub_menu 52: parent 52,5: caption 52,"Fermer le fichier": on_click 52,Fermeture_fichier : inactive 52 sub_menu 9 : parent 9,5 : caption 9,"Quitter" : on_click 9,Quitter
' Créer sub_menu 10 : parent 10,4 : caption 10,"Créer" : inactive 10 sub_menu 11 : parent 11,10 : caption 11,"Cube" :on_click 11,Activation_creer_cube sub_menu 12 : parent 12,4 : caption 12,"Modifier" :on_click 12,Activation_modifier : inactive 12
' ============ Création de la scene 3D de travail ============= scene3d 13 color 13,0,0,0 axes_show height 13,screen_y - 260 width 13,screen_x-200 on_click 13,Activation_scene3d hide 13 ' Tracé du quadrillage n = 100 for i=0 to n 3d_line 1,-1*(n/2),0,-1*(n/2)+i 3d_line 1,n/2,0,-1*(n/2)+i i=i+1 3d_line 1,n/2,0,-1*(n/2)+i 3d_line 1,-1*(n/2),0,-1*(n/2)+i next i
for i=0 to n 3d_line 2,-1*(n/2)+i,0,(n/2) 3d_line 2,-1*(n/2)+i,0,-1*(n/2) i=i+1 3d_line 2,-1*(n/2)+i,0,-1*(n/2) 3d_line 2,-1*(n/2)+i,0,(n/2) next i
3d_color 1,100,100,100 3d_color 2,100,100,100 ' Cube pour éviter le bug a la fermeture sans création d'objets 3d_cube 3,1 3d_hide 3 ' ======== Ecran de controle de la caméra 3D ==================
alpha 53 : top 53,screen_y - 255 : left 53,10 : Caption 53,"Position pointeur: X=0 Y=0 Z=0" : font_color 53,255,0,0 : hide 53 alpha 54 : top 54,screen_y - 235 : left 54,10 : Caption 54,"Position caméra: X=0 Y=0 Z=0" : font_color 54,255,0,0 : hide 54
' ======== Construction de la fenetre de chargement =========== alpha 14 parent 14,1 caption 14,"Veuillez patienter..."
progress_bar 15 parent 15,1 height 15,45 width 15,300 top 15,15 min 15,0 max 15,num_dernier_objet position 15,0 ' ======== Création des timer pour les opérations à commande continue =========== timer 16 timer_interval 16,5 on_timer 16,Scene_3d timer_off 16
' ======== Création des objets de modification =========== alpha 17 top 17,10 left 17,screen_x-190 caption 17,"Sélection objet:"
list 18 top 18,30 left 18,screen_x-190
button 19 caption 19,"Selectionner" top 19,150 left 19,screen_x-150 on_click 19,Orientation_modification ' On cache les objets de création for i=17 to 19 hide i next i ' ======== Création de l'interface de création ======== ' Position de l'objet Alpha 20 : top 20,5 : left 20,screen_x - 190 : caption 20,"Position de l'objet" Alpha 21 : top 21,28 : left 21,screen_x - 190 : caption 21,"X" Alpha 22 : top 22,28 : left 22,screen_x - 150 : caption 22,"Y" Alpha 23 : top 23,28 : left 23,screen_x - 110 : caption 23,"Z" Edit 24 : top 24,25 : left 24,screen_x - 180 : width 24,25 : text 24,"0" Edit 25 : top 25,25 : left 25,screen_x - 140 : width 25,25 : text 25,"0" Edit 26 : top 26,25 : left 26,screen_x - 100 : width 26,25 : text 26,"0" Button 27 : top 27,55 : left 27,screen_x - 170 : width 27,90 : Caption 27, "Reglage manuel"
' Rotation de l'objet Alpha 28 : top 28,95 : left 28,screen_x - 190 : caption 28,"Rotation de l'objet" Alpha 29 : top 29,118 : left 29,screen_x - 190 : caption 29,"X" Alpha 30 : top 30,118 : left 30,screen_x - 150 : caption 30,"Y" Alpha 31 : top 31,118 : left 31,screen_x - 110 : caption 31,"Z" Edit 32 : top 32,115 : left 32,screen_x - 180 : width 32,25 : text 32,"0" Edit 33 : top 33,115 : left 33,screen_x - 140 : width 33,25 : text 33,"0" Edit 34 : top 34,115 : left 34,screen_x - 100 : width 34,25 : text 34,"0" Button 35 : top 35,145 : left 35,screen_x - 170 : width 35,90 : Caption 35, "Reglage manuel"
' Couleur de l'objet Alpha 36 : top 36,185 : left 36,screen_x - 190 : caption 36,"Couleur de l'objet (entre 0 et 255)" Alpha 37 : top 37,208 : left 37,screen_x - 190 : caption 37,"R" Alpha 38 : top 38,208 : left 38,screen_x - 150 : caption 38,"V" Alpha 39 : top 39,208 : left 39,screen_x - 110 : caption 39,"B" Edit 40 : top 40,205 : left 40,screen_x - 180 : width 40,25 : text 40,"0" Edit 41 : top 41,205 : left 41,screen_x - 140 : width 41,25 : text 41,"0" Edit 42 : top 42,205 : left 42,screen_x - 100 : width 42,25 : text 42,"0" Button 43 : top 43,235 : left 43,screen_x - 170 : width 43,90 : Caption 43, "Palette"
' Paramètre spécifique au cube Alpha 44 : top 44,275 : left 44,screen_x - 190 : caption 44,"Arête du cube" Edit 45 : top 45,295 : left 45,screen_x - 190 : width 45,25 : text 45,"1" Alpha 46 : top 46,335 : left 46,screen_x - 190 : caption 46,"Transparence" Edit 47 : top 47,355 : left 47,screen_x - 190 : width 47,25 : text 47,"0"
' Boutton de validation Button 48 : top 48,screen_y - 130 : left 48,screen_x - 150 : caption 48,"Valider" : on_click 48,Creation_cube ' ======== Création du grid de stockage dynamique ======== grid 49 : grid_column 49,n_col_grid : grid_row 49,2 : top 49,screen_y - 215 : height 49,100 : width 49,screen_x-200
' On crée les nom des colonnes du grid grid_write 49,1,1,"N Objets" : grid_write 49,1,2,"0" grid_write 49,2,1,"Nom" : grid_write 49,2,2,"Type" grid_write 49,2,3,"Pos X" : grid_write 49,2,4,"Pos Y" grid_write 49,2,5,"Pos Z" : grid_write 49,2,6,"Coul R" grid_write 49,2,7,"Coul V" : grid_write 49,2,8,"Coul B" grid_write 49,2,9,"Rot X" : grid_write 49,2,10,"Rot Y" grid_write 49,2,11,"Rot Z" : grid_write 49,2,12,"Transp" grid_write 49,2,13,"Arr-Ray (cube,sphere)" ' ======== Fenetre de sauvegarde ========= save_dialog 50 ' RAPPEL ==> Numéro du dernier objet : 52 ' ======== On cache les objets de création ========== for i=20 to 49 hide i next i
' Initialisation de la position caméra gosub Actualisation_camera
' ======== On affiche la fenetre principale ======== show 0
' ======== Fin de la création des objets et du PROGRAMME PRINCIPAL ======== end '================================================================================
' SOUS PROGRAMMES
' =============================================================================== Scene_3d:
' Détection des mouvements de souris if init_pos_souris=1 init_pos_souris=0 souris_mouv_x=mouse_x_position(13) souris_mouv_y=mouse_y_position(13) end_if
' Réinitialisation de la position curseur et calcul de son déplacement position_souris= dll_call2("SetCursorPos",demi_ecran_x%,demi_ecran_y%) sph_point_phi = sph_point_phi-(mouse_x_position(13)-souris_mouv_x)*sensi sph_point_teta=sph_point_teta+(mouse_y_position(13)-souris_mouv_y)*sensi
' Vérrouillage de l'axe vertical if sph_point_teta > 85 sph_point_teta=85 end_if if sph_point_teta < -85 sph_point_teta=-85 end_if
' Detection des comandes clavier: ' --> Quitter la scene 3d if scancode = 27 scene_active = 0 timer_off 16 ' On écrit la position du pointeur 3d cursor_default 13 end_if ' --> Zoom avant if scancode=107 and sph_point_R > 1 sph_point_R = sph_point_R - vitesse_zoom end_if if scancode=109 and sph_point_R < 10 sph_point_R = sph_point_R + vitesse_zoom end_if ' --> Déplacement de la caméra if scancode=38 pos_pointeur_x = pos_pointeur_x + vit_mouv_camera end_if if scancode=40 pos_pointeur_x = pos_pointeur_x - vit_mouv_camera end_if if scancode=39 pos_pointeur_z = pos_pointeur_z + vit_mouv_camera end_if if scancode=37 pos_pointeur_z = pos_pointeur_z - vit_mouv_camera end_if
' Actualisation de la position caméra gosub Actualisation_camera
return
Activation_scene3d: ' Sous-programme qui permet de se déplacer de façon facile dans la scene 3d ' Test pour voir si l'utilisation n'a pas déja activé la scene 3d if scene_active=0 ' On cache le curseur cursor_hide 13
' Initialisation position souris init_pos_souris = 1 position_souris = dll_call2("SetCursorPos",demi_ecran_x%,demi_ecran_y%)
' Activation du timer de programme principal scene_active = 1 timer_on 16 end_if return
Actualisation_camera:
' Calcul des coordonnées de la caméra 3D cart_point_x = sph_point_R*cos(sph_point_teta*(3.141592654/180))*cos(sph_point_phi*(3.141592654/180))+ pos_pointeur_x cart_point_z = sph_point_R*cos(sph_point_teta*(3.141592654/180))*sin(sph_point_phi*(3.141592654/180))+ pos_pointeur_z cart_point_y = sph_point_R*sin(sph_point_teta*(3.141592654/180)) + 0.3*cam_ampli*sin(cam_osci*(3.141592654/180)) + pos_pointeur_y
' Actualisation affichage cam_position cart_point_x,cart_point_y,cart_point_z light_position cart_point_x+1,cart_point_y+1,cart_point_z+1 point_position pos_pointeur_x,pos_pointeur_y,pos_pointeur_z ' On affiche la position de la caméra caption 54,"Position caméra: X=" + str$(cart_point_x) + " Y="+ str$(cart_point_y) + " Z=" + str$(cart_point_z) caption 53,"Position pointeur: X=" + str$(pos_pointeur_x) + " Y="+ str$(pos_pointeur_y) + " Z=" + str$(pos_pointeur_z)
return
Quitter: ' Extinction de tous les timers en cours timer_off_all ' Enregistrement du fichier en cours if edition_fichier = 1 gosub Fermeture_fichier end_if ' Extinction du programme terminate return
Activation_creer_cube:
' On cache les commandes de modification e affichage des commandes de création for i=17 to 19 hide i next i for i=20 to 48 show i next i
' Création d'un nouveau numéro de cube num_dernier_objet = num_dernier_objet + 1 num_courant_objet = num_dernier_objet
' Ecriture dans le grid de sauvegarde dynamique ligne = num_courant_objet-num_premier_objet+3 grid_row 49,ligne grid_write 49,ligne,1,message_input$("Nom de l'objet","Donnez un nom a l'objet","Objet "+str$(num_dernier_objet-num_premier_objet))
return
Creation_cube:
' On vérifie la présence préalable du cube et on le supprime si OUI if o3d_object_exists(num_courant_objet)=1 3d_delete num_courant_objet end_if
' Création de l'objet pour l'aperçu 3d_cube num_courant_objet, val(text$(45)) 3d_position num_courant_objet,val(text$(24)),val(text$(25)),val(text$(26)) 3d_color num_courant_objet,val(text$(40)),val(text$(41)),val(text$(42)) 3d_rotate num_courant_objet,val(text$(32)),val(text$(33)),val(text$(34)) 3d_transparent num_courant_objet,val(text$(47)) ' Enregistrement dans le grid de sauvegarde dynamique ligne = num_courant_objet-num_premier_objet+3 grid_write 49,ligne,2,1 grid_write 49,ligne,3,val(text$(24)) grid_write 49,ligne,4,val(text$(25)) grid_write 49,ligne,5,val(text$(26)) grid_write 49,ligne,6,val(text$(40)) grid_write 49,ligne,7,val(text$(41)) grid_write 49,ligne,8,val(text$(42)) grid_write 49,ligne,9,val(text$(32)) grid_write 49,ligne,10,val(text$(33)) grid_write 49,ligne,11,val(text$(34)) grid_write 49,ligne,12,val(text$(47)) grid_write 49,ligne,13,val(text$(45))
' On enregistre le nombre d'objet dans le grid grid_write 49,1,2,num_courant_objet - num_premier_objet + 1
' Centrage de la caméra sur le nouvel objet pos_pointeur_x = val(text$(24)) pos_pointeur_y = val(text$(25)) pos_pointeur_z = val(text$(26))
' Acutalisation de la position caméra gosub Actualisation_camera
' On cache les objets de modification for i=20 to 48 hide i next i
return
Nouveau_projet: ' Programme qui crée un nouveau projet ' Fermeture du projet existant si un projet est ouvert if edition_fichier =1 gosub Fermeture_fichier
if confirmation_fermeture = 1
' Activation des commandes d'édition de l'environnemnt 3d active 10 active 12 active 51 active 52 inactive 6 ' Affichage de la zone de travail show 13 show 53 show 54 show 49 ' On déclare le fichier en cours d'édition au programme edition_fichier = 1 else message "Vous devez fermer le projet courant pour créér un nouveau projet" end_if else ' Activation des commandes d'édition de l'environnemnt 3d active 10 active 12 active 51 active 52 inactive 6
' Affichage de la zone de travail show 13 show 53 show 54 show 49
' On déclare le fichier en cours d'édition au programme edition_fichier = 1 end_if
return
Activation_modifier: ' On cache les objets de modification for i=20 to 48 hide i next i
' Affichage des commandes de sélection for i=17 to 19 show i next i
' On vide la liste des items déja_présents clear 18
' Création de la nouvelle liste d'items de choix for i=1 to num_dernier_objet-num_premier_objet+1 item_add 18,grid_read$(49,i+2,1) next i
return
Orientation_modification:
' On désigne l'objet courant à modifier num_courant_objet = item_index(18)+num_premier_objet-1 l=num_courant_objet-num_premier_objet+3 type_courant_objet = val(grid_read$(49,l,2))
' On oriente l'utilisateur vers une série de commande d'édition en fonction de la nature de l'objet select type_courant_objet case 1 gosub Modification_cube end_select
return
Modification_cube: ' Programme permettant d'éditer un cube ' On cache les commandes de modification for f=17 to 19 hide f next f
' Affichage des commandes de création for f=20 to 48 show f next f
' Chargement des proporiétés du cube ligne = num_courant_objet-num_premier_objet+3 text 24,grid_read$(49,ligne,3) text 25,grid_read$(49,ligne,4) text 26,grid_read$(49,ligne,5) text 40,grid_read$(49,ligne,6) text 41,grid_read$(49,ligne,7) text 42,grid_read$(49,ligne,8) text 32,grid_read$(49,ligne,9) text 33,grid_read$(49,ligne,10) text 34,grid_read$(49,ligne,11) text 47,grid_read$(49,ligne,12) text 45,grid_read$(49,ligne,13)
' Centrage de la caméra sur l'objet a modifier pos_pointeur_x = val(text$(24)) pos_pointeur_y = val(text$(25)) pos_pointeur_z = val(text$(26))
' Acutalisation de la position caméra gosub Actualisation_camera
return
Exportation:
' On inactive la fenetre pendant que l'utilisateur patiente inactive 0
' On affiche la fenetre d'exportation et les élément indiquant la progression Caption 1,"Exportation" show 1 ' On demande a l'utilisateur de choisir l'emplacement du fichier a exporter a$=file_name$(3)+".bas"
' On crée le fichier en .bas qui va accueillir le code en panoramic file_open_write 1,a$ ' Début d'écriture du fichier (on écrit la date et l'heure en commentaires) file_writeln 1,"' Map créée le " + date$ + " - " + time$ file_writeln 1,""
' taille du chargement max 15,num_dernier_objet-num_premier_objet+1
' Lecture linéaire du fichier Excel for i=1 to num_dernier_objet-num_premier_objet+1 l=i+2 type_courant_objet = val(grid_read$(49,l,2)) select type_courant_objet case 1 : ' Encodage dans le cas d'un cube file_writeln 1,"' "+ grid_read$(49,l,1) file_writeln 1,"3d_cube " + str$(i) + "," + grid_read$(49,l,13) file_writeln 1,"3d_position " + str$(i) + "," + grid_read$(49,l,3) + "," + grid_read$(49,l,4) +"," + grid_read$(49,l,5) file_writeln 1,"3d_color " + str$(i) + "," + grid_read$(49,l,6) + "," + grid_read$(49,l,7) +"," + grid_read$(49,l,8) file_writeln 1,"3d_rotate " + str$(i) + "," + grid_read$(49,l,9) + "," + grid_read$(49,l,10) +"," + grid_read$(49,l,11) file_writeln 1,"3d_transparent " + str$(i) + "," + grid_read$(49,l,12) file_writeln 1,"" position 15,i end_select next i ' Fermeture du fichier en écriture file_close 1 ' Fin de l'exportation hide 1 message "Exportation en fichier Panoramic terminée" active 0
return
Ouverture_fichier:
if edition_fichier = 1 gosub Fermeture_fichier if confirmation_fermeture = 1 filter 3,"Fichier map | *.map" a$ = file_name$(3) if a$="_" message "Aucun fichier ouvert" else gosub Chargement_fichier
end_if else message "Vous devez fermer le projet courant pour pouvoir ouvrir/créer un autre projet" end_if
else filter 3,"Fichier map | *.map" a$ = file_name$(3) if a$="_" message "Aucun fichier ouvert" else gosub Chargement_fichier end_if
end_if return
Chargement_fichier: ' Fenetre de chargement inactive 0 caption 1,"Chargement du fichier" position 15,0 show 1
' Chargement du grid file_open_read 1,a$ j = val(file_readln$(1)) file_close 1 grid_row 49,j grid_load 49,a$
' Affichage de la map num_dernier_objet = j-2+num_premier_objet-1 for i=1 to num_dernier_objet-num_premier_objet + 1 l=i+2 num_courant_objet = i + num_premier_objet - 1 type_courant_objet = val(grid_read$(49,l,2)) select type_courant_objet case 1 : ' Objet de type cube 3d_cube num_courant_objet,val(grid_read$(49,l,13)) 3d_position num_courant_objet,val(grid_read$(49,l,3)),val(grid_read$(49,l,4)),val(grid_read$(49,l,5)) 3d_color num_courant_objet,val(grid_read$(49,l,6)),val(grid_read$(49,l,7)),val(grid_read$(49,l,8)) 3d_rotate num_courant_objet,val(grid_read$(49,l,9)),val(grid_read$(49,l,10)),val(grid_read$(49,l,11)) 3d_transparent num_courant_objet, val(grid_read$(49,l,12)) position 15,i end_select next i ' On quitte la fenetre de chargement et on affiche le projet chargé hide 1 active 0 show 13 show 49 show 53 show 54 ' On active les commandes de création-modification active 10 active 12 active 51 active 52 inactive 6
' On déclare le fichier en édition edition_fichier = 1
' On annonce le chargement réussi message "Chargement réussi !" return
Fermeture_fichier:
select message_confirmation_yes_no("Souhaitez vous enregistrer le projet ? Si vous cliquez sur NON toutes les modifications seront perdues.") case 0 confirmation_fermeture = 0 case 1 gosub Enregistrement_fichier hide 13 hide 49 grid_clear 49,num_dernier_objet-num_premier_objet+3,n_col_grid for i=num_premier_objet to num_dernier_objet 3d_delete i next i inactive 10 inactive 12 inactive 51 inactive 52 active 6 confirmation_fermeture = 1 edition_fichier = 0 case 2 hide 13 hide 49 grid_clear 49,num_dernier_objet-num_premier_objet+3,n_col_grid for i=num_premier_objet to num_dernier_objet 3d_delete i next i inactive 10 inactive 12 inactive 51 inactive 52 active 6 confirmation_fermeture = 1 edition_fichier = 0 end_select return
Enregistrement_fichier: ' On met le filtre de la fenetre d'enregistrement sur les fichiers map filter 50,"Fichier map | *.map" i=0 while i=0 a$=file_name$(50) if a$="_" message "Veuillez choisir la cible de l'enregistrement de votre fichier" else if file_exists(a$)=1 select message_confirmation_yes_no("Le projet existe déja. Souhaitez-vous le remplacer ?") case 0 i=0 case 1 file_delete a$ grid_save 49,num_dernier_objet-num_premier_objet+3,n_col_grid,a$ i=1 case 2 i=0 end_select else grid_save 49,num_dernier_objet-num_premier_objet+3,n_col_grid,a$ i=1 end_if end_if end_while
return Maintenant que la base du programme est la, les prochaines étapes sont: 1) ajout des fonctions de "réglage manuel": le réglage de la position, rotation, couleur se fera visuellement dans le scene3d 2) ajout de la possibilité d'ajout d'une texture aux cubes 3) ajout de nouveaux objets 3D (sphère, box, plane, objets 3ds...) | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: PanoMap Ven 28 Aoû 2015 - 21:27 | |
| Salut The Gamer ! Cela fait quelques jours que je me dis qu'il faut que je teste ton programme ! Eh bien c'est fait !!! Je trouve ton projet très intéressant, et j'y vois un intérêt certain. Je viens de tester et moi qui ne suis pas spécialiste en 3D, je trouve assez facile la prise en main de ton logiciel. J'aime bien le fait d'utiliser le GRID au lieu d'excel. l’intérêt est d'avoir un outil totalement autonome et c'est pratique. Je pense que tu vas enrichir tout cela de pleins de fonctions, et j'attends la suite avec impatience. Si je peux te donner un conseil, Gardes cette facilité d'emploi et essai de faire simple comme cela tu intéressera un maximum de personnes. Enfin c'est mon point de vu, maintenant tout dépend de ce que tu veux faire. Encore bravo et bon courage pour la suite... | |
| | | The Gamer
Nombre de messages : 110 Age : 30 Localisation : Toulouse (31) Date d'inscription : 11/05/2010
| Sujet: Re: PanoMap Ven 28 Aoû 2015 - 23:50 | |
| Merci pour ton message minibug qui est très encourageant. Je dois dire que je suis assez fier de ce que j'ai réussis a produire. Il y a quelques années je pensais que c'était un rêve irréalisable de faire qq de potable en 3D. Bien vu pour la simplicité à l'emploi. C'est mon principal objectif. Je cherche a faire un programme qui soit très simple a l'emploi. L'idéal serait par exemple de pouvoir sélectionner les cubes avec un viseur et de modifier leur angle/rotation d'un simple clic de souris. J'ai déja une petite idée pour la sélection a la souris (utiliser un box invisible qui détecte les collisions dans l'axe du viseur) et les rotations/changement d'échelle (proposer des raccourcis a l'utilisateur pur qu'il puisse intervenir a la souris). Mon objectif secondaire est de garder une interface compacte et adaptable a tout types d'écran (je dévelloppe sur 16'' mais j'espère que c'est agréable a utiliser sur des écran plus grands). Mon objectif terciaire est d'avoir un aperçu direct a l'écran avec un système de caméra interactif facilement controlable. Mais bon ça fait beaucoup de choses à faire en peu de temps. Il me reste une semaine de vacances pour avancer. Après ce seront les études qui vont reprendre. D'autant plus que je développe également un petit site perso pour poster mes projets (j'ai finalement opté pour l'option manuelle, j'ai appris les bases css/html5 et je dévelloppe une page perso). Autant dire que je geeke des journées entières | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: PanoMap Sam 29 Aoû 2015 - 7:01 | |
| Salut The Gamer ! Tu es sur la bonne voie... continu comme ca !! Tu sais moi avec GPP (l'EDI Panoramic) j'y planche depuis plus d'un an. Et le développement est en cours depuis plusieurs mois maintenant donc ne t'inquiètes pas. On avance en fonction de nos possibilités, du temps libre, de nos envies, etc...
Dernière édition par Minibug le Sam 29 Aoû 2015 - 14:32, édité 1 fois | |
| | | Yannick
Nombre de messages : 8611 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 29 Aoû 2015 - 12:42 | |
| +1, je pense comme Minibug | |
| | | Contenu sponsorisé
| Sujet: Re: PanoMap | |
| |
| | | | PanoMap | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |