Communauté
AutoCAD – tous produits - Français
Bienvenue sur les forums AutoCAD d’Autodesk. Partagez vos connaissances, posez des questions, et explorez les sujets AutoCAD populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

programme LISP

25 RÉPONSES 25
RÉSOLU
Répondre
Message 1 sur 26
arbtlm
813 Visites, 25 Réponses

programme LISP

Bonjour à tous, est ce que quelqu'un pourrais m'écrire un petit programme LISP  permettant de mettre à jour deux attributs d'un bloc Autocad ?

 

Pour l'instant je fais tout manuellement et je perd beaucoup de temps.

 

voici ce qu'il faudrait faire :

1- sélectionner le bloc de gauche (bloc TCPOINT)

2- sélectionner le bloc de droite (bloc TCPOINT1)

3- remplacer l'attribut  ALT du TCPOINT1 par celui du TCPOINT (remplacer 99.13 par 100.03 dans l'exemple)

4-remplacer l'attribut CH du TCPOINT1 par ALT-ZSG (remplacer 0.00 par 0.90 dans l'exemple) (100.03-99.13)

 

Merci d'avance si quelqu'un arrive à faire ça, ça serait top.

25 RÉPONSES 25
Message 21 sur 26
arbtlm
en réponse à: braudpat

Salut, je suis sous Autocad, mais mon dessin d'origine est généré par un autre logiciel (logiciel de topographie uniquement pour générer le dessin suite au calcul de l'acquisition des données)

Message 22 sur 26
arbtlm
en réponse à: CADaSchtroumpf

Bonjour, je reviens vers toi pour savoir si il est possible d'apporter un petit changement à ton code.

Après un certain temps d'utilisation, je m'aperçois qu'il est parfois fastidieux de choisir un TCPOINT et un seul TCPOINT1. Dans certain cas la valeur récupérée du TCPOINT s'applique à une vingtaine de TCPOINT1.

Serait il possible de pouvoir sélectionner un TCPOINT et ensuite faire une capture pour sélectionner plusieurs TCPOINT1 au lieu de un seul ?

Toujours sans utiliser les commandes VLA.

Merci d'avance pour ta réponse.

Message 23 sur 26
CADaSchtroumpf
en réponse à: arbtlm

Sans avoir testé les résultats, sous cette forme?

