Morgul Posté(e) le 29 août 2006 Posté(e) le 29 août 2006 Bonjour, Je débute en lisp et comme je n'en fait pas beucoup, je sèche un peu.Pouvez-vous m'aider ? Je voudrais renseigner la valeure d'un attribut d'un bloc après selection à la souris de ce dernier, car je pourrais avoir 2 blocs insérés avec des valeures d'attribut différentes. Du type : 1 - Qu'elle est la valeure que vous souhaitez ? 2 - Sélectionnez le bloc. 3 - Mise à jour effectuée. Merci de votre aide. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
Bred Posté(e) le 29 août 2006 Posté(e) le 29 août 2006 Salut,avant de faire ça en lisp, j'ai l'impression que ta question autocad y répond de lui même avec les attributs étiquette ,invite et valeur, et pour modifier avec "éditer les attributs".... voir l'aide des attributs ... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Morgul Posté(e) le 29 août 2006 Auteur Posté(e) le 29 août 2006 Merci de cette réponse, mais non cela ne me convient pas. En effet, j'ai un premier lisp qui fonctionne qui me demande un angle de rotation pour un bloc que je sélectionne. Et c'est cette valeure que je souhaite entrer dans l'attribut. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
Patrick_35 Posté(e) le 29 août 2006 Posté(e) le 29 août 2006 Salutun (setq bl (car (entsel))) pour sélectionner un bloc contenant des attributsun (setq att (entget (entnext bl))) pour trouver le premier attributun (setq att (subst (cons 1 "Mon Texte") (assoc 1 att) att)) pour changer la valeur de l'attributun (entmod att) pour mettre l'attribut à jour dans la base d'autocadun (entupd (cdr -assoc -1 att)) pour mettre à jour à l'écranet si d'autres attributs suivent, un (setq att (entnext (cdr (assoc -1 att))))Et si tu n'as plus d'attibuts, tu trouvereas un (0 . SEQEND) de l'entnext. C'est ce qui permet de faire des boucles et de sortir pour dire que c'est fini @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Morgul Posté(e) le 29 août 2006 Auteur Posté(e) le 29 août 2006 Merci Patrick_35 Cela semble correspondre à ce que j'attendais, je pense exploiter dès demain tes renseignement, même si la fin de ton post ne me parle pas trop ... Merci beaucoup, c'est super sympa. Vous êtes vraiment super cool ! Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
Morgul Posté(e) le 30 août 2006 Auteur Posté(e) le 30 août 2006 Patrick_35 Je pense qu'il y avait une petite coquille dans : (entupd (cdr -assoc -1 att)) Je pense que c'est plutôt : (entupd (cdr (assoc -1 att))) Si j'ai bien compris le truc, après je fais (setq att (entnext (cdr (assoc -1 att)))) Pour atteindre l'attribut suivant, suivi d'une boucle pour retourner sur : (setq att (subst (cons 1 "Mon Texte") (assoc 1 att) att)) (entmod att) (entupd (cdr (assoc -1 att))) En tout cas, merci encore c'est super tu as répondu à mon attente. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
Bred Posté(e) le 30 août 2006 Posté(e) le 30 août 2006 un lisp récupérer dans le forum je crois et qui regroupe un peu ce que tu demandes, si tu veux t'en inspirer...(ce lisp copie la valeur d'un attribut de bloc dans un autre...) ;;;============================================================== ;;; ; ;;; CAT.LSP V1.20 ; ;;; ; ;;; Copier des attributs ; ;;; ; ;;; Copyright (C) Patrick DEWEVRE ; ;;; ; ;;;============================================================== (defun c:cat(/ chemin cmd fichier nom_bloc s p) ;;;------------------------------------------------------------- ;;; ;;; Gestion des erreurs ;;; ;;;------------------------------------------------------------- (defun *errcat* (msg) (if (/= msg "Function cancelled") (if (= msg "quit / exit abort") (princ) (princ (strcat "\nErreur : " msg))) (princ)) (setq *error* s) (setvar "pickadd" p) (setvar "cmdecho" cmd) (princ) ) ;;;------------------------------------------------------------- ;;; ;;; Routine principale ;;; ;;;------------------------------------------------------------- (defun changer_texte_attributs(/ a b c n r s ttt u v) ;;;------------------------------------------------------------- ;;; ;;; Changement de texte de l'entité ;;; ;;;------------------------------------------------------------- (princ "\nSélectionner le Bloc de Référence.") (setvar "pickadd" 0) (setq s (ssget '((0 . "INSERT")))) (setvar "pickadd" 1) (if s (progn (setq r (entget (ssname s 0))) (if (= (cdr (assoc 66 r)) 1) (progn (princ "\nSélection des Blocs à Mofifier.") (if (setq s (ssget '((0 . "INSERT")))) (progn (setq n 0 u 0) (while (/= (ssname s n) nil) (setq a r v 0 b (entget (ssname s n))) (if (= (cdr (assoc 0 b)) "INSERT") (setq ttt 1)) (while (and (/= (cdr (assoc 0 a)) "SEQEND") (/= (cdr (assoc 0 b)) "SEQEND")) (setq c (subst (assoc 1 a) (assoc 1 b) b)) (entmod c) (setq a (entget (entnext (cdr (assoc -1 a)))) b (entget (entnext (cdr (assoc -1 b)))) v 1) ) (if (/= v 0) (progn (entupd (cdr (assoc -1 (entget (ssname s n))))) (setq u (1+ u)) ) ) (setq n (1+ n)) ) (if (and (= ttt 1) (= u 0)) (alert "Pas de blocs correspondant au bloc de référence.")) (if (= ttt nil) (alert "Pas de blocs sélectionnés.")) (if (/= u 0) (princ (strcat "\n" (itoa u) " blocs modifiés..."))) ) ) ) (alert "Bloc sans Attributs") ) ) (princ "\nAucune Sélection...") ) ) ;;;------------------------------------------------------------- ;;; ;;; Routine de lancement ;;; ;;;------------------------------------------------------------- (setq s *error*) (setq *error* *errcat*) (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (command "_.undo" "_group") (setq p (getvar "pickadd")) (changer_texte_attributs) (setvar "pickadd" p) (command "_.undo" "_end") (setq *error* s) (setvar "cmdecho" cmd) (princ) ) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Patrick_35 Posté(e) le 30 août 2006 Posté(e) le 30 août 2006 SalutC'est exact, il y a bien une coquilleJe t'ai donné ces exemples de mémoire et sans tester mais tu as trouvé et c'est le principal ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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