Bortch59 Posté(e) le 25 décembre 2010 Posté(e) le 25 décembre 2010 Bonjour, je suis en train d'écrire mon premier lisp.J'ai pour l'instant réussi à dessiner un rectangle (ça c'est pour vous donner mon niveau).Je voudrais ensuite faire un réseau mais comment sélectionner ce rectangle sans passer par une intervention utilisateur ?? Merci.
(gile) Posté(e) le 26 décembre 2010 Posté(e) le 26 décembre 2010 Salut, Regarde la fonction entlast Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bortch59 Posté(e) le 26 décembre 2010 Auteur Posté(e) le 26 décembre 2010 Merci pour cette piste. J'ai réussi, tout fonctionne bien.Une fois le lisp terminé, nil s'affiche sur la ligne de commande.Saurais tu me dire si c'est normal? Merci
(gile) Posté(e) le 26 décembre 2010 Posté(e) le 26 décembre 2010 Une expression LISP retourne toujours une valeur (ou nil).Un programme LISP, qui est une expression LISP qui en contient plusieurs, retourne et "imprime" sur la ligne de commande les résultat de l'évaluation de la dernière expression.Une expression (command ...) retourne toujours nil.Pour éviter d'avoir une valeur qui s'inscrit sur la ligne de commande (sortie silencieuse), on utilise l'expression (princ) ou (prin1) en dernière expression à la fin du programme. Exemple :(defun c:test () (command "_.line" '(0 0) '(10 20) "") (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 26 décembre 2010 Posté(e) le 26 décembre 2010 Je te recommande la lecture de ce sujet ainsi que celle des autres sujets "mis en tête" dans le forum "Débuter en LISP". Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bortch59 Posté(e) le 26 décembre 2010 Auteur Posté(e) le 26 décembre 2010 Ok c'est donc normal vu que ma dernière expression est (command "-reseau").A propos de (command) j'ai l'impression que le lisp ne fait pas de différence entre reseau et -reseau, le lisp ne permet pas d'afficher les boites de dialogue?
Bortch59 Posté(e) le 26 décembre 2010 Auteur Posté(e) le 26 décembre 2010 Je viens d'avoir la réponse à cette question dans l'un de ces sujets.Merci pour ton aide
Bortch59 Posté(e) le 7 janvier 2011 Auteur Posté(e) le 7 janvier 2011 Salut, je souhaiterais maintenant intervenir sur la couleur de ce rectangle.J'ai essayé avec entget mais elle n'apparait pas dans la liste qui est extraite.Quelqu'un peut-il m'aiguiller svp? Merci
bonuscad Posté(e) le 7 janvier 2011 Posté(e) le 7 janvier 2011 Salut, Dans la liste retournée par (entget) la valeur de la couleur est stocké dans le code 62.Si non présent, cela veut dire que la couleur est du calque. Il faut rajouter ce code dans la liste retourné par (entget). Si le code est présent et que tu veuille réaffecter la couleur du calque, c'est la valeur 256 qu'il faut affecter (dubloc est la valeur 0). Après il y a les "True Color" mais c'est une autre histoire. Limite toi pour l'instant aux couleur standard. (1 à 255) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bortch59 Posté(e) le 7 janvier 2011 Auteur Posté(e) le 7 janvier 2011 Ok pour rajouter le code à priori avec cons?? (cons (62 . "??") liste)Sauf que je ne vois pas quoi mettre à la place de ?? .A moins que ce ne sois pas la bonne façon de faire?
bonuscad Posté(e) le 8 janvier 2011 Posté(e) le 8 janvier 2011 (cons (62 . "??") liste)Sauf que je ne vois pas quoi mettre à la place de ?? . Simplement un entier entre 0 et 256, mais pas sous forme de chaine (entre guillemet). Un exemple pour forcer la couleur cyan à un objet. ((lambda ( / dxf_ent) (setq dxf_ent (entget (car (entsel "\nChoisir un objet: ")))) (if (assoc 62 dxf_ent) (entmod (subst '(62 . 4) (assoc 62 dxf_ent) dxf_ent)) (entmod (cons '(62 . 4) dxf_ent)) ) )) Pour avoir de l'aide sur les code DXF... Va dans le menu déroulant "?"-> "Ressources supplémentaires" -> "Aide aux développeurs"Une fois dans l'aide-> "Manuel d'utilisation DXF" -> "Section ENTITIES"et dans ton cas: -> "Codes de groupe communs aux entités" et recherche le code 62. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bortch59 Posté(e) le 9 janvier 2011 Auteur Posté(e) le 9 janvier 2011 Salut,j'ai essayé ce code qui correspond bien à l'objectif que je me suis fixé.J'en suis à la phase compréhension et j'ai du mal à tout interpréter: (setq dxf_ent (entget (car (entsel "\nChoisir un objet: "))))Le nom de l'entité sélectionnée est récupéré par (car) et sa liste est renvoyée par (entget). (if (assoc 62 dxf_ent)Là je suis pas trop sur: Si 62 à une valeur (autre que du calque auquel cas il n'apparait pas) (entmod (subst '(62 . 4) (assoc 62 dxf_ent) dxf_ent))On remplace la valeur de 62 par (62 . 4) dans dxf_ent et on met à jour la liste (entmod (cons '(62 . 4) dxf_ent))Sinon (donc si l'objet est du calque) on rajoute (62 . 4) à la liste Peut tu me dire si j'ai bon? Merci
bonuscad Posté(e) le 10 janvier 2011 Posté(e) le 10 janvier 2011 Salut, Oui, tu as l'air d'avoir saisi. Donc (if (assoc 62 dxf_ent) Si la clé 62 est présente dans la liste dxf_ent (donc une couleur est définie) (entmod (subst '(62 . 4) (assoc 62 dxf_ent) dxf_ent)) Alors substituer la nouvelle clé avec son nouveau code couleur (ici le code couleur 4 soit la couleur cyan) (entmod (cons '(62 . 4) dxf_ent)) Autrement rajouter la clé avec son code couleur à liste de définition de l'entité. ) IF n'a que deux conditions :Soit vrai, alors faire la 1ere exécution (PROGN peut être utiliser pour regrouper plusieurs actions), soit faux alors exécuter la 2ème (idem pour progn) NB '(62 . 4) est équivalent à (quote (62 . 4)) ou encore à (cons 62 4)CONS peut te permettre par exemple de construire ta clé avec n'importe quel code couleur, exemple:(initget 1)(cons 62 (getint "\nEntrez votre code couleur: ")) LIST ne permet pas de construire des paires pointées, seul CONS le permet.(paire pointée: liste exclusive de 2 éléments (appelés ATOM) dont CAR est le 1er élément et CDR le 2ème) Le CDR d'une liste pointée retourne un atome, le CDR d'une liste retourne une liste. PS: Édites ton précédent message et contrôle les balises HTLM car ça perturbe l'affichage de ton sujet. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bortch59 Posté(e) le 10 janvier 2011 Auteur Posté(e) le 10 janvier 2011 Salut,concentré que j'étais à déchiffrer ce code, je ne l'avais pas encore testé sur mon fameux rectangle, et à mon grand étonnement il n'a pas changé de couleur. La démarche serait-elle différente pour une polyligne? PS: j'ai édité mon message et tout m'a paru normal.
bonuscad Posté(e) le 10 janvier 2011 Posté(e) le 10 janvier 2011 et à mon grand étonnement il n'a pas changé de couleur. Pourtant ça devrait ! La démarche serait-elle différente pour une polyligne? Non, comme j'ai pu te le dire précédemment : -> "Codes de groupe communs aux entités" et recherche le code 62. Donc bien valable pour tout les entités. Ce code 62 s'applique aussi à la table des calques (couleur du calque dans le gestionnaire des calques) à la seule différence qu'une valeur entière négative indique que le calque est éteint. Mais si j'ai bien compris c'est bien l'entité que tu veux changer de couleur et non la couleur du calque qui la contient. Peut être une confusion de ta part ? Ou alors une erreur dans ton code ! PS: j'ai édité mon message et tout m'a paru normal. En tout cas l'affichage est redevenu normal, c'est l'essentiel, peut être un modo. ;) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bortch59 Posté(e) le 12 janvier 2011 Auteur Posté(e) le 12 janvier 2011 Salut, c'est bien la couleur de l'entité que je veux changer.J'ai refait plusieurs fois l'essai et rien à faire, impossible de changer la couleur d'une polyligne alors que tout est OK avec ligne, cercle, texte. Une idée?
bonuscad Posté(e) le 12 janvier 2011 Posté(e) le 12 janvier 2011 Une idée? Non ! Mais tu peux poster le retour (liste DXF complète) de (entget (car (entsel))) fait sur la polyligne qui te pose problème, ça aidera à y voir plus clair. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bortch59 Posté(e) le 12 janvier 2011 Auteur Posté(e) le 12 janvier 2011 Choix de l'objet: ((-1 . ) (0 . "LWPOLYLINE") (330 . ) (5 . "3E8") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 101.701 72.9422) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 56.1202 49.0638) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (210 0.0 0.0 1.0)) Voici la liste.Ne fonctionne pas non plus avec une droite.
bonuscad Posté(e) le 12 janvier 2011 Posté(e) le 12 janvier 2011 Effectivement le (cons) ne fonctionne pas pour une LWPOLYLINE (je n'avais même pas fais gaffe) :P Avec (append) ca à l'air d'aller ! ((lambda ( / dxf_ent) (setq dxf_ent (entget (car (entsel "\nChoisir un objet: ")))) (if (assoc 62 dxf_ent) (entmod (subst '(62 . 4) (assoc 62 dxf_ent) dxf_ent)) (entmod (append dxf_ent '((62 . 4)))) ) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bortch59 Posté(e) le 13 janvier 2011 Auteur Posté(e) le 13 janvier 2011 Merci. Ce coup ci ça fonctionne nickel.Je te donne RDV dans un nouveau post afin de tester et surtout de critiquer mon code une fois celui-ci terminé (dans le forum routines LISP ?).
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