Aller au contenu

Copier valeur attribut vers autre bloc


Netparty

Messages recommandés

Coucou,

VBA uniquement ? Autrement il faudrait être un peu plus précis quand au nom des attributs et surtout si les noms des attributs sont les mêmes pour les deux blocs...
Mais la réponse est forcément oui (par contre si c'est VBA exclusivement, je laisse les personnes à même de répondre poster les infos).

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Netparty

Facile de répondre à une question dichotomique... La réponse à la question posée est OUI.

Ceci étant dit on n'est guère avancé, si tu veux des exemples de codes il faut donner ...

Des explications
Des exemples de blocs
Quelles sont les étiquettes à dupliquer ?
Ont-elles le même nom dans chaque bloc ?
Doit-on choisir l'attribut à l'écran dans le bloc de base et sélectionner l'attribut d'arrivée aussi à l'écran ?...

Personne n'aime travailler sans idée du but à atteindre, quand ce dernier sera mieux défini, je verrai ce que je peux faire pour aider.

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @didier

J'ai commencer un formulaire qui me permettrai de sélectionner chaque présentation (Source et destination)

image.thumb.png.6834a822ca8f30c8b21d3acbb730cff5.png

Quand je clique sur présentation1 dans source j'aimerais pouvoir choisir le bloc source avec les attributs a copier vers la destination.

J'aimerais pouvoir lister les attributs dans une listbox et sélectionner celui que je veux copier.

Exemple attribut source : IND_A à copier vers l'attribut destination IND_B

Merci

 

Lien vers le commentaire
Partager sur d’autres sites

Le sujet commence donc à se préciser. On a donc une seule définition de bloc concernée, mais ses références doivent se trouver dans des présentations différentes. Le but étant de gérer les modifications d'indices dans un cartouche. Plusieurs questions me viennent à l'esprit dans ce cas :

  1. Combien de références de bloc "CARTOUCHE" as-tu sur chacune de tes présentations ? As-tu un seul et unique bloc "CARTOUCHE" par présentation ou bien peux-tu en avoir plusieurs ?
  2. Pourquoi créer un programme qui copie les valeurs d'un cartouche vers un autre au lieu de créer un cartouche qui crée les indices de plusieurs cartouches en même temps ? Ainsi au lieu de devoir définir un cartouche source dans un premier temps puis de copier ses valeurs vers d'autres, tu définis en une fois les valeurs du cartouche source et des cartouches cibles.
  3. Peut-on avoir un .dwg d'exemple pour savoir sur quoi travailler précisément ?
  4. Je repose la question : VBA uniquement ou bien on peut faire de l'AutoLISP/DCL ?

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

il y a 16 minutes, Luna a dit :

Le sujet commence donc à se préciser. On a donc une seule définition de bloc concernée, mais ses références doivent se trouver dans des présentations différentes. Le but étant de gérer les modifications d'indices dans un cartouche. Plusieurs questions me viennent à l'esprit dans ce cas :

  1. Combien de références de bloc "CARTOUCHE" as-tu sur chacune de tes présentations ? As-tu un seul et unique bloc "CARTOUCHE" par présentation ou bien peux-tu en avoir plusieurs ?
    J'ai un seul bloc CARTOUCHE sur chaque présentation
     
  2. Pourquoi créer un programme qui copie les valeurs d'un cartouche vers un autre au lieu de créer un cartouche qui crée les indices de plusieurs cartouches en même temps ? Ainsi au lieu de devoir définir un cartouche source dans un premier temps puis de copier ses valeurs vers d'autres, tu définis en une fois les valeurs du cartouche source et des cartouches cibles.
    D'un projet à l'autre tout est différent c'est pour cela que j'aimerais pouvoir copier certain indice vers certaine présentation
     
  3. Peut-on avoir un .dwg d'exemple pour savoir sur quoi travailler précisément ?
  4. Je repose la question : VBA uniquement ou bien on peut faire de l'AutoLISP/DCL ?
    Je pensait que VBA était peut-être plus clair pour les formulaire mais cela peut-être aussi Autolisp/DCL

Bisous,
Luna

Voici un fichier exemple

Pour être un peu plus précis : je dois pouvoir choisir quel indice à copier mais la destination n'est pas forcement le même indice exemple je copie l'indice A de la présentation 1 vers l'indice B de la présentation 2.

Si je choisi de copier l'indice A je dois inclure tout ce qui va avec c'est à dire ( DATEA , DESSINATEURA , VERIFICATEURA et EMISSIONA )

 

Dessin_Test.dwg

Lien vers le commentaire
Partager sur d’autres sites

Pour le principe de la forme, en AutoLISP on peut utiliser ceci pour copier des attributs entre deux références de blocs (quelque soit le nom du bloc, il faut juste donner le nom de l'étiquette pour la source et l'étiquette cible :

(defun copy-Att (blk-src tag-src blk-tgt tag-tgt / ConvEnt get-att-list check LM:vl-SetAttributeValue value)
  (defun ConvEnt (name flag / tp)
    (if (= (setq tp (type name)) flag)
      name
      (apply (read (strcat "vlax-" (vl-symbol-name tp) "->" (vl-symbol-name flag))) (list name))
    )
  )
  (defun get-att-list (name)
    (mapcar '(lambda (a) (cons (vla-get-tagstring a) (vla-get-textstring a))) (vlax-invoke (ConvEnt name 'VLA-OBJECT) 'getAttributes))
  )
  (defun check (blk tag / att value)
    (and
      (= "AcDbBlockReference" (vla-get-ObjectName (ConvEnt blk 'VLA-OBJECT)))
      (setq att (get-att-list blk))
      (assoc tag att)
      (setq value (cdr (assoc tag att)))
    )
    value
  )
  (defun LM:vl-SetAttributeValue (blk tag val)
    (setq tag (strcase tag))
    (vl-some
      '(lambda (att)
        (if (= tag (strcase (vla-get-tagstring att)))
          (progn (vla-put-textstring att val) val)
        )
       )
      (vlax-invoke blk 'getAttributes)
    )
  )
  (and
    (setq value (check blk-src tag-src))
    (check blk-tgt tag-tgt)
    (LM:vl-SetAttributeValue (ConvEnt blk-tgt 'VLA-OBJECT) tag-tgt value)
  )
)

Un exemple d'utilisation simple :

(copy-att (car (entsel "\nSource : ")) "MODIFICATIONS_IND_A" (car (entsel "\nCible : ")) "MODIFICATIONS_IND_B")

Les arguments 'blk-*' peuvent aussi bien correspondre à l'Entity name de la référence de bloc qu'au VLA-Object de cette même référence. J'ai essayé de programmer en Visual LISP afin que cela se rapproche le plus possible du langage VBA. Evidemment il s'agit d'une méthode généralisée et non adaptée à ta demande précisément, cependant cela peut te donner des pistes de recherches.

Je verrais si j'ai un peu de temps dans la semaine pour regarder de plus près ta problématique. Je maintiens tout de même qu'il serait plus simple de créer un programme pour créer les indices de modification au lieu de les copier...

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

je te conseil de travail en listebox

pour gérer mes calques dans mes présentations :

image.png.dc17b4b18183f4717e15f166ea938c87.png

mais tu pourrais avoir une forme similaire avec en haut les presentataion et en bas la liste des blocs de la présentations ajouté grace à un événement ^^

et pour récupérer les blocs d'un espace papier : il faut le rendre actif et boucler sur les objets du paperspace 😉

Lien vers le commentaire
Partager sur d’autres sites

ThisDrawing.ActiveLayout = ThisDrawing.Layouts("NOM Présentations") 'tu vas aller vers ta présentation donc 1 ligne pour aller vers cette page et une autre a la fin pour revenir à la présentataiosn de base si besoin 😉

 

ensuite, tu n'as qu'a parcourir les blocs de la présentation (je te conseil de faire des fonctions car sinon tu t'en sortira pas 😉

 

 

 

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é