lili2006 Posté(e) le 15 août 2009 Posté(e) le 15 août 2009 Bonjour à toutes et tous, Suite à ce post, je voudrais tester un appel de programmes sous la même forme, à savoir : Le DCL => PGP : dialog { label = "PROGRAMMES PERSOS" ; : boxed_radio_column { label = "OUTILS DE CALQUES" ; key = "APPEL PERSO" ; : radio_button { key = "calav" ; label = "Calque en Avant" ; value = "1" ; } : radio_button { key = "calar" ; label = "Calque en Arrière" ; } } ok_cancel ; : text { label = "TEST" ; } } Soit, à l'affichage => http://free0.hiboox.com/images/3309/be9425aaff3de6e21c12cf1148138f73.jpg Bien sûr, je ne sais pas si la syntaxe d'appel de la commande est bonne ( key = "calar" ;, par exemple pour lancer la fonction "Calque en Arrière") La question est donc : Comment puis-je commander la DCL depuis le lisp de manière à ce qu'une fois le bouton radio sélectionné, la BD ""PROGRAMMES PERSOS"" issu du DCL se ferme pour enclencher le programme sélectionné ? Est-ce possible ? Remarque : Je voudrais pouvoir classer les petits utilitaires trouvés ça et là que l'on utilise au lycée afin que les étudiants ne confondent pas les outils par défaut d'AutoCAD et les "rajouts".Cette année, j'avais fait un menu déroulant et la barre d'outils identique nommés "PLUS" et quelques étudiants m'ont contacté durant leur stage ne comprenant pas pourquoi il n'avait pas accès à "PLUS" dans leur cabinet de stage,.... Bref, le message est mal passé et je ne voudrais pas reproduire cet "incident" cette année,.. ;) J'avais déjà adapté plusieurs routines de sélection de (gile) pour faire ça => http://free0.hiboox.com/images/3309/06dd4e4b0152433b0372edfb7aedce6c.jpg Puis-je me baser sur la même structure ? Merci d'avance, :P Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 15 août 2009 Posté(e) le 15 août 2009 Salut, Si tu veux lancer un programme LISP quand l'utilisateur clique OK, il faut faire passer l'info dans une expression :(action_tile "accept" ...) qui définit l'action à exécuter quand l'utilisateur clique sur OK.L'info étant le bouton radio sélectionné qu'on récupère avec :(get_tile "APPEL PERSO") Cette action doit être une chaîne contenant des expression LISP (c'est un peu tordu, mais c'est comme ça), donc il faudra écrire dans la chîne :(get_tile \"APPEL PERSO\") Par exemple : (defun c:testDialog (/ dcl_id result) ;; charger le fichier DCL (setq dcl_id (load_dialog "ProgPerso.dcl")) ; doit correspondre au nom du fichier ;; Appeler la boite de dialogue (if (not (new_dialog "PGP" dcl_id)) ; doit correspondre au nom de la boite de dialogue (exit) ) ;; action si l'utilisateur clique "OK" : ;; result = bouton radio sélectionné (action_tile "accept" "(setq result (get_tile \"APPEL PERSO\")) (done_dialog)" ) ;; afficher la boite de dialogue (start_dialog) ;; décharger la boite de dialogue (unload_dialog dcl_id) ;; lancer le LISP (cond ((= result "calar") (c:calar)) ((= result "calav") (c:calav)) ) ) Mais il peut être plus filou de donner comme clé aux boutons radio le nom complet des fonctions LISP (avec le c:) dans le DCL :key = "c:calav" ;etkey = "c:calar" ; et de faire dans le LISP :(action_tile "accept" "(done_dialog) (eval (read (get_tile \"APPEL PERSO\")))" ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 15 août 2009 Auteur Posté(e) le 15 août 2009 Re, Merci Gilles, Je teste dès demain, @+, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 16 août 2009 Auteur Posté(e) le 16 août 2009 Bonjour à toutes et tous, Salut Gilles, La première méthode fonctionne bien, J'ai testé la seconde façon et AutoCAD me retourne => Commande: ProgPersoInitialisation...type d'argument incorrect: stringp nilCommande: J'ai bien modifié la DCL : : radio_button { key = "c:calav" ; label = "Calque en Avant" ; value = "1" ; } : radio_button { key = "c:calar" ; label = "Calque en Arrière" ; Dans le lisp, j'ai remplacé : (action_tile "accept" "(setq result (get_tile \"APPEL PERSO\")) (done_dialog)" ) par : (action_tile "accept" "(done_dialog) (eval (read (get_tile \"APPEL PERSO\")))" ) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 16 août 2009 Auteur Posté(e) le 16 août 2009 Re, Je continu donc ma liste et l'appel de "laymch" (Changer de calque) me renvoi => Commande: ProgPersoInitialisation...System.ArgumentException: Erreur lors de la liaison avec la méthode cible. à System.Delegate.CreateDelegate(Type type, Object firstArgument, MethodInfo method, Boolean throwOnBindFailure) à AcMgCommandClass.InvokeWorker(AcMgCommandClass* , MethodInfo mi, Object commandObject, Boolean bLispFunction) à AcMgCommandClass.InvokeWorkerWithExceptionFilter(AcMgCommandClass* , MethodInfo mi, Object commandObject, Boolean bLispFunction) à AcMgPerDocumentCommandClass.Invoke(AcMgPerDocumentCommandClass* , gcroot<:reflection::methodinfo>* mi, Boolean bLispFunction) à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* )Demande ADS erronéeCommande: Une idée ? Merci d'avance, PS: Idem pour "laycur" Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
didier Posté(e) le 16 août 2009 Posté(e) le 16 août 2009 Bonjour Lili2006 je ne viens pas te répondre mais apporter une critiqueje suis obligé de rappeler quetoute critique est constructive si elle n'est basée ni sur la jalousie ni sur l'envieparce que en ce moment les esprits chagrins sont légion.bon, j'en viens au fait. je ne pense pas qu'il soit très judicieux de faire une case de dialogue avecvingt boutons radiolà tu exagères et c'est contre-productif,lire cette littérature et la commande perd son efficacité. fais au moins des "frame"si tu tiens à avoir toutes ces options. amicalement ;) Éternel débutant... Mon site perso : Programmer dans AutoCAD
lili2006 Posté(e) le 16 août 2009 Auteur Posté(e) le 16 août 2009 Re, Salut Didier, fais au moins des "frame"si tu tiens à avoir toutes ces options. Heu, c'est à dire ???? Je ne veux pas forcément l'utiliser de cette façon mais que les étudiants voient rapidement la différence entre AutoCAD base et les personnalisations dans les entreprises, toutes différentes, on est bien d'accord ? Dans ma pédagogie, je tiens et me bat tous les jours pour qu'il n'y ai pas de confusion entre AutoCAD base et les personnalisations propres à l'entreprise & covadis ! Cela me semble essentiel. De plus, cela me fait un très bon exercice. Enfin, je compte faire un petit document relatif en présentant les différentes manières d'utiliser les différentes fonctions (commande par clavier, clic sur icône barre d'outils, clic dans le menu déroulant, ou bien choix depuis la DCL que je prépare), là aussi dans le soucis de laisser le choix à l'utilisateur,... ;) Lorsque la DCL sera terminé, je ferai un imprime écran en commentant les commandes car combien ne savent pas bien utiliser déjà les commandes de base AutoCAD ??? (Et j'en fait très vraisemblablement parti,... :mad: ) c'est contre-productif Ils ont 40 ans pour découvrir,... Voilà ou j'en suis => http://free0.hiboox.com/images/3309/46576acf7ca950015115360dd44be45b.jpg A ce propos, j'aimerai mettre trois rubriques par colonne (Ici : Outils de calques, Outils de dessins et Outils de modification, la seconde colonne : Outils de Cotation, outils de sélection et Outils de présentation), quelle écriture adoptée ? De même, pour faire fonctionner les lisps sous la rubrique "OUTILS DE DESSIN", que dois-je rajouter dans le lisp qui commande la DCL, j'ai essayé => (action_tile "accept" "(setq result (get_tile \"APPEL OUTILS DE CALQUES\")) (done_dialog)" ) (action_tile "accept" "(setq result (get_tile \"APPEL OUTILS DE DESSIN\")) (done_dialog)" ) Mais, cela ne fonctionne pas,... (Nota: J'ai remplacé "APPEL PERSO" par "APPEL OUTILS DE CALQUES" ) Lorsque je sélectionne le Bouton radio "Modifications multiples" ou "Raccord sur Lignes", je retrouve le lancement de la fonction "calav",.. Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 16 août 2009 Auteur Posté(e) le 16 août 2009 Re, Bon déjà, une erreur de parenthèse,... http://free0.hiboox.com/images/3309/6571b83bb6c85549a29ffbaaa90e67a5.jpg C'est mieux comme ça, mais je n'arrive toujours pas à lancer les bonnes commandes sous le menu "OUTILS DE DESSIN",... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 17 août 2009 Posté(e) le 17 août 2009 Salut, Ne voyant pas le code de ton DCL, je ne peux dire d'où vient le problème, mais je précise à tout hasard :- première chose :Il ne faut pas confondre le label (texte qui sera affiché) et la key (clé qui sert à identifier le contrôle)- deuxième chose les accolades ont le même rôle que les parenthèses en LISP et servent à imbriquer les contrôles les uns dans les autres. On peut donc à l'intérieur d'une rangée (row) faire plusieurs colonnes (column) et vice-versa.Dans ton cas, les contrôles radio_button semblent être contenus dans une radio_column (ou une boxed_radio_column).Quand on appelle la fonction get_tile en lui passant comme argument la clé de la radio_column, elle retourne la clé du radio_button activé dans la colonne qui le contient.Donc si tu as plusieurs radio_column tu peux activer un radio_button dans chacune et ce n'est pas ce que tu veux, il me semble. Par ailleurs, si l'unique fonction de la boite dialogue est de lancer une commande, il serait préférable d'utiliser des button qui tous appellent (done_dialog) et donc valident et ferment la boite de dialogue (un seul clic au lieu de deux) le bouton "OK" n'est plus nécessaire mais un bouton "Annuler" reste indispensable. Ici l'astuce consiste à mettre somme clé (key) une chaîne qui contient l'expression LISP qui lance la commande. Cette expression ne doit contenir aucun espace pour pouvoir être utilisée dans le LISP avec les fonctions read et eval Un petit exemple, le DCL :PGP : dialog { label = "PROGRAMMES PERSOS" ; : boxed_column { label = "OUTILS DE CALQUES" ; : row { : button { key = "(c:calav)" ; label = "CALAV" ; width = 12 ; } : text { label = "Calque en Avant" ; width = 26 ; } } : row { : button { key = "(c:calar)" ; label = "CALAV" ; width = 12 ; } : text { label = "Calque en Avant" ; width = 26 ; } } } : boxed_column { label = "OUTILS DE DESSIN" ; : row { : button { key = "(c:modifs)" ; label = "MODIFS" ; width = 12 ; } : text { label = "Modifications multiples" ; width = 26 ; } } : row { : button { key = "(c:raclign)" ; label = "RACLIGN" ; width = 12 ; } : text { label = "Raccord sur Lignes" ; width = 26 ; } } } cancel_button; } Le LISP :(defun c:pgp (/ dcl_id result) (setq dcl_id (load_dialog "PGP.dcl")) (if (not (new_dialog "PGP" dcl_id)) (exit) ) ;; pour chacune des clés de la liste, si le l'utilisateur clique sur le bouton, ;; la clé est affectée à la variable result et la boite est refermée (done_dialog) (foreach k '("(c:calav)" "(c:calar)" "(c:modifs)" "(c:raclign)") (action_tile k "(setq result $key) (done_dialog)") ) ;; si l'utilisateur clique sur Annuler la boite est refermée ;; et la variable result reste nil (action_tile "cancel" "(done_dialog 0)") (start_dialog) (unload_dialog dcl_id) ;; si une valeur est affectée à la variable, ;; l'expression retournée par : (read result) est évaluée (if result (eval (read result)) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 21 août 2009 Auteur Posté(e) le 21 août 2009 Bonjour à toutes et tous, Merci Gilles, Suite à tes remarques, j'ai tout recommencé. Je me rend compte comme il est difficile de gérer les parenthèses ou les accolades . A ce propos est-ce à cause des accolades que je ne peux pas formater la fenêtre d'édition ?? Les Fichiers J'ai essayé plusieurs choses pour créer une seconde colonne du même style que la première sans succès pour le moment,.. http://free0.hiboox.com/images/3409/bf7bd41d3bf9deb7d627dddfb5a6c80a.jpg Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 21 août 2009 Posté(e) le 21 août 2009 Salut, Tout d'abord, malheureusement l'éditeur Visual LISP ne fait pas de formatage automatique (identation) pour les DCL. Ensuite, il faut bien comprendre que les contrôles (tiles) sont imbriqués les uns dans les autres.Par défaut une boite de dialogue est organisée sur une colonne, donc si on veut en faire plusieurs, il faut les imbriquer dans une rangée, etc.Rangées (row) et colonnes (column) peuvent contenir d'autres rangées ou colonnes.Elles peuvent être encadrées (boxed_row et boxed_column) ou non. Dans ton exemple, chaque boxed_column contient plusieurs rangées qui chacune contiennent un bouton et un texte.Pour mette ta boite de dialogue sur 3 colonnes, par exemple, il faut faire :-une rangée qui contient :-- une première colonne (encadrée) qui contient :--- 5 rangées qui contiennent un bouton et un texte.-- une deuxième colonne (encadrée) qui contient :--- 6 rangées qui contiennent un bouton et un texte.-- une troisième colonne qui contient :--- une première colonne (encadrée) qui contient :---- 3 rangées qui contiennent un bouton et un texte.--- une seconde colonne (encadrée) qui contient :---- 3 rangées qui contiennent un bouton et un texte. http://img11.imageshack.us/img11/7263/pgp.png PGP : dialog { label = "PROGRAMMES PERSOS" ; : row {// rangée qui contient toutes les colonnes : boxed_column { // colonne 1 (boxed) label = "OUTILS DE CALQUES" ; : row { : button { key = "(c:calav)" ; label = "CALAV" ; width = 12 ; } : text { label = "Calque en Avant" ; width = 26 ;} } : row { : button { key = "(c:calar)" ; label = "CALAR" ; width = 12 ; } : text { label = "Calque en Arrière" ; width = 26 ;} } : row { : button { key = "(c:examipl)" ; label = "EXAMC" ; width = 12 ; } : text { label = "Examen Calques 1 à 1" ; width = 26 ;} } : row { : button { key = "(c:msfreeze)" ; label = "GCDEO" ; width = 12 ; } : text { label = "Gel calques EO sans EP" ; width = 26 ;} } : row { : button { key = "(c:GEL_FEN)" ; label = "GCDEO" ; width = 12 ; } : text { label = "Gel calques EP sans EO" ; width = 26 ; } } } // fin de colonne 1 : boxed_column { // colonne 2 (boxed) label = "OUTILS DE DESSIN" ; : row { : button { key = "(c:xe)" ; label = "MODIFS" ; width = 12 ; } : text { label = "Modifications multiples" ; width = 26 ; } } : row { : button { key = "(c:plrac)" ; label = "RACLIN" ; width = 12 ; } : text { label = "Raccord sur Lignes" ; width = 26 ; } } : row { : button { key = "(c:addvtx)" ; label = "AJSOM" ; width = 12 ; } : text { label = "Ajout Sommets Poly" ; width = 26 ; } } : row { : button { key = "(c:delvtx)" ; label = "SPSOM" ; width = 12 ; } : text { label = "Supprime Sommets Poly" ; width = 26 ;} } : row { : button { key = "(c:nod-pl)" ; label = "PTPOLY" ; width = 12 ; } : text { label = "Points sur Sommets Poly" ; width = 26 ; } } : row { : button { key = "(c:jpl)" ; label = "EDRAP" ; width = 12 ; } : text { label = "Edit rapide Poly" ; width = 26 ;} } } : column { // colonne 3 contient 2 boxed_column : boxed_column { // boxed_column 1 label = "OUTILS DE SELECTION" ; : row { : button { key = "(c:sel)" ; label = "JEUSEL" ; width = 12 ; } : text { label = "Jeux de sélection" ; width = 26 ; } } : row { : button { key = "(c:ssb)" ; label = "SELBLO" ; width = 12 ; } : text { label = "Sélection blocs" ; width = 26 ; } } : row { : button { key = "(c:mcopy)" ; label = "COPMUL" ; width = 12 ; } : text { label = "Copies Multiples" ; width = 26 ; } } } // fin de boxed_column 1 : boxed_column { // boxed_column 2 label = "OUTILS DE COTATION" ; : row { : button { key = "(c:Cctlili)" ; label = "COTRAP" ; width = 12 ; } : text { label = "Cotation Echelles" ; width = 26 ; } } : row { : button { key = "(c:cf)" ; label = "COTFOR" ; width = 12 ; } : text { label = "Souligne Cotes Forcées" ; width = 26 ; } } : row { : button { key = "(c:dimreassoc)" ; label = "SUPCOF" ; width = 12 ; } : text { label = "Supprime cotes Forcées" ; width = 26 ; } } } // fin de boxed_column 2 } // fin de colonne 3 } // fin de rangée cancel_button; } Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 21 août 2009 Auteur Posté(e) le 21 août 2009 Re, Ouh là, ça se complique,... Merci encore Gilles, Je vais prendre le tps de regarder la structure de ton dcl et essayer de le faire évoluer pour l'exercice,...(Merci pour les commentaires, cela va m'aider énormément). Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 21 août 2009 Posté(e) le 21 août 2009 Ouh là, ça se complique,... Non, pas vraiment, il suffit d'être un peu organisé :- faire un croquis de la BD qui permet d'en voir la structure (colonnes, rangées, sous colonnes, etc.).- commence à écrire le fichier DCL en ne mettant que les rangées et colonnes primaire, puis celle imbriquées ainsi de suite jusqu'aux contrôles finaux. pour reprendre l'exemple ci-dessus, la boite (:dialog { ... }) est une colonne dans laquelle on veut une rangée et le bouton Annuler :PGP : dialog { : row { } cancel_button ; } Dans la rangée, on veut 3 colonnes :PGP : dialog { : row { : column { } : column { } : column { } } cancel_button ; } Les deux premières colonnes sont encadrées (boxed_column) et la troisième contient 2 colonnes encadrées :PGP : dialog { : row { : boxed_column { } : boxed_column { } : column { : boxed_column{ } : boxed_column{ } } } cancel_button ; } La première colonne contient 5 rangées, la seconde 6 rangées, etc.PGP : dialog { : row { : boxed_column { : row { } : row { } : row { } : row { } : row { } } : boxed_column { : row { } : row { } : row { } : row { } : row { } : row { } } : column { : boxed_column{ : row { } : row { } : row { } } : boxed_column{ : row { } : row { } : row { } } } } cancel_button ; } il n'y a plus qu'à mettre les boutons et les textes dans chaque rangée... EDIT : corrigé oubli de point virgule Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 21 août 2009 Auteur Posté(e) le 21 août 2009 Re, Une fois de plus, rien de tel qu'une bonne organisation,... Je vais suivre ce sage conseil pour organiser ma BD finale qui commence à bien se profiler dans mon esprit,... Merci encore et je reviendrai donner des nouvelles quand celle-ci aura évoluée,.. Pour continuer l'apprentissage, petite idée : comment pourrais-je mettre un menu avec ascenseur à la place du bouton "JEUSEL" tes routines (SSE,SSL,SSC,...etc) ?? Du style ? => : popup_list { label = "Choix d'un jeu : "; key = "(c:sel)"; } Et bien entendu, déclarer "sel" dans le lisp. (Pas encore testé,) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 22 août 2009 Posté(e) le 22 août 2009 Salut, Je suis d'accord avec Didier en ce qui concerne la contre productivité d'une boite de dialogue qui aurait trop de boutons, d'autant que ce type de boite dialogue n'apporte pas grand chose de plus qu'une barre d'outils, une palette ou un ruban... Par ailleurs, si tu veux intégrer une liste déroulante (popup_list), tu vas devoir tout revoir, car si un bouton peut entraîner directement une validation et la fermeture de la BD, une liste déroulante nécessite une validation (bouton OK).Et les contrôle de listes (popup_list ou list_box) DCL sont moins facile à manipuler en LISP... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 22 août 2009 Auteur Posté(e) le 22 août 2009 Bonjour à toutes et tous, Merci de ces précisions Gilles. Je profiterai alors d'un autre exercice pour voir le fonctionnement des listes déroulantes,... Il ne s'agit pas ici de productivité ni de contre productivité MAIS avant tout d'un exercice pour moi et une quatrième méthode d'accès au fonction "PLUS" de AutoCAD afin qu'il n'y ai pas confusion dans l'esprit des étudiants. Bien entendu, je reconstituerai la barre d'outils et le menu déroulant qui vont avec,. Merci encore, je me repenche sur la construction du DCL Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 23 août 2009 Auteur Posté(e) le 23 août 2009 Bonjour à toutes et tous, J'arrive sur la fin, mais j'ai vraisemblablement encore un p'tit problème => http://free0.hiboox.com/images/3409/2f1be345f5824e419071e2d6979de90a.jpg Les fichiers Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 23 août 2009 Posté(e) le 23 août 2009 Il manque un point-virgule après cancel_button. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 23 août 2009 Auteur Posté(e) le 23 août 2009 Re, Pfuuuuuu ! Une heure de différents tests,... Eh béh tout compte fait, cela peut être pratique lorsqu'on enchaine plusieurs fonctions,... Un clic droit et je choisi une autre fonction, donc deux clics pour arriver sur une application, c'est pas si mal,.. Bon, je termine le menu déroulant et la barre d'outils qui va avec et je pourrai écrire un p'tit document concernant les différentes applications et les manières d'y accéder,... Merci à tous, Exercice terminé ! 900x400http://free0.hiboox.com/images/3409/29beadfd98feab5f52a00fb81b778537.jpg[/img] Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
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