• Ce forum est la traduction générée par la machine de www.cad3d.it/forum1 - la communauté italienne du design. Plusieurs termes ne sont pas traduits correctement.

Remplacer la valeur d'attribut par défaut par la valeur insérée dans le bloc

  • Auteur du sujet Auteur du sujet 77marco77
  • Date de début Date de début

77marco77

Guest
Bonjour.
dans un dessin (qui est utilisé comme source de blocs pour les nouveaux modèles) avec plus de 6000 blocs, je voudrais remplacer la valeur par défaut de la balise d'attribut par la valeur déjà insérée manuellement dans le bloc.

J'ai trouvé ce code :
Code:
;; lee-mac - 2017
(défend c:defatt ( / bln def tag )
(si (= "" (setq bln (strcase (getstring t "\nspecify block name filter (utiliser * pour tous) <*>: "))))
(setq bln "*")
)
(si (= "" (setq tag (strcase (getstring "\nspecify tag name filter (utiliser * pour tous) <*>: "))))
(setq tag "*")
)
(setq def (getstring t "\nspecify new par défaut value: "))
(vlax-pour blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(si (et (= :vlax-false (vla-get-islayout blk) (vla-get-isxref blk)) (wcmatch (strcase (vla-get-name blk)) bln))
(vlax pour obj blk
(si (et (= "acdbattributedefinition" (vla-get-objetname obj))
(Wcmatch (strcase (vla-get-tagstring obj)))
(vlax-write-abled-p obj)
)
(vla-put-textstring obj def)
)
)
)
)
(principal)
)
(vl-load-com) (principal)
qui fait ce dont j'ai besoin, mais je dois entrer le nom du bloc (je ne peux pas sélectionner), le nom de la balise et la nouvelle valeur par défaut de la balise, mais ce sont de nombreux blocs et chacun a entre 12 et 20 attributs..
Est-il possible de faire plus rapidement la sélection de blocs (ou plusieurs blocs), l'attribut (ou plusieurs attributs), qui lit la valeur déjà insérée et la laisse entrer comme un nouveau défaut?
 
Ce n'est pas le maximum, vous devez sélectionner un bloc à la fois, mais un peu de vitesse (j'espère qu'ils ne sont pas 6000 blocs tous avec des noms différents!). vous devez cliquer une fois sur le bloc et une fois sur l'attribut.
Code:
(refun c:defatt2 ()
(setq blk (vlax-ename->vla object (car (entsel "\nselezionire blockco: ")))
étiquette
blk (blocs d ' objets (vla-get-active document (vla-get-acad objet)))
)
(vlax pour elem blk
(si (et (= fla-get-objectname elem) "addbattributeddefinition")
(= bla-get-tagstring elem) (étiquette vla-get-tagstring)
)
(elem de fla-put-textstring (balise de fla-get-textstring))
)
)
)
 
Ce n'est pas le maximum, vous devez sélectionner un bloc à la fois, mais un peu de vitesse (j'espère qu'ils ne sont pas 6000 blocs tous avec des noms différents!). vous devez cliquer une fois sur le bloc et une fois sur l'attribut.
Code:
(refun c:defatt2 ()
(setq blk (vlax-ename->vla object (car (entsel "\nselezionire blockco: ")))
étiquette
blk (blocs d ' objets (vla-get-active document (vla-get-acad objet)))
)
(vlax pour elem blk
(si (et (= fla-get-objectname elem) "addbattributeddefinition")
(= bla-get-tagstring elem) (étiquette vla-get-tagstring)
)
(elem de fla-put-textstring (balise de fla-get-textstring))
)
)
)
Merci beaucoup maintenant je vais certainement être plus rapide, malheureusement ils sont vraiment 6358 blocs (tous avec des noms différents...) et chacun avec 12 jusqu'à 20 attributs ( heureusement je dois mettre à jour seulement 4 ou 5) mais au moins maintenant j'ai le câble seulement en cliquant au lieu d'avoir à écrire :).
Encore merci !
 
Ce n'est pas le maximum, vous devez sélectionner un bloc à la fois, mais un peu de vitesse (j'espère qu'ils ne sont pas 6000 blocs tous avec des noms différents!). vous devez cliquer une fois sur le bloc et une fois sur l'attribut.
Code:
(refun c:defatt2 ()
(setq blk (vlax-ename->vla object (car (entsel "\nselezionire blockco: ")))
étiquette
blk (blocs d ' objets (vla-get-active document (vla-get-acad objet)))
)
(vlax pour elem blk
(si (et (= fla-get-objectname elem) "addbattributeddefinition")
(= bla-get-tagstring elem) (étiquette vla-get-tagstring)
)
(elem de fla-put-textstring (balise de fla-get-textstring))
)
)
)
J'ai commencé à faire environ 56.000 clics + entrée, mais le doigt a déjà arrêté de travailler. . . .
si ce n'est pas trop compliqué pensez-vous que vous pouvez ajouter dans le code les instructions afin que la commande soit à nouveau lancée et automatiquement sélectionnée le bloc précédemment sélectionné? Cela me permettrait de choisir le bloc la première fois pour simplement cliquer en succession les seuls attributs à mettre à jour, quand j'ai terminé j'appuie sur esc et je le relance pour le prochain bloc (ils deviendraient 28 000 clics et sans utiliser le clavier pour entrer à nouveau la commande pour chaque attribut).
merci en tout cas :)
 
Il devrait partir. le programme vous demandera des attributs jusqu'à ce que vous appuyez sur <enter>.
</enter>
Code:
(défaut c:defatt3()
(setq blk (vlax-ename->vla-object (car (entsel "\nselezionare blocco:")))
(vla-get-blocs (vla-get-document actif (vlax-get-acad-objet))
Inscrit(e) »
)
(alors que (setq tag (annonce))
(si pris)
(progrès
(balise setq (vlax-ename->vla-object))
(Résumé)
)
)
)
(setq listé)
(Pour chaque Elem1 énuméré)
(vlax pour elem blk
(si (et = (vla-get-objectname elem) "acdbattributedefinition")
(Elem vla-get-tagstring) (Elem vla-get-tagstring)
)
(elem vla-put-textstring (elem vla-get-textstring))
)
)
)
)
 
Très bien. Mais le sac est le sac. pas celui que vous trouvez en Italie dans les supermarchés. Tu dois manger là-bas, c'est une autre planète. C'est comme comparer Parmesan
 

Statistiques du forum

Sujets
58 521
Messages
499 056
Membres
104 110
Dernier membre
ChristianR

Membres en ligne

Aucun membre en ligne actuellement.
Retour
Haut