Demixav Posté(e) le 15 septembre 2017 Posté(e) le 15 septembre 2017 Bonjour, J'ai sur mon poste (autocad map 2010) un bouton associé à une macro pour reprendre ma sélection d'objets précédente qui est : ^C^C(sssetfirst nil (ssget "_P")); et qui fonctionne très bien! Mon collègue qui a une version AutoCad 2013 a voulu faire la même chose mais ça ne fonctionne pas sur son poste... (heu, j'ai pas noté son message d'erreur! <_< ) :blink: Une raison particulière? la programmation des macros (ou lisp) diffère suivant les versions autocad? En vous remerciant par avance, et bon week!Xav AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
rebcao Posté(e) le 15 septembre 2017 Posté(e) le 15 septembre 2017 Bonjour, Sans connaitre MAP, je dirais que la fonction appelée (sssetfirst...) doit être chargée par un LOAD ou autre... Essayes en tapant ça !sssetfirst Et tu dois avoir un retour du style #SUBR... qui confirme que la fonction est bien chargée ! Christian Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
Demixav Posté(e) le 18 septembre 2017 Auteur Posté(e) le 18 septembre 2017 Bonjour Christian, Merci pour ta réponse déjà. :) Alors effectivement, il a bien ce retour #SUBR... avec le test avec "!" Par contre, ce matin, il me dit que ça lui sélectionne bien des objets, mais uniquement les derniers objets sur lesquels il effectue une commande (déplacer, copier, etc...) Sur mon poste, je sélectionne des objets, juste pour voir leurs propriétés par exemple, je fais Echap ensuite, et si j'utilise ce fameux bouton avec la commande, il me re-sélectionne bien ces objets juste sélectionnés... J'imagine que ce doit être une histoire de variable... :( PS : J'ai mis ce post dans le forum "macro", mais effectivement, c'est du LISP tout ça.J'ai essayé de m'y pencher un peu ce week avec "l'introduction au LISP" de (gile) mais je ne comprends pas où ça bloque! Bonne journée!Xav AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
VDH-Bruno Posté(e) le 18 septembre 2017 Posté(e) le 18 septembre 2017 Bonjour, Très certainement ton collègue a du essayé la macro dans un nouveau dessin n'ayant pas de sélection précédente..En retour sur la ligne de commande il a certainement du avoir un message du type: Commande: (sssetfirst nil (ssget "_P"))(nil nil)Indiquant qu'il n'a pas de jeu de sélection A+ Apprendre => Prendre => Rendre
Demixav Posté(e) le 18 septembre 2017 Auteur Posté(e) le 18 septembre 2017 Bonjour Bruno, Merci de ta réponse! Heu... ben si, il a bien sélectionné des objets avant d'essayer puisque la commande fonctionne avec des objets ayant subit une modification... :blink: Je lui ai demandé d'essayer en supprimant ces objets sélectionnés sur lequel ça fonctionne, d'en sélectionner de nouveaux, et de faire Echap juste après, sans avoir fait de modifs donc, et là, il a bien un retour (nil nil) PS : Rien à voir avec ce problème pour ce qui suit!Je n'ai pas AutoCad chez moi et j'essaye donc au taf quelques trucs que j'ai regardé ce week... Au paragraphe 8.2 Accès aux éléments de "l'introduction à AutoLISP" de (gile), il est sujet des fonctions "car" et "cdr", et de leur combinaison. Il y a un exemple qui est :(car (cdr (cdr '(6 1 8)))) → (caddr '(6 1 8)) → 8 Dans "ma logique", le "car" est superflu (et qui donnerai une combinaison plus courte) et j'ai donc essayé :(cddr '(6 1 8)) → (8) Ma logique est bonne apparemment, le résultat est bien le "même" mais pourquoi il retourne les parenthèses? Merci!Xav AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
(gile) Posté(e) le 18 septembre 2017 Posté(e) le 18 septembre 2017 Au paragraphe 8.2 Accès aux éléments de "l'introduction à AutoLISP" de (gile), il est sujet des fonctions "car" et "cdr", et de leur combinaison. Il y a un exemple qui est :(car (cdr (cdr '(6 1 8)))) → (caddr '(6 1 8)) → 8 Dans "ma logique", le "car" est superflu (et qui donnerai une combinaison plus courte) et j'ai donc essayé :(cddr '(6 1 8)) → (8) Ma logique est bonne apparemment, le résultat est bien le "même" mais pourquoi il retourne les parenthèses? Merci!Xav Évaluation pas à pas :(car (cdr (cdr '(6 1 8)))) => (cdr '(6 1 8)) retourne (1 8) -la liste (6 1 8) sans le premier élément-(car (cdr '(1 8))) => (cdr '(1 8)) retourne (8) -la liste (1 8) sans le premier élément-(car '(8)) => retourne 8 -le premier élément de la liste (8) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 18 septembre 2017 Posté(e) le 18 septembre 2017 Essaye et compare :(type (cddr '(6 1 8)))et(type (caddr '(6 1 8))) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Demixav Posté(e) le 18 septembre 2017 Auteur Posté(e) le 18 septembre 2017 Évaluation pas à pas :(car (cdr (cdr '(6 1 8)))) => (cdr '(6 1 8)) retourne (1 8) -la liste (6 1 8) sans le premier élément-(car (cdr '(1 8))) => (cdr '(1 8)) retourne (8) -la liste (1 8) sans le premier élément-(car '(8)) => retourne 8 -le premier élément de la liste (8) Bonjour (gile), Merci pour ta réponse (et de prendre du temps pour répondre au néophyte que je suis à une chose tellement bête pour toi je présume! :) ), mais je dois avouer que je ne comprends pas mieux!C'est la présence des parenthèses que je ne comprends pas. Font elles partie intégrante de l'élément? mais si c'est le cas, elle devrait apparaître aussi avec (caddr '(6 1 8))... Non? :blink: AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
Demixav Posté(e) le 18 septembre 2017 Auteur Posté(e) le 18 septembre 2017 Ha... "cdr" retourne une liste, "car" retourne un élément! c'est ça? vive les subtilités du langage LISP !! :huh: AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
(gile) Posté(e) le 18 septembre 2017 Posté(e) le 18 septembre 2017 Une expression LISP est soit une liste ; soit un atome.Une liste est une séquence d'expressions LISP balisée par une parenthèse ouvrante et la parenthèse fermante correspondante. 1 est un atome (de type INT).2.54 est un atome (de type REAL)."LISP" est un atome (de type STR). () est une liste (vide).(8) est une liste (d'un seul élément).(6 1 8) est une liste (de 3 entiers).(1 2.54 "LISP") est une liste (de 3 éléments de types différents).((1 2 3) (4 5 6) (7 8 9)) est une liste de listes. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Demixav Posté(e) le 18 septembre 2017 Auteur Posté(e) le 18 septembre 2017 Oui, oui... j'ai compris avec un peu de retard!Pas évident quand on débute de penser à des choses comme ça! Rien que cette différence entre les deux n'est pas maîtrisée alors encore moins évident de comprendre les réponses des fonctions! Merci encore de tes réponses en tout cas.Xav AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
(gile) Posté(e) le 18 septembre 2017 Posté(e) le 18 septembre 2017 Ma dernière réponse arrive un peu tard, mais il faut bien comprendre qu'il ne s'agit pas là de "subtilités" mais d'une notion fondamentale du LISP. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Demixav Posté(e) le 18 septembre 2017 Auteur Posté(e) le 18 septembre 2017 Fondamentale oui en effet, mais qui pour un débutant ne sont que des subtilités pour l'instant... A la lecture, j'ai cru que les deux fonctions retournaient le même type de données. Mais c'est bien! Ca m'a permis de comprendre qu'il faut vraiment s’arrêter sur chaque mot et leur sens pour comprendre les choses du LISP. ;) Xav AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
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