Aller au contenu

lisp qui extrait des données d\'un bloc et que l\'on peu réinjecter dans un autre bloc


Messages recommandés

Posté(e)

Bonjour y a-t-il un lisp qui permet d'extraire des données d'un bloc attribut et que l'on peut réinjecter aussitôt dans un autre block attribut possédant les mêmes invite et étiquette

sans devoir passer par un fichier txt comme dans l’express-tools attout et attin

 

merci.

Posté(e)

Salut, merci gile, j’ai fais le test ça ne convient pas

Cela fonctionne uniquement si le bloc attribut source et identique au bloc attribut cible dans le cas contraire les information réinjectées ne sont pas mises à la bonne place

 

En pratique les informations que j’extrais du bloc attribut source sont réinjecté a deux autres bloc attribut de nom et de forme différente leurs points commun étant leur ( étiquette, invite, layeurs )

 

 

Exemple :

 

1è symbole source sonde de température,

2ème symbole contact ouvert.

3ème symbole bornier avec câble et repaire câble.

 

Posté(e)

Je presque suis sûr que ça a déjà été fait plus d'une fois.

Comme j'ai plus vite fait de (ré)écrire un petit truc que de faire une recherche, voici :

 

(defun c:copyatt (/ source attlst ss attrib)
 (vl-load-com)
 (if (and (setq source (car (entsel "\nSélectionnez le bloc source: ")))
   (setq source (vlax-ename->vla-object source))
   (= (vla-get-ObjectName source) "AcDbBlockReference")
   (= (vla-get-HasAttributes source) :vlax-true)
     )
   (progn
     (foreach att (vlax-invoke source 'GetAttributes)
(setq attlst (cons (cons (vla-get-TagString att)
			 (vla-get-TextString att)
		   )
		   attlst
	     )
)
     )
     (if (ssget '((0 . "INSERT") (66 . 1)))
(progn
  (vlax-for blk	(setq ss (vla-get-ActiveSelectionSet
			   (vla-get-Activedocument
			     (vlax-get-acad-object)
			   )
			 )
		)
    (foreach att (vlax-invoke blk 'GetAttributes)
      (if (setq attrib (assoc (vla-get-TagString att) attlst))
	(vla-put-TextString att (cdr attrib))
      )
    )
  )
  (vla-Delete ss)
)
     )
   )
   (princ "\nEntité non valide")
 )
 (princ)
)

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

Posté(e)

Bonjour gile, je viens de tester ton code il s'arrete juste après avoir saisit le bloc source,

impossible de réinjecter dans les autres.

a+

Posté(e)

Pas chez moi, après avoir sélectionné le bloc source, tu as l'invite par défaut "Choix des objets: " qui doit s'afficher et tu sélectionnes les blocs cible.

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

Posté(e)

j'ai ça comme méssage

 

Commande: copyatt

Sélectionnez le bloc source: ; erreur: no function definition:

VLAX-ENAME->VLA-OBJECT

 

Commande:

 

 

encore merci.

Posté(e)

J'avais oublié de mettre dans le code l'expression (vl-load-com) qui charge l'interface COM/ActiveX utilisée par les fonction LISP vla* (chargée automatiquement chez moi).

 

J'ai modifié le code ci-dessus, ça devrait fonctionner maintenant.

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

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é