Aller au contenu

Messages recommandés

Posté(e)

Bonjour à Tous,

 

Comment peut-on récupérer la valeur d'un attribut constant d'un bloc sélectionné à la souris ?

 

Peut-on changer cette valeur ?

 

Merci.

 

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

 

Maréchal Foch

Posté(e)

Coucou, je ne sais pas si tu sais bricoler un petit peu en lisp mais ce code de Matt pourra surement t'aider après quelques modifications.

 

 (defun c:vblat_matt (/ ent str)
(while (or
(not (setq ent (car (entsel "\nSélectionner un bloc :"))))
(/= (cdr (assoc 0 (entget ent))) "INSERT")
)
)
(if (cdr (assoc 66 (entget ent)))
(progn
(setq str "\nCe bloc contient un ou des attributs : ")
(while (setq ent (entnext ent))
(if (eq (cdr (assoc 0 (entget ent))) "ATTRIB")
(setq str (strcat
str
"\n"
(cdr (assoc 2 (entget ent)))
" ->\t"
(cdr (assoc 1 (entget ent)))
))
)
)
(alert str)
)
(princ "\nCe bloc ne contient pas d'attribut.")
)
(princ)
)

 

Bon courage

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

Posté(e)

Salut à vous,

 

Merci de m'avoir répondu

.

Arcasdk, hélas, ça ne marche pas ta soluce, ce lisp ne donne pas la valeur d'un attribut constant.

 

Sinon, Patrick_35, en fait je veux utiliser un bloc avec des attributs constant afin qu'un utilisateur de ce bloc ne puisse pas modifier les valeurs avec l'éditeur d'attribut classique, mais qu'il soit obligé d'utiliser le lisp que je souhaite créer.

 

Je souhaite faire un bloc comme ceci :

 

Longueur de câble = attrib classique l'opérateur rentre la longueur

Type de câble = attrib constant invisible contient une valeur fixe

Perte câble = attrib constant, le lisp calcul sa valeur en fonction de la Longueur et du Type de câble

 

Encore merci à vous.

 

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

 

Maréchal Foch

Posté(e)

Salut,

 

Pour un attribut constant, il faut chercher dans les composant de la définition du bloc.

 

Je t'avais répondu à une question du même ordre ici

 

[Edité le 16/9/2008 par (gile)]

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

Posté(e)

Merci Gile,

 

Effectivement, je m'en suis souvenu après.

Mais est-ce que je peux changer la valeur d'un attribut constant ?

 

Je pense que oui, mais est-ce que tu peux m'aider une nouvelle fois ?

 

Merci encore.

 

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

 

Maréchal Foch

Posté(e)

Re,

 

Oui, on peut changer la valeur de l'attribut avec entmod, il faut faire ATTSYNC ensuite pour mettre les attributs à jour.

 

Remplace ETTIQUETTE par le nom de l'étiquette (en majuscules) et NomDuBloc par le nom du bloc

 

(setq bloc (tblsearch "Block" "NomDuBloc")
     ent  (cdr (assoc -2 bloc))
     loop T
)
(while (and loop ent)
 (setq	elst (entget ent)
ent  (entnext ent)
 )
 (if (and (= (cdr (assoc 0 elst)) "ATTDEF")
   (= (logand 2 (cdr (assoc 70 elst))) 2)
   (= (cdr (assoc 2 elst)) "ETIQUETTE")
     )
   (progn
     (setq loop nil)
     (entmod
(subst (cons 1 "Nouvelle valeur")
       (assoc 1 elst)
       elst
)
     )
     (entupd (tblobjname "BLOCK" "NomDuBloc"))
   )
 )
)
(command "_attsync" "_name" "NomDuBloc") 

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

Posté(e)

Ok, je te remercie, je vais regarder ça plus tard.

 

Pour l'instant je suis bloqué.

Je ne comprends pas...

 

J'ai plusieurs attrib constant, et lorsque je veux extraire les valeurs , elles se mélange, j'ai un défaut dans mon code, mais je ne trouve pas.

 

Je pensais que c'était mon bloc qui était mal fait, mais non.

 

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

 

Maréchal Foch

Posté(e)

Voici une partie de mon lisp :

 

 

 
         (setq DefBloc (tblsearch "Block" NomBloc))
         (setq EntBloc (cdr (assoc -2 DefBloc)))
         (setq loop T)
         (while (and loop EntBloc)

           (setq NomEnt (entget EntBloc))
           (setq EntBloc (entnext EntBloc))

           (if (and (= (cdr (assoc 0 NomEnt)) "ATTDEF")
             (= (logand 2 (cdr (assoc 70 NomEnt))) 2)
             (Progn
               (= (cdr (assoc 2 NomEnt)) "P_GSM")	; si le nom de l'étiquette de l'attribut est
               (setq NomAtt1 (assoc 1 NomEnt))
               (setq Val_P_GSM NomAtt1)
               (setq Val_P_GSM (cdr Val_P_GSM))

               (= (cdr (assoc 2 NomEnt)) "P_DCS")	; si le nom de l'étiquette de l'attribut est
               (setq NomAtt2 (assoc 1 NomEnt))
               (setq Val_P_DCS NomAtt2)
               (setq Val_P_DCS (cdr Val_P_DCS))

               (= (cdr (assoc 2 NomEnt)) "P_UMTS")	; si le nom de l'étiquette de l'attribut est
               (setq NomAtt3 (assoc 1 NomEnt))
               (setq Val_P_UMTS NomAtt3)
               (setq Val_P_UMTS (cdr Val_P_UMTS))
               )
               )
               (setq loop nil)
               (setq ret (cdr (assoc 1 NomEnt)))
             )
           )

 

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

 

