Aller au contenu

[Résolu] Bloc attribut


litelsousa

Messages recommandés

Bonjour,

 

J'ai un bloc contenant des attributs faits de champs pour me donner des renseignements sur un objet.

On pourrait le comparer à une étiquette contenant:

 

Couleur: ROUGE

Calque: Bordure

Longueur: 5.50

 

(les textes en italique sont donc les résultats des champs)

 

Mon soucis est qu'en copiant ce bloc, je suis obligé de mettre à jour (sélectionner un nouvel objet) un à un les attributs de ce bloc.

 

Existe-t-il une solution pour le faire en un clic?

 

Merci pour votre aide, en espérant que vous m'aurez compris.

 

Marqué RESOLU par didier, à la demande de l'auteur

Lien vers le commentaire
Partager sur d’autres sites

Ouai pas vraiment tout compris.

 

Mais si tu veux que tous les nouveaux bloc ou alors certains aient les mêmes réponses dans leurs attributs il te suffit de les sélectionner et dans la palette des propriétés tu retrouves les étiquettes de ces attributs qu'il te suffit de remplir et tous les blocs sélectionné auront la même valeur.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour et merci

 

Ce n'est pas tout à fait ce que j'aimerais, en fait ce qu'il me faut, c'est attribuer un nouvel objet au bloc. mais en faisant ça, je suis obligé de mettre à jour manuelement les attribuer (leur atribuer le nouvel objet de référence).

 

En espérant être plus clair...

 

Salutations

Lien vers le commentaire
Partager sur d’autres sites

Bonjour.

J'ai le même cas que toi. J'ai un bloc avec atribut champs qui renseigne des données d'un autre bloc de porte dynamique.

Pour que cela fonctionne il faut que je selectionne les 2 blocs que je l'ai copie ensemble. Ainsi le nouveau bloc atribut me donne bien les indications de mon nouveau bloc porte copié.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Tu peux essayer avec ce lisp :

 

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

 

Avant de l'utiliser, il faut ouvrir le fichier et remplacer dans la partie config le nom du bloc à utiliser, ainsi que les étiquettes des attributs à renseigner. ;)

 

Le code :

 

(defun c:ETIQUETTE ( / GetBlock GetObjectID PutAttValue InsertBlock
                      BOBJ DOC ENT BLOC BLOCPL CTAG LTAG PTAG CONVLONG OBJ PT RESULT
                      SPC TAG VALUE PCONV OLDCLAYER OLDCECOLOR OLDCELTYPE OLDCELWEIGHT
                      OLDCMDECHO OLDERR DECIMALES)
 (vl-load-com)
 ;; Brice Studer, octobre 2011
 
 ;~~~ CONFIG ~~~

 (setq bloc "etiquette")   ;; Nom du bloc à insérer (doit exister dans le dessin)
 
 (setq ctag "COULEUR")   ;; Etiquette de l'attribut qui affichera la couleur

 (setq ltag "CALQUE")   ;; Etiquette de l'attribut qui affichera le calque
 
 (setq ptag "LONGUEUR")   ;; Etiquette de l'attribut qui affichera la longueur
 
 (setq blocpl "etiquettes")   ;; Calque sur lequel insérer le bloc
 
 ;(setq blocpl nil)   ;; enlever le 1er ; pour utiliser le calque courant
 
 (setq convlong T)	;; remplacer T par nil pour désactiver la conversion des longueurs en m
 
 (setq decimales "2") ;; Nombre de décimales pour la longueur

 ;~~~ FIN CONFIG ~~~

(defun initerr()
	(setq oldclayer (getvar "clayer"))
	(setq oldcecolor (getvar "cecolor"))
	(setq oldceltype (getvar "celtype"))
	(setq oldcelweight (getvar "celweight"))
	(setq oldcmdecho (getvar "cmdecho"))
	(setq olderr *error*)

	(setq *error* trap)
	(setvar "cecolor" "bylayer")
	(setvar "celtype" "bylayer")
	(setvar "celweight" -1)
	(setvar "cmdecho" 0)

	(princ)
)
 
(defun reset()
	(setq *error* olderr)
	(setvar "clayer" oldclayer)
	(setvar "cecolor" oldcecolor)
	(setvar "celtype" oldceltype)
	(setvar "celweight" oldcelweight)
	(setvar "cmdecho" oldcmdecho)
	(princ)
)
 
(defun trap(errmsg)
	(command nil nil nil)
	(princ (strcat "\nErreur: " errmsg "\n"))
	(setq *error* olderr)
	(setvar "clayer" oldclayer)
	(setvar "cecolor" oldcecolor)
	(setvar "celtype" oldceltype)
	(setvar "celweight" oldcelweight)
	(setvar "cmdecho" oldcmdecho)
	(vla-regen doc acActiveViewport)
	(princ)
)

(defun GetObjectID (obj / acobj)
	(if (= (type obj) 'ENAME)(setq obj (vlax-ename->vla-object obj)))
	(if (< 40 (strlen (vl-princ-to-string (setq acobj (vlax-get-acad-object)))))
		(vlax-invoke-method (vla-get-utility (vla-get-activedocument acobj)) "GetObjectIdString" obj :vlax-false)
		(itoa (vla-get-objectid obj))
	)
)

 (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
 )

 (defun InsertBlock ( Block Name Point )
   (if
     (not
       (vl-catch-all-error-p
         (setq result
           (vl-catch-all-apply (function vla-insertblock)
             (list Block (vlax-3D-point point) Name 1. 1. 1. 0.)
           )
         )
       )
     )
     result
   )
 )

 (initerr)
 
 (setq spc
   (if
     (or
       (eq AcModelSpace
         (vla-get-ActiveSpace
           (setq doc
             (vla-get-ActiveDocument
               (vlax-get-acad-object)
             )
           )
         )
       )
       (eq :vlax-true (vla-get-MSpace doc))
     )
     (vla-get-ModelSpace doc)
     (vla-get-PaperSpace doc)
   )
 )
 

 (if (tblsearch "BLOCK" bloc)
   
   (while
     (progn
       (setq ent (car (entsel "\nChoix de l'objet: ")))
	
       (if blocpl (command "_.-layer" "_T" blocpl "_ON" blocpl "_m" blocpl ""))
	
       (cond
         ( (eq 'ENAME (type ent))

           (setq obj (vlax-ename->vla-object ent))

           (if
             (and
               (setq pt (getpoint "\nSpécifiez le point d'insertion du bloc: "))
               (setq bObj (InsertBlock spc bloc pt))
             )
             (progn
               (setq pconv "1")
               (if convlong
                 (cond
                 ((= (getvar "insunits") 4) (setq pconv "0.001"))
                 ((= (getvar "insunits") 5) (setq pconv "0.01"))
                 )
               )
               (and ctag
                 (PutAttValue bObj ctag
                   (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                     (GetObjectID obj) ">%).TrueColor>%"
                   )
                 )
               )
               (and ltag
                 (PutAttValue bObj ltag
                   (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                     (GetObjectID obj) ">%).Layer>%"
                   )
                 )
               )
               (if (vlax-property-available-p obj 'Length)
                 (and ptag
                   (PutAttValue bObj ptag
                     (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                       (GetObjectID obj) ">%).Length \\f \"%lu2%pr" decimales "%ct8[" pconv "]\">%"
                     )
                   )
                 )
               )
             )
           )
         )
       )
     )
   )
   (princ "\n** Bloc non trouvé **")
 )
 
 (reset)
 (vla-regen doc acActiveViewport)
 
 (princ)
)

Lien vers le commentaire
Partager sur d’autres sites

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é