haithem Posté(e) le 11 mai 2009 Posté(e) le 11 mai 2009 bonjour es ce qu'il existe une commande pour transformer tous les arc de cercle contenus ds un dessin en cercle automatiquement en les selectionnant en groupe? merci [Edité le 11/5/2009 par haithem]
bonuscad Posté(e) le 11 mai 2009 Posté(e) le 11 mai 2009 Bonjour, Regardes cette réponse Bien qu'ancienne, je pense qu'elle conviendra bien à ta demande. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 11 mai 2009 Posté(e) le 11 mai 2009 Salut, Tu peux voir le LISP Arcedit sur cette page Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
haithem Posté(e) le 11 mai 2009 Auteur Posté(e) le 11 mai 2009 bonjour merci bonuscad pour la reponse rapide j'ai dejas utilise la commande JOINDRE ds covadis 2007 et le lisp que m'avez indiquer mais le seul pb c'est que il faut selectionner les cercles 1 à 1, ce que je cherche c'est transformer l'ensemble des arcs contenu ds le dessin en faisant une seclection en groupe , voila et merci tt de meme pour la reponse. a+
(gile) Posté(e) le 11 mai 2009 Posté(e) le 11 mai 2009 Re, (defun c:A2C (/ ss n arc) (princ "\nSélectionnez les arcs ou : ") (if (or (setq ss (ssget '((0 . "ARC")))) (setq ss (ssget "_X" '((0 . "ARC")))) ) (while (setq arc (ssname ss (setq n (if n (1+ n) 0)))) (entmake (cons '(0 . "CIRCLE") (vl-remove-if '(lambda (x) (member (car x) '(-1 0 330 5 100 50 51)) ) (entget arc) ) ) ) (entdel arc) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
haithem Posté(e) le 12 mai 2009 Auteur Posté(e) le 12 mai 2009 bonjour merci Gile pour le lisp je l'ai essayer et ca fonctionne du tonnerre. merci a+ [Edité le 12/5/2009 par haithem]
usegomme Posté(e) le 15 mai 2009 Posté(e) le 15 mai 2009 Bonjour, J'aimerai , si tu le veux bien (gile) et si tu as le temps, que tu nous expliques comment fonctionne ton lisp car je n'arrive déjà pas à comprendre ce qui se passe au niveau des ssget , alors la suite ?
(gile) Posté(e) le 15 mai 2009 Posté(e) le 15 mai 2009 Salut, J'ai la sale manie de vouloir écrire de manière concise ce qui ne rend pas le code toujours très explicite. En plus, là je m'amuse à essayer un nouveau truc pour parcourir le jeu de sélection. (princ "\nSélectionnez les arcs ou : ") (if (or (setq ss (ssget '((0 . "ARC")))) (setq ss (ssget "_X" '((0 . "ARC")))) ) ... )Le if est une habitude (bonne celle là) pour éviter les erreurs s'il n'y avait pas de jeu de sélection. Le or permet, si l'utilisateur fait Entré Espace ou clic droit au lieu de faire une sélection, de faire une sélection dans tout le dessin (ssget "_X" ...)On pourrait écrire de manière plus explicite :(princ "\nSélectionnez les arcs ou : ") (if (not (setq ss (ssget '((0 . "ARC"))))) (setq ss (ssget "_X" '((0 . "ARC")))) ) (if ss ... ) Pour le traitement du jeu de sélection, on peut utiliser soit une boucle repeat soit une boucle whileLes deux demandent d'initialiser un indice (n) qui est ensuite incrémenté (ou décrémenté) pour être passé comme argument à ssname.L'initialisation de n demande une ligne de plus et comme on est dans une expression if, il faudrait inclure tout ça dans un progn.On peut éviter le progn en utilisant repeat :(repeat (setq n (sslength ss)) (setq ent (ssname ss (setq n (1- n)))) ... )Mais ce n'est pas très explicite non plus et while est un peu plus rapide que repeat alors j'ai voulu imbriquer l'initialisation ou l'incrémentation de n dans l'expression test de while.(while (setq arc (ssname ss (setq n (if n (1+ n) 0)))) ... )Au premier appel, n est nil donc l'expression : (if n (1+ n) 0) retourne 0 à (ssname ...) et la première entité du jeu de sélection est affectée à la variable arc qui se retrouve non nil donc on entre dans la boucle.Aux appels suivants l'expression (if n (1+ n) 0) incrémente n (qui n'est plus nil). n est passé à (ssname ...) et tant que l'indice correspond à une entité du jeu de sélection la boucle continue. Quand n arrive à une valeur pour laquelle il n'y a plus d'entité ssname retourne nil donc (setq arc ...) aussi, donc on sort de la boucle. (entmake (cons '(0 . "CIRCLE") (vl-remove-if '(lambda (x) (member (car x) '(-1 0 330 5 100 50 51)) ) (entget arc) ) ) )Les liste DXF des arcs et des cercles ne diffèrent que par leurs groupes -1 0 330 5 100 50 51. En supprimant ces groupes avec vl-remove-if sur la liste DXF de l'arc, il est jute nécessaire d'ajouter la paire (0 . "CIRCLE") en début de liste avec cons pour obtenir une liste susceptible de créer le cercle avec entmake. Cette méthode permet d'attribuer au cercle toute les propriétés de l'arc (espace, calque, couleur etc...). En espérant avoir été clair... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
usegomme Posté(e) le 16 mai 2009 Posté(e) le 16 mai 2009 Très clair , merci , t'es top. C'est très intéressant de voir comme tu arrives à tirer le meilleur du language lisp, ça en devient artistique, la recherche de la perfection et de la beauté sont des expressions de l'Amour.Bon exemple à suivre.Tout ça me donne envie d' apprendre , j'aurai grand besoin d'une formation lisp pour aller plus loin que mon niveau "école primaire", enfin bon c'est une autre histoire. Salut et encore merci pour ton aide sur les forums.
(gile) Posté(e) le 16 mai 2009 Posté(e) le 16 mai 2009 Salut, Tout ça me donne envie d' apprendre , j'aurai grand besoin d'une formation lisp pour aller plus loin que mon niveau "école primaire", enfin bon c'est une autre histoire. À mon avis, tu as niveau largement au delà de "l'école primaire", il suffit de voir ce que tu diffuse ici. Pour ce qui est du style, c'est vrai que j'y suis très (trop) sensible, mais c'est un peu à double tranchant comme dit plus haut (ça peut nuire à la compréhension du code). J'ai énormément appris en lisant des codes écris pas certains de mes "grand maîtres" : Reini Urban, Vladimir Nesterovsky,Tony Tanzillo, Michael Puckett, Elpanov Evgeniy (et j'en oublie...)La pureté du style se remarque plus facilement dans des routines courtes comme celles données dans la FAQ AutoLISP de Reini Urban ou dans les challenges LISP de TheSwamp ou CADxp. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
usegomme Posté(e) le 18 mai 2009 Posté(e) le 18 mai 2009 Salut , merci pour ces info, j'ai de grosses lacunes mais petit à petit je ferai bien quelques progrès , je ne suis pas encore fossilisé. :)
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