DenisHen Posté(e) le 24 avril 2017 Posté(e) le 24 avril 2017 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)
DenisHen Posté(e) le 24 avril 2017 Auteur Posté(e) le 24 avril 2017 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)
Patrick_35 Posté(e) le 24 avril 2017 Posté(e) le 24 avril 2017 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 24 avril 2017 Auteur Posté(e) le 24 avril 2017 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)
Patrick_35 Posté(e) le 24 avril 2017 Posté(e) le 24 avril 2017 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 24 avril 2017 Auteur Posté(e) le 24 avril 2017 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)
DenisHen Posté(e) le 24 avril 2017 Auteur Posté(e) le 24 avril 2017 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)
DenisHen Posté(e) le 24 avril 2017 Auteur Posté(e) le 24 avril 2017 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)
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