Aller au contenu

parcourir les entités d'un bloc


Messages recommandés

Posté(e)

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. bref

je 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 lustres

http://cadxp.com/topic/34533-parcourir-les-entites-qui-composent-un-bloc/page__view__findpost__p__187031

mais 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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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...

Posté(e)

Hello

 

En fait la fonction (gile) =

G = Great

I = Incredible

L = Lisp

E = Expert

 

Encore MERCI Gilles pour ta contribution !!

 

Bye, lecrabe

Autodesk Expert Elite Team

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité