Aller au contenu

Remplacement de blocs qui décale parfois


Messages recommandés

Posté(e)

Bonjour à tous.

 

Voilà, aujourd'hui, je cherche à remplacer certains blocs qui ont une incrémentation dans leur nom (FPLPT2_44, FPLPT2_45,FPLPT2_46...) par le bloc FPLPT2 avec les bonnes échelles et rotation d'origine...

 

Voici le lien du DWG et mon code :

;;; *********************************************************************************************
;;; Routine de traitement des fichiers bruts (issus d'un DGN) pour en faire un Fond de Plan *****
;;; *********************************************************************************************
(defun c:Test_Adriatel (/)
 (princ "\nDéveloppé par Denis H.")
 (command "_undo" "_mark")
 (setq old_osmd     (getvar "osmode")
       old_abase    (getvar "angbase")
       old_adir     (getvar "angdir")
       old_aunits   (getvar "aunits")
       old_cmdecho  (getvar "cmdecho")
       old_AttDia   (getvar "attdia")
       old_AttReq   (getvar "attreq")
       old_layer    (getvar "clayer")
       old_Insunits (getvar "insunits")
 ) ;_ Fin de setq
 (setvar "osmode" 1)
 (setvar "cmdecho" 0)
 (setvar "aunits" 2)
 (setvar "ATTDIA" 0)
 (setvar "ATTREQ" 0)
 (setvar "angbase" (/ pi 2))
 (setvar "angdir" 1)
 (setvar "clayer" "0")
 (setvar "insunits" 4)
 (command "filedia" 0)
 (command "-unites" "2" "2" "3" "2" "0,0" "@0,1" "O")
 (command "pdmode" "32")
 (command "pdsize" ".1")
 (command "PLINEGEN" "1")
 (command "-couleur" "ducalque")
;;; ************************************
;;; Remplacement des blocs incrémentés *
 (princ "\nRemplacement des blocs incrémentés...")
 (setq Select nil)
 (setq LstBlk '(;;;....
                ("FPLPT1_*" . "FPLPT1")
                ("FPLPT2_*" . "FPLPT2")
                ("FPLPT3_*" . "FPLPT3")
                ("FPLPT4_*" . "FPLPT4")
                ;;;....
                ;;;....
                )
 ) ;_ Fin de setq
;;; Début de la boucle
 (foreach PosLstBlk LstBlk
   (setq n 0)
   (if (setq Select (ssget "_X" (list (cons 0 "INSERT") (cons 2 (car PosLstBlk)))))
     (while (setq ent (ssname Select n))
       (setq elst  (entget ent)
             Coord (cdr (assoc 10 elst))
             EchX  (/ (cdr (assoc 41 elst)) 1000)
             EchY  (/ (cdr (assoc 42 elst)) 1000)
             Rot   (cdr (assoc 50 elst))
             Calq  (cdr (assoc 8 elst))
             n     (1+ n)
       ) ;_ Fin de setq
       (setvar "clayer" Calq)
       (command "_erase" ent "")
       (setq Coord (strcat (rtos (car Coord) 2 3) "," (rtos (cadr Coord) 2 3) ",0"))
       (setq Rot (+ Rot (/ pi 2)))
       (command "-inserer" (cdr PosLstBlk) "_non" Coord EchX EchY (angtos Rot 2 3))
     ) ;_ Fin de while
   ) ;_ Fin de if
 ) ;_ Fin de foreach
) ;_ Fin de defun

 

Je n'arrive pas à l'expliquer, mais parfois, certains blocs se retrouve à perpette... Vers 1200km à l'OUEST...?

 

Si quelqu'un a une astuce, une idée... Je suis preneur...

 

PS : après quelques testes et essais, je pense que c'est une question d'angle ou de rotation...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

J'ai encore fait des testes... EN fait, les blocs qui "déconnent" se retrouvent en miroir avec l'axe des Y !?!

 

Comprend rien...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut

 

Regarde si tes blocs ont bien le même point d'insertion.

Sinon, pour simplifier ton lisp, pour remplacer un bloc par un autre tout en conservant les caractéristiques du premier (mêmes les attributs), tu changes juste le code dxf 2 (le nom) du premier par le remplaçant.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Salut Patrick_35, et merci pour ton aide.

 

Le truc, c'est que le même bloc (ex "FPLPT3") peut se placer correctement sur un point et à coté, ce même bloc se place à perpette...!?!

 

Le code dxf 2, avec un (entmod ? Je vais regarder ça... Mais je n'y connais rien à cette commande...

 

Merci encore...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Le truc, c'est que le même bloc (ex "FPLPT3") peut se placer correctement sur un point et à coté, ce même bloc se place à perpette...!?!

Regarde la fonction trans

 

Le code dxf 2, avec un (entmod ? Je vais regarder ça... Mais je n'y connais rien à cette commande...

Oui, et subst.

 

Exemple non testé

(setq ent (entget (car (entsel))))
(setq ent (subst (cons 2 "MON_BLOC") (assoc 2 ent) ent)
(entmod ent)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Eh ben ça y est... Si ça peut être utile à d'autres, voici la boucle corrigée selon le super conseil de Patrick_35 (encore une fois)...:

  (foreach PosLstBlk LstBlk
   (setq n 0)
   (if (setq Select (ssget "_X" (list (cons 0 "INSERT") (cons 2 (car PosLstBlk)))))
     (while (setq ent (ssname Select n))
       (setq elst (entget ent))
       (setq elst (subst (cons 2 (car PosLstBlk)) (assoc 2 elst) elst))
       (entmod elst)
       (setq n (+ n 1))
     ) ;_ Fin de while
   ) ;_ Fin de if
 ) ;_ Fin de foreach

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Re.

 

Alors curieusement, ça a fonctionné une seule fois... Mais plus maintenant.

;;; Début de la boucle
 (foreach PosLstBlk LstBlk
   (setq n 0)
   (if (setq Select (ssget "_X" (list (cons 0 "INSERT") (cons 2 (car PosLstBlk)))))
     (while (setq ent (ssname Select n))
       (setq elst (entget ent))
       (setq elst (subst (cons 2 (car PosLstBlk)) (assoc 2 elst) elst))
       (entmod elst)
       (setq n (+ n 1))
     ) ;_ Fin de while
   ) ;_ Fin de if
 ) ;_ Fin de foreach

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Effectivement, si je ne choisi pas le bon bloc...

(setq elst (subst (cons 2 (car PosLstBlk)) (assoc 2 elst) elst))

remplacé par

(setq elst (subst (cons 2 (cdr PosLstBlk)) (assoc 2 elst) elst))

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é