brunomu Posté(e) le 26 juillet 2010 Posté(e) le 26 juillet 2010 J’utilise beaucoup la commande COLLERBLOC (ou PASTEBLOCK), pour esquisser des trucs vite fait. Le problème, c’est que si je veux ensuite renommer un de ces blocs proprement, je suis obligé d’identifier son nom, du genre A$C349C231D et de lancer la commande RENOMMER. Je fais une nouvelle fois appel aux talents des lispeurs pour voir si quelqu’un saurait écrire le LISP qui fait ça en un clin d’œil ;-)
lili2006 Posté(e) le 26 juillet 2010 Posté(e) le 26 juillet 2010 Bonjour à toutes et tous, Je préfère de loin la commande wbloc au copier-coller windows,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Patrick_35 Posté(e) le 26 juillet 2010 Posté(e) le 26 juillet 2010 Salut C'est un lisp assez simple à faire.Je pense que c'est le moment ou jamais ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 26 juillet 2010 Auteur Posté(e) le 26 juillet 2010 ...chacun ses goûts. Et dans le cas dont je parle, je n'exporte rien vers un autre fichier, je me contente de sélectionner des entités dans un dessin, des les copier/coller en tant que bloc.
lili2006 Posté(e) le 26 juillet 2010 Posté(e) le 26 juillet 2010 Re, Je parlais juste des "dégâts" que peux provoquer cette manipulation (copier-coller Windows),.... je n'exporte rien vers un autre fichier Vu, ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 26 juillet 2010 Posté(e) le 26 juillet 2010 Salut, Et dans le cas dont je parle, je n'exporte rien vers un autre fichier, je me contente de sélectionner des entités dans un dessin, des les copier/coller en tant que bloc. Pourquoi ne pas faire tout simplement un bloc ? voire un groupe...Tu nommerais ton bloc (ou ton groupe) dès le départ et tu n'aurais pas besoin d'un LISP. Il est connu qu'il vaut mieux utiliser les commandes AutoCAD que les commandes Windows (Copier, Coller, etc.) qui sont souvent source de tracas... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
brunomu Posté(e) le 26 juillet 2010 Auteur Posté(e) le 26 juillet 2010 @ (gile) et lili2006 Merci pour vos réponses. En fait ma manip est à base de commandes AutoCad (COPYBASE, PASTEBLOCK), donc je ne crois pas mélanger commandes AutoCad et Windows – quels seraient les risques, d'ailleurs ? Perso, je trouve ce moyen hyper-pratique pour travailler rapidement. Quand je dessine pendant une heure, il m'arrive de créer des dizaines de blocs anonymes que j'explose le plus souvent quelques secondes après les avoir créés (juste le temps de les manipuler, ou d'effacer ce qui me gêne autour d'entités que je veux conserver, ou juste pour garder une trace d'une version obsolète et que j'envoie dans un calque non tracé, etc.....), donc la procédure de création de blocs serait bien fastidieuse. Mais il arrive parfois qu'un bloc anonyme me plaise bien et que je décide de lui faire l'honneur de le baptiser. Et là c'est un peu galère. Mais pas trop quand même. Mais bon, un lisp qui permettrait juste de cliquer sur un bloc et de lui donner un nouveau nom, je trouverais ça cool ;-)
(gile) Posté(e) le 27 juillet 2010 Posté(e) le 27 juillet 2010 Salut, Il s'agit bien de ce que j'appelle (peut-être improprement) "commandes Windows", à savoir des commandes qui utilisent le presse-papier Windows. Dans AutoCAD, ces commandes ne sont pas aussi fiables que les commandes AutoCAD (voir les nombreux sujets concernant divers problèmes directement liés à l'utilisation de ces commandes. Tu dis que ce moyen te permet de travailler rapidement, mais il te faudrait par la suite corriger certaines choses à l'aide d'un LISP... Comme le dit Patrick_35, ce n'est pas difficile à programmer, c'est donc une bonne occasion pour se lancer. Tu trouveras très certainement de l'aide. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
brunomu Posté(e) le 28 juillet 2010 Auteur Posté(e) le 28 juillet 2010 @patrick_35 Merci pour tes encouragements à me lancer dans la programmation en LISP : OK, je relève le défi, et j'essaie donc d'écrire mon premier LISP, qui permettra de renommer au clavier un bloc désigné à la souris.Problème : je n'ai jamais fait de programmation (bon, pour être honnête, si : en LSE en....1979-80...). Donc j'imagine qu'il faut que ça commence du genre comme ça : ; LISP rb pour renommer un bloc désigné graphiquement (defun c:rb ()(setq bloc (ssget))(princ "\nDésigner le bloc à renommer :")) Jusque là, ça marche, mais après, je ne sais pas récupérer le nom du bloc à partir du jeu de sélection créé, ni comment on peut renommer un bloc en LISP...Autant dire que je viens de passer plus de temps à me gratter la tête et à chercher des antisèches dans les recoins du web que tout le temps que me fera économiser ce LISP dans le reste de ma carrière... Mais pour la beauté du geste, je m'obstine ! Et j'ai donc besoin d'aide : A L'AIDE !!! Merci.
Patrick_35 Posté(e) le 29 juillet 2010 Posté(e) le 29 juillet 2010 C'est bien :D Maintenant, tu as dans la variable bloc une sélection.Il faut donc la parcourir via une boucle Regarde les fonctions ssname, while, entget, sslength, repeat @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 29 juillet 2010 Auteur Posté(e) le 29 juillet 2010 Merci pour ta réponse, mais je ne sais pas où regarder pour avancer.Quand j'examine les LISPs que j'utilise déjà, je ne comprends pas la syntaxe ni l'utilité de telle ou telle fonction...
Patrick_35 Posté(e) le 29 juillet 2010 Posté(e) le 29 juillet 2010 Tu vas dans l'aide F1 --> AutoLISP, Visual LISP et DXF --> AutoLISP Reference Et tu choisis la fonction. Je t'ai indiqué lesquelles regarder. Mais si tu as besoin de plus d'explications, ce sera avec plaisir. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 29 juillet 2010 Posté(e) le 29 juillet 2010 Salut, Comme le dit Patrick_35, les références AutoLISP de l'aide aux développeurs d'AutoCAD est l'endroit où tu retrouveras le plus souvent dans tes débuts en LISP (et même après).Un truc : depuis l'éditeur Visual Lisp, tu sélectionnes une fonction par double clic et Ctrl+F1 t'ouvre directement l'aide à la page de cette fonction. En ce qui concerne la syntaxe AutoLISP, j'ai fait un petit topo ici. Il est peut-être un peu abrupt, mais veut poser clairement les bases de la syntaxe et du fonctionnement de ce langage. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
brunomu Posté(e) le 29 juillet 2010 Auteur Posté(e) le 29 juillet 2010 @ Patrick Merci pour ta sollicitude. Le coup de la boucle, ça me décourage un peu, je n'y comprends pas grand chose...L'idée c'est de compter le nombre d'entités dans la sélection et de faire tourner la boucle jusqu'à atteindre ce nombre ?Pour un début, je me contenterais bien d'un LISP qui fonctionne pour un bloc unique, tant pis si l'utilisateur a le mauvais goût d'en sélectionner davantage, sauf si la boucle est indispensable ? Donc, pour un bloc unique, j'arrive à faire marcher le LISP suivant : (defun c:rb ()(princ "\nDésigner le bloc à renommer :")(setq bloc (ssget))(setq EN (ssname BLOC 0))) Mais maintenant qu'AutoCad me retourne le message : je ne sais pas comment récupérer le nom du bloc...A ce stade, ma bonne volonté s'émousse... @ Gilles Merci aussi. J'avais repéré tes posts, mais j'avoue que c'est trop théorique pour moi (un peu comme essayer d'apprendre une langue étrangère avec un dico + une grammaire).Bon allez, je m'accroche. [Edité le 29/7/2010 par gloub]
(gile) Posté(e) le 30 juillet 2010 Posté(e) le 30 juillet 2010 Salut, Je te conseille d'utiliser l'éditeur Visual LISP et de ne pas hésiter à évaluer successivement les expressions qui constituent ton code de manière à bien comprendre pratiquement comment agissent les fonction et voir ce qu'elles retourne. Tu as raison, commençons avec une seule entité à la fois, d'autant plus qu'il est impossible de renommer plusieurs bloc en une seule fois (chacun devant avoir un nom qui n'existe pas déjà). La fonction entsel permet fait une pause dans l'exécution du programme pour permettre à l'utilisateur de sélectionner une entité : (setq ent (entsel "\nSélectionnez un bloc")) Si tu testes l'expression ci dessus, tu verras qu'elle affiche le message d'invite en ligne de commande et modifie l'aspect du curseur tant que l'utilisateur n'a pas sélectionné (ou cliqué). Tu verras aussi ce que l'expression retourne : une liste contenant 2 éléments le nom d'entité de l'entité sélectionnée et une liste de 3 nombres réel, le point cliqué par l'utilisateur. Ce qui t'intéresse est le premier élément de la liste on y accède avec la fonction car ou nth Une fois que tu as réussi à extraire le nom d'entité (ENAME) de l'entité sélectionnée (et à le stocker dans une variable), tu accèdes aux données DXF de cette entité avec la fonction entget. (setq elst (entget (car ent))) Cette fonction retourne ce qu'on appelle une liste d'association : chaque élément de la liste est une sous-liste, souvent d'un type particulier (paire pointée). Dans chaque sous-liste, le premier élément est un "code de groupe". Ceci permet d'atteindre un élément de la liste sans tenir compte du nombre ni de l'ordre des éléments de la liste.La fonction assoc, retourne la sous-liste dont le premier élément correspond au premier argument passé à la fonction.Le code de groupe DXF pour le nom d'un bloc est 2, l'expression suivante retourne le groupe DXF correspondant : (assoc 2 elst)sous la forme d'une paire pointée : (2 . "NomDuBloc"), pour récupérer le nom du bloc, on utilise la fonction cdr. (cdr (assoc 2 elst)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
brunomu Posté(e) le 3 août 2010 Auteur Posté(e) le 3 août 2010 ÇA MAAAAAAAAAAAAARCHE ! (à lire à voix haute en imitant le cri de Tarzan). Merci beaucoup pour ton aide (à ce degré-là, ce n'est plus de l'aide, c'est du tutorat genre chien d'aveugle) et le temps que tu y as passé. Pour que ça profite à tout le monde (du moins ceux que ça pourrait intéresser), voici, mesdames et messieurs, un LISP qui permet de renommer un bloc après l'avoir désigné par un clic de souris : ;**** RENOMMER UN BLOC DESIGNE GRAPHIQUEMENT (defun c:rb () (setq blocx (entsel "\nSélectionnez un bloc")) (setq nomblocx (entget (car blocx))) (cdr(assoc 2 nomblocx)) (command "-rename" "_b" (cdr(assoc 2 nomblocx)) pause) ) Un de ces jours, j'essaierai d'ajouter une belle boîte de dialogue, mais je ne sais pas encore comment on fait... Merci à gile à qui je dois tout, merci à Patrick pour ses encouragements, etc...
RhymOne Posté(e) le 9 septembre 2010 Posté(e) le 9 septembre 2010 AU SECOURS LISP NE FONCTIONNANT PAS CHEZ MOI DAO: AutoCAD(2D & 3D), CovadisCAO: 3D's MAX, Rhinoceros 3D, REVITGeoModeliSation: AutoCAD MEP, RhinoTerrainRendu: Vray for Rhino, Keyshot, LumionProgrammation: Grasshopper, Dynamo, VisualStudio C.V.Profil LinkedInBookSite web http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg
RhymOne Posté(e) le 9 septembre 2010 Posté(e) le 9 septembre 2010 Tout simplement comme gile le dit _renommer.Désolé les sport m'a tué aujourd'hui... DAO: AutoCAD(2D & 3D), CovadisCAO: 3D's MAX, Rhinoceros 3D, REVITGeoModeliSation: AutoCAD MEP, RhinoTerrainRendu: Vray for Rhino, Keyshot, LumionProgrammation: Grasshopper, Dynamo, VisualStudio C.V.Profil LinkedInBookSite web http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg
brunomu Posté(e) le 10 septembre 2010 Auteur Posté(e) le 10 septembre 2010 Désolé pour cette erreur de débutant en LISP (je travaille sur une version anglaise...et légale – pas de mauvais esprit siouplait). Voilà la version modifiée pour que le LISP marche sur une version française ou anglaise : ;**** RENOMMER UN BLOC DESIGNE GRAPHIQUEMENT (defun c:rb ()(setq blocx (entsel "\nSélectionnez un bloc"))(setq nomblocx (entget (car blocx)))(cdr(assoc 2 nomblocx))(command "_-rename" "_b" (cdr(assoc 2 nomblocx)) pause)) Bon, c'est du fait main, ça tient avec du scotch, donc il peut y avoir des messages système un peu bizarres, mais, bon an mal an, ça marche.
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