mateus Posté(e) le 6 juillet 2013 Posté(e) le 6 juillet 2013 Bonjour à tous et toutes , je souhaiterai traduite dans mon programme ceci :(trame) (setq interrupteur 0 Poser la question : Est-ce que l'implantation des candélabres vous convient? Si non Que souhaitez vous modifier? cas1 Alignement cas2 Décalage cas3 PremierCandelabre cas4 Entraxe cas5 Ecart Si c'est le cas "1" on désactive l'intérupteur pour tous les cas sauf le cas "1" Si c'est le cas "2" on désactive l'intérupteur pour tous les cas sauf le cas "2" Si c'est le cas "3" on désactive l'intérupteur pour tous les cas sauf le cas "3" Si c'est le cas "4" on désactive l'intérupteur pour tous les cas sauf le cas "4" Si c'est le cas "5" on désactive l'intérupteur pour tous les cas sauf le cas "5" Si oui setq ( = interrupteur 1) Tous mes cas sont des fonctions crées , je voudrais tous les lancer au démarrage de mon programme de façon à ce que le programme se déroule une première fois( d'où l'interrupteur à 0) Ensuite je souhaiterai poser ces questions (ci-dessous) et si jamais l'utilisateur indique qu'il souhaiterai modifier un des cas on reviendrai au cas voulu si l'utilisateur est satisfait alors interrupteur à 1 et on continue le programme. Ps: Tous les cas seraient dans une boucle "while" Voilà ce que j'ai pensé à faire, mais pour l'instant rien ne marche bien sur :/ : (defun c:MAIN ();Début de la fonction principale (setq interupteur 0) (setq = cas1 0 cas1 0 cas2 0 cas3 0 cas4 0 cas5 0 ) (while(= interupteur 0) if( = cas1 0) ( (setq alignementEnCours(c:ALIGN));récupération de la fonction "ALIGN" et mise en variable ) if( = cas2 0) ( (c:DECAL_RESEAU alignementEnCours); récupération de la fonction DECAL_RESEAU avec comme argument "alignementEnCours" ) if( = cas3 0) ( (setq premierCandelabre (getpoint"\n cliquez sur le premier candélabre ")) (setq projectionCandelabre (c:PROJECTION premierCandelabre)) ) if( = cas4 0) ( (setq entraxeCandelabre (getdist"\n Indiquez l'entraxe des candélabres ")) ) if( = cas5 0) ( (setq decalageCandelabre(getdist"\n Indiquez le décalage des candélabres")); mettre la valeur de la droite par défaut ) );fin de la fonction principal (setq question (strcase(getstring "\n L'implantation vous est t-elle satisfaisante ? [Oui / Non] <Non> "))) (cond ((or(= choix "NON") (= choix "N") (= choix "")) (progn (setq question2 (strcase(getstring "\n Que souhaitez vous modifier? [Alignement / Décalage / PremierCandélabre / Entraxe / Ecart] <Alignement> "))) ) ) ((or(= choix "OUI") (= choix "O")) (setq interrupteur 1) ) ) ) Voilà je souhaiterai avoir des explications si possible en deux temps. Les premières sur la boucle "while" qui ne fonctionne pas , et les autres sur mes questions ( la première question m'est posée et met en variable la réponse "oui" ou "non" mais ne poursuit pas avec les conditions... Merci beaucoup :) et bon week end
mateus Posté(e) le 7 juillet 2013 Auteur Posté(e) le 7 juillet 2013 Bonjour à tous je reviens à vous car j'ai réparé ma boucle ( voir ci-dessous) (defun c:MAIN ();Fonction principale (setq interupteur 0) (setq cas1 0 cas2 0 cas3 0 cas4 0 cas5 0 ) (while(= interupteur 0) (if(= cas1 0) (setq alignementEnCours(c:ALIGN));récupération de la fonction "ALIGN" et mise en variable ) (if( = cas2 0) (c:DECAL_RESEAU alignementEnCours); récupération de la fonction DECAL_RESEAU avec comme argument "alignementEnCours" ) (if( = cas3 0) (setq premierCandelabre (getpoint"\n cliquez sur le premier candélabre ")) (setq projectionCandelabre (c:PROJECTION premierCandelabre)) ) (if( = cas4 0) (setq entraxeCandelabre (getdist"\n Indiquez l'entraxe des candélabres ")) ) (if( = cas5 0) (setq decalageCandelabre(getdist"\n Indiquez le décalage des candélabres")); mettre la valeur de la droite par défaut ) ;(c:DROITE projectionCandelabre entraxeCandelabre decalageCandelabre ) ;Trace les droites pour l'assistance. stoker tout les nom des bloc inserer ds une liste. ) ) Dans cette boucle il me reste deux choses à réaliser. La première : les questions qui permettront de voir si l'utilisateur est satisfait ou pasLa deuxième : la fonction tracé du dessin (mis en suspens voir ci-dessus) Je souhaiterai procéder une nouvelle fois par étape et commencer par résoudre le problème au niveau des questions. Si quelqu'un a une idée. En attendant je m'y remet :) Merci et bon week end :)
mateus Posté(e) le 7 juillet 2013 Auteur Posté(e) le 7 juillet 2013 Voici mon dernier code pour mes questions mais ça ne fonctionne toujours pas :unsure: (defun c:QUEST2 () (setq question2 (strcase(getstring "\n Que souhaitez vous modifier? [Alignement / Décalage / PremierCandélabre / Entraxe / Ecart] <Alignement> "))) (cond ((or(= choix "Alignement") (= choix "A") (= choix "")) (setq cas1 1 cas2 0 cas3 0 cas4 0 cas5 0 ) ) ((or(= choix "Décalage") (= choix "D")) (setq cas1 0 cas2 1 cas3 0 cas4 0 cas5 0 ) ) ((or(= choix "PremierCandelabre") (= choix "P")) (setq cas1 0 cas2 0 cas3 1 cas4 0 cas5 0 ) ) ((or(= choix "Entraxe") (= choix "EN")) (setq cas1 0 cas2 0 cas3 0 cas4 1 cas5 0 ) ) ((or(= choix "Ecart") (= choix "EC")) (setq cas1 0 cas2 0 cas3 0 cas4 0 cas5 1 ) ) ((or(= choix "OUI") (= choix "O")) (setq interrupteur 1) ) ) )
didier Posté(e) le 8 juillet 2013 Posté(e) le 8 juillet 2013 coucou dans un premier temps il faudrait revoir la mise en page pour faciliter la lecturedans un deuxième temps, je pense que la solution est d'utiliser COND en lieu et place de IF ensuite il faudra passer au DCL avec des boutons radio, c'est plus simple pour les utilisateurs, mais c'est une autre étape. je ne suis pas bien certain d'avoir compris mais tu veux vérifier une condition donc COND ... amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
mateus Posté(e) le 8 juillet 2013 Auteur Posté(e) le 8 juillet 2013 Merci Didier pour ta réponse En fait mon objectif est de lancer le programme et une fois lancé, dans une boucle demander à l'utilisateur est ce que l'implantation te convient? Si oui on continue le programme si non à quelle étape veux tu revenir? A partir de là, plusieurs choix s'offre à lui les 5 étapes que l'on peut voir sur mon dernier post (qui sont des fonctions). Exemple : Est ce que l'implantation vous convient? Rép: Non Sur qu'elle étape voulez vous revenir?1- Alignement2-Décalage3-PremierCandélabre4-Entraxe5-Ecart Rép: Décalage Par conséquent revenir à la fonction 2 en effaçant le tracé du programme précédent. Voilà j'esprèe que je suis assez clair. Pour les boites de dialogues effectivement, ça serait une étape intéressante pour l'utilisateur que je ferai après, je préfère m'attarder dans un premier temps à la réalisation du programe "brut". Voici ci dessous : mon dernier code : (defun c:questions ( / ans ) (initget "Yes No") (if (/= "Yes" (getkword "\nEtes vous satisfait de l'implantation des luminaires? [Yes/No] <No>: ")) (while (progn (initget "Alignement Décalage PremierCandélabre Entraxe Ecart") (setq ans (getkword "\nChange [Alignement/Décalage/PremierCandélabre/Entraxe/Ecart] <Accept>: ")) ) (cond ( (= ans "Alignement") (ALIGN) ) ( (= ans "Décalage") (DECAL_RESEAU alignementEncours) ) ( (= ans "PremierCandélabre") ((setq premierCandelabre (getpoint"\n Cliquez sur le premier candélabre ")) projectionCandelabre (c:PROJECTION premierCandelabre)) ) ( (= ans "Entraxe") ((setq entraxeCandelabre (getdist"\ Entraxe des candélabres? "))) ) ( (= ans "Ecart") ((setq decalageCandelabre(getdist"\ Indiquez le décalage des candélabres "))) ) ) ) ) (princ "\nPoursuite du programme...") (princ) ) J'ai pas encore tester entièrement, mais d'après un premier aperçu, le programme se lance et une fois les étapes passées ( les questions sont bien posées puis redémarre à l'étape choisi par l'utilisateur Bonne soirée à tous ! :)
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant