Aller au contenu

copier-coller la valeur d\'un attribut à un autre


Messages recommandés

Posté(e)

Bonjour,

 

Qui pourrait me dire comment, par une routine lisp, et après avoir sélectionner tous les blocs voulus, copier la valeur d'un attribut X pour la coller dans la valeur d'un attribut Y du même bloc?

 

[Edité le 13/12/2005 par laura]

Posté(e)

Salut

Par exemple

(setq val (assoc 1 att1)) ; att1 pour le premier attribut
(setq att2 (subst val (assoc 1 att2) att2)) ; att2 pour le 2em attribut et on remplace la valeur du 2em par le 1er
(entmod att2) ; pour mettre à jour le 2em attribut
(entupd (cdr (assoc -1 att2))) ; pour voir à l'écran que le 2em attribut a été mis à jour

 

@+

 

[Edité le 13/12/2005 par Patrick_35]

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

Posté(e)

merci pour la réponse, mais mon problème est un peu plus complexe... car dans le bloc en question il y a une quinzaine d'attributs, et dans le dessin il y a une centaine d'insertions de ce même bloc...

je suppose qu'il faudrait sélectionner toutes les références de blocs souhaitées, puis aller chercher les sous-entités de chacun de ces blocs pour copier la valeur de l'attirbut X et la coller dans la valeur de l'attribut Y de la même référence de bloc, puis passer au bloc suivant pour copier la valeur de ... etc jusqu'à ce que tous les blocs sélectionnés aient été passer en revue!

le problème est-il poser correctement, si oui, comment le traduire en lisp?

Posté(e)

Bonjour,

 

Je me demandes si tu ne devrais pas te poser le problème autrement.

 

Si tu veux mettre à jours tout tes blocs (avec appriori, les même valeurs), pourquoi ne pas redéfinir ton bloc avec des attributs a constant et prédéfinis .

 

C'est une question, cela serait peut être plus simple.

;)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

si seulement c'était aussi simple. le problème c'est que chaque référence de bloc à sa propre valeur, par exemple une surface de pièce. et j'aimerais pouvoir copier cette valeur dans un autre attribut, nouvellement créé, qui correspond à une échelle d'impression différente, donc même valeur, mais calque et hauteur de police différente.

voila...

je te remercie quand même pour ta réponse.

Posté(e)

Ah oui, le problème est plus complexe

Pour faire une sélection de tous les blocs portants le même nom

(setq js (ssget "x" (list (cons 0 "INSERT") (cons 2 "MON_BLOC"))))

Pour parcourir une sélection

(setq n 0)
(while (ssname js n)
 (setq bl (entget (ssname js n)))
 (princ (strcat "\nBloc " (cdr (assoc 2 bl)) " N° " (itoa n)))
 (setq n (1+ n))
)

Maintenant, pour parcourir les éléments qui composent un bloc (à inclure dans le premier while)

(setq ent (entget (entnext (cdr (assoc -1 bl)))))
(while (/= (cdr (assoc 0 ent)) "SEQEND")
 (princ (strcat "\nType d'élément " (cdr (assoc 0 ent))))
 (setq ent (entget (entnext (cdr (assoc -1 ent)))))
)

Et pour tester si c'est un attribut avec son étiquette (à inclure dans le deuxième while)

(if (and (= (cdr (assoc 0 ent)) "ATTRIB") (= (cdr (assoc 2 "MON_ETI")))
 (progn
   (je reprends mon premier post)
 )
)

 

@+

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

Posté(e)

Bonsoir,

 

je vais partir dans une autre direction,

mais qui me semble correspondre à la demande de Laura.

 

mon hypothèse,

 

le bloc "zaza" existe dans le fichier.

si j'en trouve sur le calque "100",

je le copie sur lui-même,

je change de calque le bloc copié, il se trouve dans le calque "200"

j'applique à ce dernier un facteur d'échelle de 2

et je passe au suivant.

 

en espérant ne pas être hors sujet !

 

amicalement

 

(setq jeu (ssget "x" '((0 . "INSERT")(2 . "zaza"))))

(setq n 0 lon (sslength jeu))

 

(repeat lon

(setq ent (ssname jeu n)

calqueent (cdr(assoc 8 (entget ent)))

)

(if ( = calqueent "100")

(progn

(command "_copy" ent "" '(0 0 0) '(0 0 0))

(command "chprop" "d" "" "ca" "200" "")

(command "_scale" "d" "" (cdr(assoc 10 (entget ent))) "2")

)

)

(setq n ( + 1 n))

)

 

 

 

Posté(e)

t'as bien compris le problème...

c'est ce que j'ai fait jusqu'à maintenant.

mais, étant donné qu'il y a plein d'informations sur le bloc (type de sol, de plafond, de mur, d'isolation et j'en passe) ça devient juste illisible, avec le risque de modifier une des deux étiquettes et d'oublier l'autre. En plus toutes ces informations ne m'intéressent pas à une autre échelle...

voila c'est pour ça...

 

merci quand même

 

et bon week-end.

Posté(e)

 

Bonsoir

 

C'est pourquoi tu devrais refaire ton bloc/symbole avec tous ses attributs (visibles)

sur N calques différents ... :)

 

Ce bloc n'aurait aucune partie graphique, rien que N attributs sur N calques

nommés par exemple: ATT_SURF, ATT_HSPF, ATT_TYPE_PIECE, ATT_NO_PIECE, etc

 

Ainsi suivant les fenêtres dans les mises en page / présentations

en recopiant "à la main" les blocs sur "eux mêmes" (ou en utilisant la routine

du grand maître de la "Géométrie" DIDIER), puis en changeant l'échelle

je pense que ca irait tout seul ... :)

 

Qu'en pensez vous ?

 

Le Decapode "multi-attributs / multi-calques"

 

Autodesk Expert Elite Team

Posté(e)

si j'ai bien compris, c'est ce j'ai fait jusqu'à maintenant, mais quand tous les calques sont activés c'est illisible et il y a le risque d'oublier de répercuter les modifs dans les deux blocs...

merci.

Posté(e)

Bonsoir,

 

hé ! le Crabillon tu me taquines là ?

hihihihihi

grand maître, on me l'avait pas encore faite,

 

quant à ton idée de bloc ne contenant que des attributs,

je préfère, mettre au moins un point (node), car pour les points d'insertion

il sera confondu :

point d'insertion du bloc et

point d'insertion du texte attributaire,

donc un petit point et l'accro NODE fait la différence

 

je te serre amicalement la pince, aïe !!!

 

 

Posté(e)

 

Bonsoir Oh Mon Maître de la Force Géométrique

 

Tu as parfaitement raison, en général je fais toujours une partie graphique

sur mes blocs/symboles mais je n'aime pas les points car le style de points AutoCAD

va affecter la représentation de mes blocs.

 

Donc parfois le graphique de mon bloc est représenté par un minuscule cercle.

 

J'espère ne pas basculer du mauvais coté de la Force Géométrique ;)

 

Le Decapode "humble"

 

Autodesk Expert Elite Team

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é