(defun c:chg_att ( / js blk dxf_ent val_alt n val_zsg)
  (princ "\nSelectionner un bloc TCPOINT source.")
  (cond
    ((setq js (ssget "_+.:E:S" '((0 . "INSERT") (66 . 1) (2 . "TCPOINT"))))
      (setq blk (ssname js 0))
      (while (/= (cdr (assoc 0 (setq dxf_ent (entget (entnext blk))))) "SEQEND")
        (if (eq (cdr (assoc 2 dxf_ent)) "ALT") (setq val_alt (cdr (assoc 1 dxf_ent))))
        (setq blk (cdar dxf_ent))
      )
      (princ "\nSelectionner les blocs TCPOINT1 cibles.")
      (cond
        ((setq js (ssget '((0 . "INSERT") (66 . 1) (2 . "TCPOINT1"))))
          (repeat (setq n (sslength js))
            (setq blk (ssname js (setq n (1- n))))
            (while (/= (cdr (assoc 0 (setq dxf_ent (entget (entnext blk))))) "SEQEND")
              (if (eq (cdr (assoc 2 dxf_ent)) "ALT")
                (entmod (subst (cons 1 val_alt) (assoc 1 dxf_ent) dxf_ent))
              )
              (if (eq (cdr (assoc 2 dxf_ent)) "ZSG")
                (setq val_zsg (cdr (assoc 1 dxf_ent)))
              )
              (if (eq (cdr (assoc 2 dxf_ent)) "CH")
                (entmod
                  (subst
                    (cons 1 (rtos (- (atof val_alt) (atof val_zsg)) 2 2))
                    (assoc 1 dxf_ent)
                    (subst (cons 2 "ALT-ZSG") (assoc 2 dxf_ent) dxf_ent)
                  )
                )
              )
              (setq blk (cdar dxf_ent))
            )
            (entupd blk)
          )
        )
      )
    )
  )
  (prin1)
)
Message 24 sur 26
arbtlm
en réponse à: CADaSchtroumpf

malheureusement ça ne fonctionne pas.

Je t'es joint un DWG du coup pour tester.

 

 La sélection fonctionne correctement, mais:

- les nom des étiquettes du TCPOINT1 ne doivent pas changer

- Le code doit d'abord copier la valeur de l'attribut ALT du TCPOINT1 à la place du ZSG

- Puis remplacer tous les ALT du TCPOINT1 par le ALT du TCPOINT (ça ça fonctionne)

- Puis remplacer la valeur du CH du TCPOINT1 par ALT-ZSG

 

Le précedent code fonctionne bien, je ne peux juste pas selectionner plusieurs TCPOINT1 en une capture.

 

Merci

 

Message 25 sur 26
CADaSchtroumpf
en réponse à: arbtlm


@arbtlm  a écrit :

- les nom des étiquettes du TCPOINT1 ne doivent pas changer

 

 

Le précedent code fonctionne bien, je ne peux juste pas selectionner plusieurs TCPOINT1 en une capture.

 

Merci

 


Lors de ma première réalisation je n'avais pas compris cela: j'avais compris qu'il fallait renommer l’étiquette CH en ALT-ZSG donc le code précèdent était déjà à côté...

Là, avec tes explications et ton exemple, je pense avoir compris. Voici le code corrigé

(defun c:chg_att ( / js blk n dxf_ent val_alt value_alt)
  (princ "\nSelectionner un bloc TCPOINT source.")
  (cond
    ((setq js (ssget "_+.:E:S" '((0 . "INSERT") (66 . 1) (2 . "TCPOINT"))))
      (setq blk (ssname js 0) n -1)
      (while (/= (cdr (assoc 0 (setq dxf_ent (entget (entnext blk))))) "SEQEND")
        (if (eq (cdr (assoc 2 dxf_ent)) "ALT") (setq val_alt (cdr (assoc 1 dxf_ent))))
        (setq blk (cdar dxf_ent))
      )
      (princ "\nSelectionner les blocs TCPOINT1 cibles.")
      (cond
        ((setq js (ssget '((0 . "INSERT") (66 . 1) (2 . "TCPOINT1"))))
          (repeat (sslength js)
            (setq blk (ssname js (setq n (1+ n))))
            (while (/= (cdr (assoc 0 (setq dxf_ent (entget (entnext blk))))) "SEQEND")
              (if (eq (cdr (assoc 2 dxf_ent)) "ALT")
                (progn
                  (setq value_alt (cdr (assoc 1 dxf_ent)))
                  (entmod (subst (cons 1 val_alt) (assoc 1 dxf_ent) dxf_ent))
                )
              )
              (if (eq (cdr (assoc 2 dxf_ent)) "ZSG")
                (progn
                  (entmod (subst (cons 1 value_alt) (assoc 1 dxf_ent) dxf_ent))
                )
              )
              (if (eq (cdr (assoc 2 dxf_ent)) "CH")
                (entmod
                  (subst
                    (cons 1 (rtos (- (atof val_alt) (atof value_alt)) 2 2))
                    (assoc 1 dxf_ent)
                    dxf_ent
                  )
                )
              )
              (setq blk (cdar dxf_ent))
            )
            (entupd blk)
          )
        )
      )
    )
  )
  (prin1)
)
Message 26 sur 26
arbtlm
en réponse à: CADaSchtroumpf

La c'est parfait, merci beaucoup.

Pour l'histoire du nom des attributs je l'avais changé moi même sur ton premier code. C'était à la limite des mes compétences 😁

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report