brunomu Posté(e) le 10 juin 2016 Posté(e) le 10 juin 2016 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 lisp2/ cliquer sur un bloc (ou plusieurs) bloc(s) à remplacer3/ valider4/ 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 !!!
Patrick_35 Posté(e) le 10 juin 2016 Posté(e) le 10 juin 2016 Salut Avec RblocIl faut que le DCL soit dans les chemins de recherches d'Autocad @+ 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 10 juin 2016 Posté(e) le 10 juin 2016 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)
brunomu Posté(e) le 10 juin 2016 Auteur Posté(e) le 10 juin 2016 @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
(gile) Posté(e) le 10 juin 2016 Posté(e) le 10 juin 2016 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. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Steven Posté(e) le 10 juin 2016 Posté(e) le 10 juin 2016 @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.
brunomu Posté(e) le 13 juin 2016 Auteur Posté(e) le 13 juin 2016 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)
brunomu Posté(e) le 13 juin 2016 Auteur Posté(e) le 13 juin 2016 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.
didier Posté(e) le 13 juin 2016 Posté(e) le 13 juin 2016 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
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