Aller au contenu

Renseigner un attribut de bloc après selection


Messages recommandés

Posté(e)

Bonjour,

 

Je débute en lisp et comme je n'en fait pas beucoup, je sèche un peu.

Pouvez-vous m'aider ?

 

Je voudrais renseigner la valeure d'un attribut d'un bloc après selection à la souris de ce dernier, car je pourrais avoir 2 blocs insérés avec des valeures d'attribut différentes.

 

Du type : 1 - Qu'elle est la valeure que vous souhaitez ?

 

2 - Sélectionnez le bloc.

 

3 - Mise à jour effectuée.

 

Merci de votre aide.

 

Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent.

 

Maréchal Foch

Posté(e)

Salut,

avant de faire ça en lisp, j'ai l'impression que ta question autocad y répond de lui même avec les attributs étiquette ,invite et valeur, et pour modifier avec "éditer les attributs"....

 

voir l'aide des attributs ...

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Merci de cette réponse, mais non cela ne me convient pas.

 

En effet, j'ai un premier lisp qui fonctionne qui me demande un angle de rotation pour un bloc que je sélectionne.

 

Et c'est cette valeure que je souhaite entrer dans l'attribut.

 

 

 

Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent.

 

Maréchal Foch

Posté(e)

Salut

un (setq bl (car (entsel))) pour sélectionner un bloc contenant des attributs

un (setq att (entget (entnext bl))) pour trouver le premier attribut

un (setq att (subst (cons 1 "Mon Texte") (assoc 1 att) att)) pour changer la valeur de l'attribut

un (entmod att) pour mettre l'attribut à jour dans la base d'autocad

un (entupd (cdr -assoc -1 att)) pour mettre à jour à l'écran

et si d'autres attributs suivent, un (setq att (entnext (cdr (assoc -1 att))))

Et si tu n'as plus d'attibuts, tu trouvereas un (0 . SEQEND) de l'entnext. C'est ce qui permet de faire des boucles et de sortir pour dire que c'est fini

 

@+

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

Posté(e)

Merci Patrick_35

 

Cela semble correspondre à ce que j'attendais, je pense exploiter dès demain tes renseignement, même si la fin de ton post ne me parle pas trop ...

 

Merci beaucoup, c'est super sympa.

 

Vous êtes vraiment super cool !

 

Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent.

 

Maréchal Foch

Posté(e)

Patrick_35

 

Je pense qu'il y avait une petite coquille dans :

 

(entupd (cdr -assoc -1 att))

 

Je pense que c'est plutôt :

 

(entupd (cdr (assoc -1 att)))

 

Si j'ai bien compris le truc, après je fais

 

(setq att (entnext (cdr (assoc -1 att))))

 

Pour atteindre l'attribut suivant, suivi d'une boucle pour retourner sur :

 

(setq att (subst (cons 1 "Mon Texte") (assoc 1 att) att))

(entmod att)

(entupd (cdr (assoc -1 att)))

 

En tout cas, merci encore c'est super tu as répondu à mon attente.

 

Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent.

 

Maréchal Foch

Posté(e)

un lisp récupérer dans le forum je crois et qui regroupe un peu ce que tu demandes, si tu veux t'en inspirer...

(ce lisp copie la valeur d'un attribut de bloc dans un autre...)

 

 ;;;==============================================================
;;;								;
;;; CAT.LSP V1.20						;
;;;								;
;;; Copier des attributs					;
;;;								;
;;; Copyright (C) Patrick DEWEVRE				;
;;;								;
;;;==============================================================

(defun c:cat(/ chemin cmd fichier nom_bloc s p)

;;;-------------------------------------------------------------
;;;
;;; Gestion des erreurs
;;;
;;;-------------------------------------------------------------

(defun *errcat* (msg)
(if (/= msg "Function cancelled")
	(if (= msg "quit / exit abort")
		(princ)
		(princ (strcat "\nErreur : " msg)))
	(princ))
(setq *error* s)
(setvar "pickadd" p)
(setvar "cmdecho" cmd)
(princ)
)

;;;-------------------------------------------------------------
;;;
;;; Routine principale
;;;
;;;-------------------------------------------------------------

(defun changer_texte_attributs(/ a b c n r s ttt u v)

;;;-------------------------------------------------------------
;;;
;;; Changement de texte de l'entité
;;;
;;;-------------------------------------------------------------

(princ "\nSélectionner le Bloc de Référence.")
(setvar "pickadd" 0)
(setq s (ssget '((0 . "INSERT"))))
(setvar "pickadd" 1)
(if s
	(progn
		(setq r (entget (ssname s 0)))
		(if (= (cdr (assoc 66 r)) 1)
			(progn
				(princ "\nSélection des Blocs à Mofifier.")
				(if (setq s (ssget '((0 . "INSERT"))))
					(progn
						(setq n 0 u 0)
						(while (/= (ssname s n) nil)
							(setq a r v 0 b (entget (ssname s n)))
							(if (= (cdr (assoc 0 b)) "INSERT")	(setq ttt 1))
							(while (and (/= (cdr (assoc 0 a)) "SEQEND") (/= (cdr (assoc 0 b)) "SEQEND"))
								(setq c (subst (assoc 1 a) (assoc 1 b) b))
								(entmod c)
								(setq 	a (entget (entnext (cdr (assoc -1 a))))
									b (entget (entnext (cdr (assoc -1 b))))
									v 1)
							)
							(if (/= v 0)
								(progn
									(entupd (cdr (assoc -1 (entget (ssname s n)))))
									(setq u (1+ u))
							)	)
							(setq n (1+ n))
						)
						(if (and (= ttt 1) (= u 0))	(alert "Pas de blocs correspondant au bloc de référence."))
						(if (= ttt nil)			(alert "Pas de blocs sélectionnés."))
						(if (/= u 0)		(princ (strcat "\n" (itoa u) " blocs modifiés...")))
			)	)	)
			(alert "Bloc sans Attributs")
	)	)
	(princ "\nAucune Sélection...")
)	)

;;;-------------------------------------------------------------
;;;
;;; Routine de lancement
;;;
;;;-------------------------------------------------------------

(setq s *error*)
(setq *error* *errcat*)
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "_.undo" "_group")
(setq p (getvar "pickadd"))
(changer_texte_attributs)
(setvar "pickadd" p)
(command "_.undo" "_end")
(setq *error* s)
(setvar "cmdecho" cmd)
(princ)
)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

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é