Aller au contenu

Lier 2 attributs


salvanorigatore

Messages recommandés

Bonjour à tous,

J’aimerais pouvoir lier deux attributs de blocs dans le même bloc ou dans des blocs différents.

J’essaie de m’expliquer : je voudrais qu’en modifiant la valeur d’un attribut dans un bloc, l’attribut « lié » se mette à jour automatiquement sans autres manipulations.

Est-ce possible.

Merci par avance de votre aide. :)

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 58
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Salut

Une premiere idée :

Met ton attribut en constant...

@+

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Merci jalna mais je crois que ça ne répond pas à ma demande.

Citation de l'aide de AutoCAD :

 

" Constant : Affecte aux attributs une valeur fixe pour les insertions de bloc."

 

Or moi j'ai besoin que deux attributs différents (dans le même bloc ou dans des blocs différents) soient modifiés en même temps par une seule manipulation.

 

Merci quand même.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

Pour ça, il va falloir jouer avec les réacteurs. Je sens qu'un jour j'aurai peut-être la surprise de recevoir une bouteille de champagne ;)

Ta demande m'intéresse au niveau prog. L'interaction que tu souhaites avec tes deux attributs, c'est uniquement le texte qui doit changer ou encore la couleur, le calque, etc..., ou encore que l’un soit le clone de l’autre

En ce moment, j'ai du boulot, mais dès que j'ai un instant, je le fais

 

@+

 

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

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Patrick_35,

Ta proposition me fait vraiment plaisir, c'est vraiment sympa de te proposer de m'aider en faisant une prog.

Je suis d'accord que tu puisse faire ton programme quand tu en auras le temps, merci par avance.

A bientôt.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

Salut Patrick,

je n’avais pas fait attention que c’était une question… :exclam:

En fait je n’ai pas besoin que ça soit le clone de l’autre mais juste pouvoir définir que deux attributs que j’aurais choisis dans deux blocs différents puissent changer en même temps lorsque je modifie l’un des deux.

J’espère que je suis assez clair… :(

Merci encore.

A plus.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

Merci aussi à Eric, mais malheureusement mon patron n’a pas prévus l’achat de la version 2005.

Tout au moins pas avant la sortie de la version 2008 :euro: si tu vois ce que je veux dire...

Ciao.

 

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

Merci aussi à Eric, mais malheureusement mon patron n’a pas prévus l’achat de la version 2005.

Tout au moins pas avant la sortie de la version 2008 si tu vois ce que je veux dire...

 

Fais lire cet article à ton patron, ça le fera peut être changer d'avis

 

économies, économies ;)

 

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Comme promis

 

@+

 

(defun modifier_attribut(obj rea arg / att n)
 (if (and (vlax-read-enabled-p obj)(vlax-read-enabled-p (vlr-data rea)))
   (if (not (eq (vla-get-textstring (vlr-data rea))(vla-get-textstring obj)))
     (vla-put-textstring (vlr-data rea) (vla-get-textstring obj))
   )
   (progn
     (effacer_data obj)
     (refaire_les_reacteurs)
   )
 )
)

