Maka59 Posté(e) le 6 juillet 2011 Posté(e) le 6 juillet 2011 Bonjour, J'aimerais commencer à créer mes propres lisp et je me retrouve bloqué par une chose, je ne sais pas comment récupérer les infos d'objets sélectionnés. En parcourant le fofo j'ai trouvé cela pour récupérer les coordonnées (qui est un extrait d'un lisp un peu plus long): (setq ptcoord (cdr (assoc 10 (entget ptname))) Mais j'aimerais avoir quelques explications sur la fin de la ligne. Je ne comprend pas quelle est le rôle des fonctions (cdr) (assoc) et (entget) pour la récupération des coordonnées. Est-il également possible de récupérer d'autres info comme la hauteur d'un texte ou sa rotation. D'avance merci.
(gile) Posté(e) le 6 juillet 2011 Posté(e) le 6 juillet 2011 Salut, Le moyen 'traditionnel' utilisé en LISP pour récupérer les propriétés des objets est de lire les données DXF de l'objet (voir l'aide aux développeurs d'AutoCAD > Manuel d'utilisation DXF (en français). On obtient ces données avec la fonction entget qui requiert un nom d'entité (type ENAME) comme argument et retourne une liste d'association.Les liste d'associations sont utilisées en LISP pour faciliter l'accès aux éléments de la liste à l'aide d'une 'clé'. Chaque élément d'une liste d'association est une paire pointée ou une liste. C'est le premier élément de la paire pointée ou de la liste qui sert de clé.Les fonctions LISP fondamentales car et cdr retournent, respectivement, le premier élément de la liste et la liste privée du premier élément.La fonction assoc retourne la première occurrence d'une liste d'association dont le 'car' est égal au premier argument d'assoc.Voir l'aide aux développeurs d'AutoCAD > AutoLISP Reference > AutoLISP functions (en anglais). Un petit exemple simple avec la liste de données DXF retournée par entget pour un cercle(ent) :(setq elst (entget ent))retourne :((-1 . ) (0 . "CIRCLE") (330 . ) (5 . "1E2E") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Calque7") (100 . "AcDbCircle") (10 10.0 20.0 0.0) (40 . 12.0) (210 0.0 0.0 1.0) ) Cette liste est constituée de paires pointées ex : (0 . "CIRCLE") et de listes ex : (10 10.0 20.0 0.0)Dans les deux cas le premier élément (0 ou 10) sert de clé pour y accéder directement avec assoc :(assoc 0 elst) retourne : (0 . "CIRCLE") (assoc 10 elst) retourne : (10 10.0 20.0 0.0) Dans les deux cas, pour obtenir la donné depuis la paire pointée ou la liste on utilise cdr :(cdr (assoc 0 elst)) retourne : "CIRCLE" les paires pointées sont des listes spéciales dont le cdr est un atome et non une liste. (cdr (assoc 10 elst)) retourne : (10.0 20.0 0.0) dans ce cas le cdr est une liste. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Maka59 Posté(e) le 7 juillet 2011 Auteur Posté(e) le 7 juillet 2011 Bonjour, Génial, merci beaucoup pour les explications c'est bien clair maintenant! Je mettrais mon lisp si j'arrive à le finir pour vos avis critiques ;)
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