Maréchal Foch

Posté(e)

Salut,

 

C'est bon j'ai refait mon code, j'avais fait n'importe quoi.

 

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

 

Maréchal Foch

Posté(e)

Lili2006

 

Voici donc mon nouveau code :

 

 
(setq bloc (tblsearch "Block" "SYN_TAB_PERTES_1'1-4"))
(setq ent (cdr (assoc -2 bloc)))
(setq loop T)


(while (and loop ent)

(setq elst (entget ent))
(setq ent (entnext ent))

(if (and (= (cdr (assoc 0 elst)) "ATTDEF")
(= (logand 2 (cdr (assoc 70 elst))) 2)
(= (cdr (assoc 2 elst)) "P_GSM")		; l'étiquette en majuscules
)
(setq Val1 (cdr (assoc 1 elst)))
)

(if (and (= (cdr (assoc 0 elst)) "ATTDEF")
(= (logand 2 (cdr (assoc 70 elst))) 2)
(= (cdr (assoc 2 elst)) "P_DCS")		; l'étiquette en majuscules
)
(setq Val2 (cdr (assoc 1 elst)))
)

(if (and (= (cdr (assoc 0 elst)) "ATTDEF")
(= (logand 2 (cdr (assoc 70 elst))) 2)
(= (cdr (assoc 2 elst)) "P_UMTS")		; l'étiquette en majuscules
)
(setq Val3 (cdr (assoc 1 elst)))
) 

(if (and (= (cdr (assoc 0 elst)) "ATTDEF")
(= (logand 2 (cdr (assoc 70 elst))) 2)
(= (cdr (assoc 2 elst)) "COEF_GSM")		; l'étiquette en majuscules
)
(setq Val4 (cdr (assoc 1 elst)))
)

(if (and (= (cdr (assoc 0 elst)) "ATTDEF")
(= (logand 2 (cdr (assoc 70 elst))) 2)
(= (cdr (assoc 2 elst)) "COEF_DCS")		; l'étiquette en majuscules
)
(setq Val5 (cdr (assoc 1 elst)))
)

(if (and (= (cdr (assoc 0 elst)) "ATTDEF")
(= (logand 2 (cdr (assoc 70 elst))) 2)
(= (cdr (assoc 2 elst)) "COEF_UMTS")		; l'étiquette en majuscules
)
(setq Val6 (cdr (assoc 1 elst)))
)

)

(setq loop nil)

 

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

 

Maréchal Foch

Posté(e)

Salut Gile,

 

Super ta réponse. Je te remercie.

Le seul Hic, c'est que je peux avoir plusieurs bloc insérer et que je veux qu'ils soient indépendants et là du coup ils récupère tous la même valeur.

 

Comment faire ? A savoir que je sélectionne à la souris le bloc que je souhaite.

 

Re,

 

Oui, on peut changer la valeur de l'attribut avec entmod, il faut faire ATTSYNC ensuite pour mettre les attributs à jour.

 

Remplace ETTIQUETTE par le nom de l'étiquette (en majuscules) et NomDuBloc par le nom du bloc

 

(setq bloc (tblsearch "Block" "NomDuBloc")
     ent  (cdr (assoc -2 bloc))
     loop T
)
(while (and loop ent)
 (setq	elst (entget ent)
ent  (entnext ent)
 )
 (if (and (= (cdr (assoc 0 elst)) "ATTDEF")
   (= (logand 2 (cdr (assoc 70 elst))) 2)
   (= (cdr (assoc 2 elst)) "ETIQUETTE")
     )
   (progn
     (setq loop nil)
     (entmod
(subst (cons 1 "Nouvelle valeur")
       (assoc 1 elst)
       elst
)
     )
     (entupd (tblobjname "BLOCK" "NomDuBloc"))
   )
 )
)
(command "_attsync" "_name" "NomDuBloc") 

 

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

 

Maréchal Foch

Posté(e)

Salut,

 

Le seul Hic, c'est que je peux avoir plusieurs bloc insérer et que je veux qu'ils soient indépendants et là du coup ils récupère tous la même valeur.

 

Un attribut constant a une valeur constante (comme son nom l'indique) définie dans la définition même du bloc (un peu comme un texte) sa valeur sera donc forcément la même dans toutes les références.

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

Posté(e)

Ah ouai d'accord, je comprend mieux maintenant !

 

Il faut donc que j'utilise un attribut classique alors.

Mais c'est pas grave tout cela est utile car j'ai besoin d'attribut de ce type (constant) aussi.

 

Merci Gile.

 

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

 

Maréchal Foch

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é