Aller au contenu

Remplacer un bloc par un autre, en les désignant à la souris


Messages recommandés

Posté(e)

Bonjour,

 

Je souhaite faire un truc apparemment simple, mais trop difficile pour mes connaissances en LISP...

J'ai pas mal cherché sur le web, sans succès. J'ai trouvé sur ce site le lisp RBLOC, mais j'ai un problème avec le fichier .dcl, qu'AutoCad n'arrive pas à trouver, même quand il est dans un emplacement "autorisé")

 

Dans un fichier qui contient plein de blocs, je veux pouvoir faire ceci :

1/ lancer mon lisp

2/ cliquer sur un bloc (ou plusieurs) bloc(s) à remplacer

3/ valider

4/ cliquer sur un bloc "référence"

>>>> et hop ! AutoCad remplace les blocs cliqués à l'étape 2 par le bloc référence, avec le même point d'insertion, la même rotation, les mêmes facteurs d'échelle en X, Y et Z

 

Quelqu'un saurait-il comment on fait ça ?

 

Merci !!!

Posté(e)

Salut.

 

Je m'étais fais un petit Lisp qui fais la même chose que RBloc (donc, pas de souris) mais sans fenêtre et qui pioche dans une liste de correspondance de blocs. Tu n'as qu'à remplacer AncienBloc* et NouveauBloc* par les tiens. La commande est "RemplBlk" :

;;;**********************************
;;;  Remplacement de blocs (DenisH)  
;;;**********************************
(defun c:RemplBlk ()
 (princ "\nRemplacement des blocs...")
 (setq Select nil)
 (princ "\nDébut du remplacement des blocs")
 (setq LstBlk '(("AncienBloc1" . "NouveauBloc1");;;ICI***************************
                ("AncienBloc2" . "NouveauBloc2");;;ICI***************************
                )
       ) ;_ Fin de setq
;;;Début de la boucle
 (foreach PosLstBlk LstBlk
   (setq n 0)                          ; initialisation de l'indice
   (if (setq Select
              (ssget "_A"
                     (list (cons 0 "INSERT") (cons 2 (car PosLstBlk)))
              ) ;_ Fin de ssget
       ) ;_ Fin de setq
     (while (setq ent (ssname Select n))
       (setq elst  (entget ent)        ; liste DXF de l'objet
             Coord (cdr (assoc 10 elst))
             EchX  (cdr (assoc 41 elst))
             EchY  (cdr (assoc 42 elst))
             Rot   (cdr (assoc 50 elst))
             n     (1+ n)
       ) ;_ Fin de setq
       (setvar "clayer" (cdr (assoc 8 elst)))
       (command "_erase" ent "")
       (setq Coord (strcat (rtos (car Coord) 2 3)
                           ","
                           (rtos (cadr Coord) 2 3)
                   ) ;_ Fin de strcat
       )  
       (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

ATTENTION : les attributs ne sont pas pris en compte...

 

Petite précision, AncienBloc* peut contenir des caractères générique. Exemple, si AncienBloc* = "PTT_1*" tous les blocs commençant par PTT_1 seront remplacés par NouveauBloc*. Très pratique quand le DWG n'a pas été fait par un produit AutoDesk et que les mêmes blocs comporte une incrémentation.

 

En espérant d'avoir aidé...

 

Denis...

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)

@Patrick_35

 

Merci pour ta réponse.

J'ai bien placé le fichier .dcl dans un chemin de recherche d'AutoCad, mais sans succès..... :o/

 

 

@DenisH

 

Merci aussi.

Si je comprends bien, si on ne désigne pas les blocs à remplacer à la souris, alors ton LISP agit sur tous les blocs présents à la fois.

J'ai essayé de le lancer mais il ne se passe rien.

J'ai juste ce msg sur la ligne de commande :

Remplacement des blocs...

Début du remplacement des blocsnil

Posté(e)

Salut,

 

Un exemple simple qui fait ce que tu veux.

Si j'ai bien compris, tu veux apprendre, alors pas de copier/coller (c'est définitivement anti-pédagogique) tu tapes toi-même le code dans l'éditeur Visual LISP.

 

RBL.png

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

@Patrick_35

 

Merci pour ta réponse.

J'ai bien placé le fichier .dcl dans un chemin de recherche d'AutoCad, mais sans succès..... :o

 

 

Salut,

 

Il faut que Rbloc.lsp et Rbloc.dcl soient dans le même dossier.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Merci gile, c'est très sympa.

Ça fonctionne parfaitement.

En revanche, mon niveau de compréhension d'AutoLisp étant très faible, j'ai recopié assez bêtement.

Désolé de ne pas récompenser tes efforts de pédagogie ;o)

Posté(e)

Salut,

 

Il faut que Rbloc.lsp et Rbloc.dcl soient dans le même dossier.

 

Ach so !!!!

J'avais pas compris. Du coup j'avais soigneusement gardé le .lsp au chaud avec tous mes lisps.

 

Merci.

Posté(e)

Coucou

 

À (gile) : j'adore la façon de poster des images pour ne pas que les débutants qui veulent apprendre copient-collent.

Je l'avais fait il y a quelques temps et je le referai (au risque de passer pour un chieur)

Mais au moins nous serons deux dans ce camp (hihi)

 

Rappel à ceux qui veulent apprendre à marcher : il faut mettre un pied devant l'autre et recommencer...

Ça y est vous savez marcher, non ? pourtant je vous ai tout dit de ce qu'il fallait savoir...

 

Amicalement

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é