Aller au contenu

Modification d\'attributs


totodupolo

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

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és

de déplacer ce jeu de sélection d'une valeur en Z

et de mettre à jour les altitudes, terminé.

 

maintenant si c'est pour apprendre le lisp, d'accord

 

amicalement

 

Lien vers le commentaire
Partager sur d’autres sites

  • 12 ans après...

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é