Aller au contenu

Messages recommandés

Posté(e)

Bonjour a tous

 

voila mon probleme

je recherche un lisp qui mettrait a jour les textes d'un semi de bloc

quand on modifie la coordonnée Z

j'ai cherché une reponse sur le site mais sans resultat

merci

Phil

Posté(e)

A l'avenir il suffirait effectivement d'utiliser un champ comme valeur par défaut de l'attribut.

 

Mais voici un lisp qui devrait te permettre de mettre à jour tes blocs: :)

 

(defun c:MAJZ (/ obj acdoc precision *error* oldcmdecho blk b att ss ins)
; Met à jour pour toutes les références du bloc choisi un attribut sélectionné,
; pour y afficher la coordonnée Z du bloc.
; Brice Studer, mars 2011
;
;~~~~~~~ CONFIG ~~~~~~~~~~~

(setq precision 3) ; nombre de décimales de l'altitude

;~~~~~~~ FIN CONFIG ~~~~~~~

(vl-load-com)
(setq	acdoc (vla-get-ActiveDocument (setq
	obj (vlax-get-acad-object)))
)

;~~~~~~~ GESTION ERREURS ~~~~~~~~~~~
(defun *error* (msg)
(and msg
	(or
		(member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON"))
		(princ (strcat "\nErreur : " msg))
	)
)
(if ss (vla-delete ss))
(setvar "cmdecho" oldcmdecho)
(vla-endundomark acdoc)
(princ)
)
;~~~~~~~ FIN GESTION ERREURS ~~~~~~~

;~~~~~~~ SOUS-FONCTIONS ~~~~~~~~~~~
(defun PutAttValue ( object tag value )
;; Lee Mac  ~  05.05.10
(mapcar
  (function
	(lambda ( attrib )
	  (and
		(eq tag (vla-get-TagString attrib))
		(vla-put-TextString attrib value)
	  )
	)
  )
  (vlax-invoke object 'GetAttributes)
)
value
)
;~~~~~~~ FIN SOUS-FONCTIONS ~~~~~~~

(vla-StartUndoMark acdoc)
(setq oldcmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)

(while
(not
	(and
		(setq blk (car (entsel "\nSélectionnez un des blocs à mettre à jour: ")))
		(setq blk (vlax-ename->vla-object blk))
		(= (vla-get-ObjectName blk) "AcDbBlockReference")
		(setq blk (vla-get-effectivename blk))
	);and
);not
(princ "\nL'objet sélectionné n'est pas un bloc ! ")
);while no bloc

(while
(not
	(and
		(setq att (car (nentsel "\nCliquez sur une valeur d'altitude: ")))
		(setq att (vlax-ename->vla-object att))
		(= (vla-get-ObjectName att) "AcDbAttribute")
		(setq att (vla-get-tagstring att))
	);and
);not
(princ "\nL'objet sélectionné n'est pas un attribut ! ")
);while no attribute

(if (ssget "_X" '( (0 . "INSERT") ) )
(vlax-for b (setq ss (vla-get-ActiveSelectionSet acdoc))
	(if (= blk (vla-get-effectivename b))
		(if
			(and
				(setq ins (vlax-get b 'InsertionPoint))
				(setq ins (caddr ins))
			)
			(putattvalue b att (rtos ins 2 precision))
		)
	);if b = blk
);vlax-for
);if ssget

(*error* nil)
(princ)
);MAJZ

(princ "\nCommande à utiliser: MAJZ")
(princ)

 

http://www.creao.fr/uploads/lisp/majZ.lsp

 

 

[Edité le 3/3/2011 par bryce]

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é