Aller au contenu

Messages recommandés

Posté(e)

Après quelques heures d'acharnement voila le résultat :

 

(defun c:bb ( / ent ss atts)
 (vl-load-com)
 (while (null ent )
 (setq ent  (car(entsel "Séléctionné l'attribut :"))))
 (setq ss  (vlax-ename->vla-object ent))
 (setq atts (vlax-invoke ss 'getattributes))
 (vla-put-TextString (car atts) "jh"); "jh" étant le nouveau attribut
)

Posté(e)

Bonjour,

 

Juste une suggestion pour faire plus "simple" en partant de la même base :

 

(defun c:bobo ( / ent ss atts)
 (vl-load-com)
 (while (null ent )
 (setq ent  (car(nentsel "Séléctionnez l'attribut :"))))
 (setq ss  (vlax-ename->vla-object ent))
 (vla-put-TextString ss "jh"); "jh" étant le nouveau attribut
)

 

Et en plus ça fonctionne sur l'attribut sélectionné dans le bloc et pas uniquement sur le premier.

 

@+

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Y à-t-il un

next

en Lisp?

parce que j'ai un

foreach

avec plein de condition et ça aurait été bien si y passait au suivant quand il avait verifié une condition.

(defun c:bsbs ( / ent ss atts)
 (vl-load-com)
 (while (null ent )
 (setq ent  (car(entsel "Séléctionné le bloc avec attribut :"))))
 (setq ss  (vlax-ename->vla-object ent))
 (setq atts (vlax-invoke ss 'getattributes))
 (vla-put-TextString (car atts) "jh")
 (foreach att atts
   (if (eq (vla-get-TagString att) "ITEM")
   (vla-put-TextString att item_final))
   (if (eq (vla-get-TagString att) "NB")
   (vla-put-TextString att "1"))
   (if (eq (vla-get-TagString att) "DN")
   (vla-put-TextString att dn_final))
   (if (eq (vla-get-TagString att) "LONG.")
   (vla-put-TextString att longueur_final))
   (if (eq (vla-get-TagString att) "PN")
   (vla-put-TextString att pn_final))
   (if (eq (vla-get-TagString att) "TYPE")
   (vla-put-TextString att type_final))
   (if (eq (vla-get-TagString att) "FACE")
   (vla-put-TextString att face_final))
   (if (eq (vla-get-TagString att) "ELEVATION")
   (vla-put-TextString att elev_final))
   (if (eq (vla-get-TagString att) "DESIGNATION")
   (vla-put-TextString att design_final))
   (if (eq (vla-get-TagString att) "OBSERVATION")
   (vla-put-TextString att obs_final))
   )
)

Posté(e)

Salut,

 

Regarde la fonction cond.

 

(foreach att atts
 (cond 
  ((eq (vla-get-TagString att) "ITEM")
   (vla-put-TextString att item_final))
  ((eq (vla-get-TagString att) "NB")
   (vla-put-TextString att "1"))
  ; ...
 )
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut

 

Déjà avec COND

(cond
 ((eq (vla-get-TagString att) "ITEM")
   (vla-put-TextString att item_final))
 )
 ((eq (vla-get-TagString att) "NB")
   (vla-put-TextString att "1"))
 )
 ((eq (vla-get-TagString att) "DN")
   (vla-put-TextString att dn_final))
 )
 ((eq (vla-get-TagString att) "LONG.")
   (vla-put-TextString att longueur_final))
 )
 ((eq (vla-get-TagString att) "PN")
   (vla-put-TextString att pn_final))
 )
 ((eq (vla-get-TagString att) "TYPE")
   (vla-put-TextString att type_final))
 )
 ((eq (vla-get-TagString att) "FACE")
   (vla-put-TextString att face_final))
 )
 ((eq (vla-get-TagString att) "ELEVATION")
   (vla-put-TextString att elev_final))
 )
 ((eq (vla-get-TagString att) "DESIGNATION")
   (vla-put-TextString att design_final))
 )
 ((eq (vla-get-TagString att) "OBSERVATION")
   (vla-put-TextString att obs_final))
 )
)

 

Avec une liste

(setq lst (list (cons "ITEM"		item_final)
	(cons "NB"		"1")
	(cons "DN"		dn_final)
	(cons "LONG"		longueur_final)
	(cons "PN"		pn_final)
	(cons "TYPE"		type_final)
	(cons "FACE"		face_final)
	(cons "ELEVATION"	elev_final)
	(cons "DESIGNATION"	design_final)
	(cons "OBSERVATION"	obs_final)
  )
)
(and (setq ele (assoc (vla-get-TagString att) lst))
 (vla-put-TextString att (cdr ele))
)

 

En plus subtile en jouant avec les variables

Les Tag de tes attributs doivent avoir le même nom que les variables

(setq ITEM 0 NB 1 DN 2 LONG 3 PN 4)
(eval (read (vla-get-TagString att)))

Un exemple si le TAG = "NB", la valeur retournée est 1

 

ps : gile à été plus rapide, mais comme il y a d'autres solutions ;)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é