x_all Posté(e) le 23 mars 2016 Posté(e) le 23 mars 2016 Bonjour Encore un coup de plan archicad qui arrivent avec tout et rien dans le calque hachure et en l'ocurence pas mal de bloc unique ou il y a beaucoup de traits utile et des hachures qui me parasite le dessin. brefje cherche à faire un lisp pour changer le calque des hachures dans ces blocs.l'idée c'est que je sélectionne mes bloc (car pas tout est à cacher) et je je lance mon lisp.puis j'ai une fonction qui se lance sur les éléments de mon jeux de sélection bref j'ai commencer à écrire un code comme je l'ai fait quand je cherche un attribut, mais je me fait jeter (defun h-change (entb / dxf-1 cq0 cq1 ) (while (setq entb (entnext entb)) (setq dxf-1 (entget entb)) (if (= (cdr (assoc 0 (entget entb))) "HATCH") (progn (if (setq cq0 (assoc 8 dxf-1)) (setq cq1 (cons 8 "---Caché") dxf-1 (subst cq1 cq0 dxf-1) ) (setq dxf-1 (cons (cons 8 "---Caché") dxf-1)) ) (entmod dxf-1) ) ) ) ) (gile) toujours de bon conseil à répondu à un message similaire il y a quelques lustreshttp://cadxp.com/topic/34533-parcourir-les-entites-qui-composent-un-bloc/page__view__findpost__p__187031mais si je comprend que mon erreur est là, j'envoie à la fonction une instance du bloc et pas sa définition, je voie pas bien comment trier dans mon jeux de sélection les "bloc" et pas les "insert" si quelqu'un à un exemple ce code pour faire ça, je continuerai de fouiller avec plaisir, car c'est, il me semble, ce point qui me bloque (il doit bien y avoir d'autre coquilles dans ma fonctions mais je peux pas tester là) merci d’avance quelques trucs sur autocad
(gile) Posté(e) le 23 mars 2016 Posté(e) le 23 mars 2016 Salut, Si ce ne sont pas des blocs dynamiques (anonymes) c'est relativement simple. On retrouve la définition de bloc d'une référence avec le nom du bloc.Tu parcours ton jeu de sélection pour faire une liste de noms de blocs (en évitant les doublons si possible) et ensuite, pour chaque nom de bloc, tu ouvres la définition avec tblsearch et le nom du bloc. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Alain Posté(e) le 24 mars 2016 Posté(e) le 24 mars 2016 Bonjour,Est-ce juste:(if (= (cdr (assoc 0 (entget entb))) "HATCH")cdr retourne une liste et non un élément. Il ne faut pas:(if (= (cdr (assoc 0 (entget entb))) '("HATCH")) ou (if (= (cadr (assoc 0 (entget entb))) "HATCH")Attention, ma remarque est fausse. Lisez le message suivant de (gile) Constructeur métallique et dessinateur.Mon entreprise: aplomb.ch
(gile) Posté(e) le 24 mars 2016 Posté(e) le 24 mars 2016 Salut, Bonjour,Est-ce juste:(if (= (cdr (assoc 0 (entget entb))) "HATCH")cdr retourne une liste et non un élément. Il ne faut pas:(if (= (cdr (assoc 0 (entget entb))) '("HATCH")) ou (if (= (cadr (assoc 0 (entget entb))) "HATCH") (assoc 0 (entget entb))retourne une paire pointée : (0 . "HATCH")Le cdr d'une paire pointée est un atome pas une liste (voir ce sujet). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Alain Posté(e) le 24 mars 2016 Posté(e) le 24 mars 2016 Bonjour,(assoc 0 (entget entb))retourne une paire pointée : (0 . "HATCH")Le cdr d'une paire pointée est un atome pas une liste (voir ce sujet).Merci de corriger mes erreurs, je débute en lisp (au passage merci beaucoup pour le tuto en pdf que j'ai lu). Ce n'est pas évident ce concept de liste au début.En lisant sur CADep, j'ai découvert une nouvelle fonction lisp qui corrige et explique nos erreurs, elle s'apelle (gile)...Encore merci Constructeur métallique et dessinateur.Mon entreprise: aplomb.ch
x_all Posté(e) le 25 mars 2016 Auteur Posté(e) le 25 mars 2016 Désolé pour le retard... je suis charrette avec ma nouvelle casquette avec le quelle je dois dessiner des plans béton (et c'est pas facile de dessiner du béton auquel je ne connais rien avec une casquette)bref, je n'ai pas le "loisir" pour finir ce programme... mais je garde les conseils sous le coude et les mettrai en application dés que j'ai 5mn.. merci encore.. Ps (gile) n'est pas une fonction.... Une dll à la limite... non je déconne, (gile) est le meilleur des contributeurs, le plus dévoué et le plus patient qu'il m'ait été donné de croiser sur les différent forum que je fréquente.. Il faudrait lui faire une statue avec tous les remerciement qu'on lui adresse... quelques trucs sur autocad
lecrabe Posté(e) le 25 mars 2016 Posté(e) le 25 mars 2016 Hello En fait la fonction (gile) =G = Great I = Incredible L = LispE = Expert Encore MERCI Gilles pour ta contribution !! Bye, lecrabe Autodesk Expert Elite Team
GEGEMATIC Posté(e) le 25 mars 2016 Posté(e) le 25 mars 2016 salut,et en plus, c'est une fierté nationale :sur tous les forums anglo-saxons, Gile repend son expertise, recueillant les louanges des plus grands spécialistes d'Autocad et de sa programmation !Cocorico !Gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
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