FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» I Love You
par papydall Aujourd'hui à 1:15

» mise a jour calculatrice
par joeeee2017 Aujourd'hui à 1:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Hier à 18:49

» [solved] 3D_LINE How to ?
par papydall Hier à 6:51

» supprimé
par joeeee2017 Dim 15 Oct 2017 - 20:02

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» supprimé
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

» Un petit "coucou" à tous les Panoramiciens !
par Jack Ven 6 Oct 2017 - 10:24

» Pourquoi le compilateur stagne
par mindstorm Mer 4 Oct 2017 - 20:38

» Panoramic ?
par Marc37 Mer 4 Oct 2017 - 0:39

» Premiers pas avec Arduino
par Marc37 Mer 4 Oct 2017 - 0:29

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 PanoMap

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: PanoMap   Lun 24 Aoû 2015 - 21: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 Razz) 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 Embarassed  affraid  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 Mar 25 Aoû 2015 - 0:46, édité 4 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
JL35



Nombre de messages : 5952
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: PanoMap   Lun 24 Aoû 2015 - 23:18

J'ai pas Excel Embarassed dommage...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: PanoMap   Lun 24 Aoû 2015 - 23: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 25 Aoû 2015 - 4:23

Excel, pas tout le monde s' est décidé à renflouer les caisses de microsoft ( si fut il qu' il en ai besoin Smile ).
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%) )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: PanoMap   Mar 25 Aoû 2015 - 8:39

@ Igeromini,

Merci d'avoir testé ce début de projet, et merci pour ta suggestion.

Petite plaisanterie:
 

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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 25 Aoû 2015 - 13: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... Laughing

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.... Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: PanoMap   Mer 26 Aoû 2015 - 19: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 26 Aoû 2015 - 20:27

Ok The Gamer, j' attends de voir pour te donner d' autres appréciations.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: PanoMap   Ven 28 Aoû 2015 - 20: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...)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: PanoMap   Ven 28 Aoû 2015 - 22: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 !!!  cheers

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.  bounce

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. Wink

Encore bravo et bon courage pour la suite... drunken
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: PanoMap   Sam 29 Aoû 2015 - 0: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 Razz

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: PanoMap   Sam 29 Aoû 2015 - 8:01

Salut The Gamer !

Tu es sur la bonne voie... continu comme ca !! bounce

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.  Wink

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 - 15:32, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 29 Aoû 2015 - 13:42

+1, je pense comme Minibug  Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: PanoMap   

Revenir en haut Aller en bas
 
PanoMap
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos projets-
Sauter vers: