dilack Posté(e) le 17 juillet 2009 Posté(e) le 17 juillet 2009 salut à tous,est-il possible de modifier le lips de notre ami gilles (réponse 13) pour qu'il garde le m^me nombre de décimales que le l'attribut sélectionner au départ. merci d'avance pour les réponses
(gile) Posté(e) le 17 juillet 2009 Posté(e) le 17 juillet 2009 Salut, Voilà:(defun c:adat (/ att lst pos dec val tag nam add ss n) (if (and (setq att (car (nentsel "\nSélectionnez un attribut à modifier: "))) (setq lst (entget att)) (= (cdr (assoc 0 lst)) "ATTRIB") (numberp (read (setq val (cdr (assoc 1 lst))))) (setq dec (if (setq pos (vl-string-position (ascii ".") val)) (- (strlen val) pos 1) 0 ) ) (setq tag (cdr (assoc 2 lst))) (setq nam (cdr (assoc 2 (entget (cdr (assoc 330 lst)))))) ) (if (and (setq add (getreal "\nEntrez la valeur à ajouter ou soustraire: ")) (princ "\nSélectionnez les blocs à modifier.") (setq ss (ssget (list '(0 . "INSERT") (cons 2 nam)))) (setq n 0) ) (progn (setq dz (getvar 'dimzin)) (setvar 'dimzin (Boole 4 8 (getvar 'dimzin))) (while (setq blc (ssname ss n)) (setq att (entnext blc) lst (entget att) ) (while (= (cdr (assoc 0 lst)) "ATTRIB") (if (and (= (cdr (assoc 2 lst)) tag) (numberp (setq val (read (cdr (assoc 1 lst))))) ) (progn (entmod (subst (cons 1 (rtos (+ val add) 2 dec)) (assoc 1 lst) lst) ) (entupd blc) ) ) (setq att (entnext att) lst (entget att) ) ) (setq n (1+ n)) ) (setvar 'dimzin dz) ) ) (princ "\nL'objet sélectionné n'est pas un attribut.") ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
dilack Posté(e) le 17 juillet 2009 Posté(e) le 17 juillet 2009 merci gillestu m'enleve une trés grosse épine du pied
Invité sandid Posté(e) le 31 août 2011 Posté(e) le 31 août 2011 merci pour vos lisp........indispensable. ;) [Edité le 31/8/2011 par sandid]
didier Posté(e) le 31 août 2011 Posté(e) le 31 août 2011 Coucou je viens de découvrir ce message, ????et je m'adresse au questionneur initial arrêtez de demander des lisp quand les commandes existent déjàpour faire ce qui est demandé, il suffit de dupliquer les points concernésde déplacer ce jeu de sélection d'une valeur en Zet de mettre à jour les altitudes, terminé. maintenant si c'est pour apprendre le lisp, d'accord amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Kilian336 Posté(e) le 15 juillet 2024 Posté(e) le 15 juillet 2024 Bonjour, je déterre ce sujet car j'ai eu besoin du lisp adat de gile pour lequel je le remercie. Je me demandais s'il était possible d'encore l'améliorer en le rendant compatible avec des blocs dynamiques. Je m'explique, j'ai un dessin avec plusieurs occurences d'un même bloc, à l'intérieur duquel j'ai un attribut correspondant à une altitude. Ce bloc a aussi des paramètres de blocs dynamiques. J'ai tenté de lancer le lisp sur mes blocs (avec des attributs et des valeurs de paramètres différents) et cela n'a pas fonctionné puisqu'il m'était impossible de sélectionner les blocs à modifier. En recherchant ailleurs sur internet, j'ai vu qu'il fallait lancer la commande RESETBLOC pour reset les paramètres d'attributs, puis après lancer le lisp adat, et la, ça fonctionnait très bien. Ma question est, peut-on rendre le lisp adat, compatible avec les blocs dynamiques, sans devoir lancer la commande RESETBLOC et donc perdre nos paramètres de blocs dynamiques. Je ne sais pas si c'est très clair alors je vous joins mon .dwg avec mes blocs à modifier, avant d'avoir lancer adat et RESETBLOC. Merci encore à tous ces lispeurs ! Test attributs.dwg
(gile) Posté(e) le 15 juillet 2024 Posté(e) le 15 juillet 2024 Salut, Essaye ça: (defun c:adat (/ att lst pos dec val tag nam add ss n) (if (and (setq att (car (nentsel "\nSélectionnez un attribut à modifier: ")) ) (setq lst (entget att)) (= (cdr (assoc 0 lst)) "ATTRIB") (numberp (read (setq val (cdr (assoc 1 lst))))) (setq dec (if (setq pos (vl-string-position (ascii ".") val)) (- (strlen val) pos 1) 0 ) ) (setq tag (cdr (assoc 2 lst))) (setq nam (getpropertyvalue (cdr (assoc 330 lst)) "BlockTableRecord/Name" ) ) ) (if (and (setq add (getreal "\nEntrez la valeur à ajouter ou soustraire: ") ) (princ "\nSélectionnez les blocs à modifier.") (setq ss (ssget (list '(0 . "INSERT") (cons 2 (strcat "`*U*," nam))))) (setq n 0) ) (progn (setq dz (getvar 'dimzin)) (setvar 'dimzin (Boole 4 8 (getvar 'dimzin))) (while (setq blc (ssname ss n)) (if (and (not (wcmatch (getpropertyvalue blc "ClassName") "AcDbAssociative*Array")) (= nam (getpropertyvalue blc "BlockTableRecord/Name")) (setq val (distof (getpropertyvalue blc tag))) ) (setpropertyvalue blc tag (rtos (+ val add) 2 dec)) ) (setq n (1+ n)) ) (setvar 'dimzin dz) ) ) (princ "\nL'objet sélectionné n'est pas un attribut.") ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Luna Posté(e) le 15 juillet 2024 Posté(e) le 15 juillet 2024 Coucou, Essaye avec quelque chose comme ceci : (defun c:adat (/ att lst pos dec val tag nam efn add ss n) (if (and (setq att (car (nentsel "\nSélectionnez un attribut à modifier: "))) (setq lst (entget att)) (= (cdr (assoc 0 lst)) "ATTRIB") (numberp (read (setq val (cdr (assoc 1 lst))))) (setq dec (if (setq pos (vl-string-position (ascii ".") val)) (- (strlen val) pos 1) 0 ) ) (setq tag (cdr (assoc 2 lst))) (setq nam (cdr (assoc 2 (entget (cdr (assoc 330 lst)))))) (setq efn (vla-get-EffectiveName (vlax-ename->vla-object (cdr (assoc 330 lst))))) ) (if (and (setq add (getreal "\nEntrez la valeur à ajouter ou soustraire: ")) (princ "\nSélectionnez les blocs à modifier.") (setq ss (ssget (list '(0 . "INSERT") '(66 . 1) (cons 2 (if (equal nam efn) nam (strcat "`*U*," efn)))))) (setq n 0) ) (progn (setq dz (getvar 'dimzin)) (setvar 'dimzin (Boole 4 8 (getvar 'dimzin))) (while (setq blc (ssname ss n)) (setq att (entnext blc) lst (entget att) ) (if (= efn (vla-get-EffectiveName (vlax-ename->vla-object blc))) (while (= (cdr (assoc 0 lst)) "ATTRIB") (if (and (= (cdr (assoc 2 lst)) tag) (numberp (setq val (read (cdr (assoc 1 lst))))) ) (progn (entmod (subst (cons 1 (rtos (+ val add) 2 dec)) (assoc 1 lst) lst) ) (entupd blc) ) ) (setq att (entnext att) lst (entget att) ) ) ) (setq n (1+ n)) ) (setvar 'dimzin dz) ) ) (princ "\nL'objet sélectionné n'est pas un attribut.") ) (princ) ) Bisous, Luna
Kilian336 Posté(e) le 16 juillet 2024 Posté(e) le 16 juillet 2024 Merci beaucoup à vous deux, les 2 Lisps fonctionnent parfaitement !
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