(defun refaire_les_reacteurs(/ n r)
 (effacer_les_reacteurs)
 (if (vlax-ldata-list "Patrick_35")
   (foreach n (vlax-ldata-list "Patrick_35")
     (vlr-object-reactor (list (cadr n)) (caddr n) '((:vlr-Modified . modifier_attribut)))
     (vlr-object-reactor (list (caddr n)) (cadr n) '((:vlr-Modified . modifier_attribut)))
   )
 )
 (princ)
)

(defun effacer_les_reacteurs(/ liaison n rea)
 (if (setq rea (vlr-reactors :vlr-object-reactor))
   (progn
     (setq n 1 rea (nth n (car rea)))
     (while rea
       (setq liaison nil)
       (if (eq (cdr (car (vlr-reactions rea))) 'MODIFIER_ATTRIBUT)
         (setq liaison rea)
       )
       (if liaison
         (vlr-remove liaison)
         (setq n (1+ n))
       )
       (if (setq rea (vlr-reactors :vlr-object-reactor))
         (setq rea (nth n (car rea)))
       )
     )
   )
 )
 (princ)
)

(defun effacer_data(sel_att / att n r)
 (foreach n (vlax-ldata-list "Patrick_35")
   (if (or (eq (vla-get-objectid (cadr  n)) (vla-get-objectid sel_att))
           (eq (vla-get-objectid (caddr n)) (vla-get-objectid sel_att)))
     (setq r (car n))
   )
 )
 (if r
   (progn
     (vlax-ldata-delete "Patrick_35" r)
     (if (setq att (vlax-ldata-list "Patrick_35"))
       (progn
         (setq n 0)
         (while (nth n att)
           (vlax-ldata-put "Patrick_35" (itoa n) (list (cadr (nth n att)) (caddr (nth n att))))
           (setq n (1+ n))
         )
         (vlax-ldata-delete "Patrick_35" (itoa n))
       )
     )
   )
 )
 r
)

(defun c:eatt (/ n sel_att)
 (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
 (if (vlax-ldata-list "Patrick_35")
   (while (not sel_att)
     (setq sel_att (car (nentsel (strcat"\nSélection d'un Attribut à dissocier : "))))
     (if sel_att
       (if (= (cdr (assoc 0 (entget sel_att))) "ATTRIB")
         (progn
           (if (setq sel_att (effacer_data (vlax-ename->vla-object sel_att)))
      (progn
               (refaire_les_reacteurs)
        (princ "\nAttribut dissocié")
      )
             (progn
 	        (alert "Attribut non associé")
	(setq sel_att nil)
      )
    )
  )
  (progn
           (alert "Ce n'est pas un Attribut.")
    (setq sel_att nil)
  )
)
     )
   )
   (alert "Pas encore d'association d'attributs")
 )
 (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
 (princ)
)

(defun c:latt(/ att1 att2 n r)
 (defun selection_attribut(msg / n sel_att)
   (while (not sel_att)
     (setq sel_att (car (nentsel (strcat"\nSélection du " msg " Attribut : "))))
     (if sel_att
       (if (= (cdr (assoc 0 (entget sel_att))) "ATTRIB")
         (progn
           (setq sel_att (vlax-ename->vla-object sel_att) r nil)
    (foreach n (vlax-ldata-list "Patrick_35")
      (if (or (eq (vla-get-objectid (cadr  n)) (vla-get-objectid sel_att))
	      (eq (vla-get-objectid (caddr n)) (vla-get-objectid sel_att)))
	(setq r T)
      )
    )
           (if r
             (progn
               (alert "Attribut déjà associé.")
               (setq sel_att nil)
             )
           )
         )
         (progn
           (alert "Ce n'est pas un Attribut.")
           (setq sel_att nil)
         )
       )
     )
   )
   sel_att
 )

 (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
 (if (setq att1 (selection_attribut "1er"))
   (progn
     (vla-highlight att1 :vlax-true)
     (if (setq att2 (selection_attribut "2em"))
       (progn
  (vla-highlight att1 :vlax-false)
  (if (eq (vla-get-objectid att1)(vla-get-objectid att2))
    (alert "Sélection identique")
    (progn
      (if (not (vlax-ldata-list "Patrick_35"))
	(setq n "0")
	(setq n (itoa (length (vlax-ldata-list "Patrick_35"))))
      )
      (vla-put-textstring att2 (vla-get-textstring att1))
             (vlax-ldata-put "Patrick_35" n (list att1 att2))
             (vlr-object-reactor (list att1) att2 '((:vlr-Modified . modifier_attribut)))
             (vlr-object-reactor (list att2) att1 '((:vlr-Modified . modifier_attribut)))
      (princ "\nLiaison effectuée.")
    )
  )
)
     )
   )
 )
 (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
 (princ)
)

(vl-load-com)
(refaire_les_reacteurs)
(princ "\n\tProgramme chargé. Faites LATT pour lier deux attributs.\n\tFaites EATT pour supprimer la liaison de deux attributs")
(princ)

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Patrick_35,

T’es vraiment un pro, rien que de voir tes lignes de prog ça fait rêver.

Excuse ma grande ignorance mais peux-tu m’indiquer simplement comment je dois utiliser ce que tu à fais ? :calim:

Merci beaucoup d’avance.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

C’est encore moi,

Patrick_35 t’est vraiment un super pro.

J’ai compris comment utiliser tes lignes de prog et ça marche du tonnerre.

Mille fois merci. :D

 

Je sais que je suis pénible … :red: mais j’ai encore une requête :

Est-ce que on peut faire la même chose mais avec plus de 2 attributs ?

 

Merci encore.

A bientôt.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

Un super pro, non, juste un autodidacte qui à pour hobby la prog ;)

 

Pour ce que tu demandes, oui c’est réalisable mais ça induit des fonctions complémentaires comme par exemple

Une commande vatt (voir attributs) pour visualiser les attributs qui sont liés entre eux par une polyligne (que l'on pourra effacer ensuite)

Une commande aatt (ajouter attribut) pour inclure un attribut dans une chaîne de liaison qui existe déjà

Une commande satt (supprimer attribut) pour retirer un attribut d’une chaîne de liaison

Et modifier la commande eatt (effacer attribut) pour supprimer toute une chaîne de liaison ainsi que la commande latt (lier les attributs) pour faire une chaîne de liaison

 

Dès que j’aurais un moment, je modifie le lisp

 

@+

 

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

Lien vers le commentaire
Partager sur d’autres sites

Super pro et modeste, en plus autodidacte : respect !

En tout cas t’es efficace et ce que tu fais marche.

Sans flatteries j’aimerais un jour t’arriver aux basques. :yltype:

Merci encore et aussi pour la modif que tu va réaliser, c’est très sympa de ta part.

A bientôt.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Patrick_35,

J’ai récupéré ton programme je me suis crée une petite barre d’outils avec une icône pour chaque fonction que tu à prévu.

Ensuite je l’ai testé et il fonctionne vraiment bien et en plus c’est exactement ce dont j’avais besoin, je ne sais pas comment te remercier.

J’espère ne pas être trop pénible mais tant pis je me lance… :red: voila je voulais juste te demander une petite amélioration, si c’est possible, je t’explique :

Si après avoir crée une chaîne d’attributs je duplique un bloc, dont un attribut fait partie de la chaîne, l’attribut du nouveau bloc ne s’inclut pas automatiquement dans la chaîne dont l’original faisait partie. Y-t-il moyen que cela se fasse « automatiquement » sans que j’aie besoin d’utiliser la fonction AATT (Ajouter un attribut dans une chaîne) ?

Je ne veux pas te compliquer la vie, si c’est rapide et simple à faire… sinon tant pis j’utiliserais la commande AATT.

Quoi qu’il en soit ton programme est très pratique et à mon avis je ne vais pas être le seul à y trouver un intérêt…

Merci encore infiniment.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir

je ne sais pas comment te remercier.

Juste une bouteille qui fait des bulles ;) (du coca, non non, un peu de cidre des glaces ;'-)) )

 

Tout est faisable et en plus ce n'est pas trop compliqué

Quand j'aurai un moment

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Patrick_35,

Je ne veux surtout pas décourager ta générosité, donc je te dis juste merci beaucoup pour ta proposition et je reste dans l’attente.

 

...Pour la boisson qui fait de bulles : j’ai bien essayé de faire couler du champagne sur l’écran mais les bulles non pas réussi à le traverser ! Tant pis c’est l’intention qui compte… non ? ;)

 

En tout cas merci encore et à bientôt.

 

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

Salut

Pour ces bulles là, je ferai comme dans la pub où des chiens nettoient l'écran ;)

En attendant, je me contente de ma bouteille d'eau :angel:

Blague à part, le lien a été mis à jour pour y intégrer ta demande sur la commande copier

 

@+

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

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é