laura Posté(e) le 13 décembre 2005 Posté(e) le 13 décembre 2005 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]
Patrick_35 Posté(e) le 13 décembre 2005 Posté(e) le 13 décembre 2005 SalutPar 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
laura Posté(e) le 13 décembre 2005 Auteur Posté(e) le 13 décembre 2005 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?
bonuscad Posté(e) le 13 décembre 2005 Posté(e) le 13 décembre 2005 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
laura Posté(e) le 13 décembre 2005 Auteur Posté(e) le 13 décembre 2005 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.
Patrick_35 Posté(e) le 13 décembre 2005 Posté(e) le 13 décembre 2005 Ah oui, le problème est plus complexePour 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
laura Posté(e) le 14 décembre 2005 Auteur Posté(e) le 14 décembre 2005 merci, tu m'as déjà fait faire un pas de géant... à+
didier Posté(e) le 14 décembre 2005 Posté(e) le 14 décembre 2005 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 2et 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)) ) Éternel débutant... Mon site perso : Programmer dans AutoCAD
laura Posté(e) le 16 décembre 2005 Auteur Posté(e) le 16 décembre 2005 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.
lecrabe Posté(e) le 16 décembre 2005 Posté(e) le 16 décembre 2005 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
laura Posté(e) le 19 décembre 2005 Auteur Posté(e) le 19 décembre 2005 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.
didier Posté(e) le 19 décembre 2005 Posté(e) le 19 décembre 2005 Bonsoir, hé ! le Crabillon tu me taquines là ?hihihihihigrand 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'insertionil sera confondu :point d'insertion du bloc etpoint 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 !!! Éternel débutant... Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 19 décembre 2005 Posté(e) le 19 décembre 2005 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant