stugeol Posté(e) le 20 décembre 2012 Posté(e) le 20 décembre 2012 Bonjour,Sur notre serveur se trouve un Lisp (Surement récupérer sur le net) qui permet de discrétiser les arcs en lignes. Je remercie l'auteur de ce code si il passe par là. Cette fonction ARC2LINE discrétise tous les arcs du dessin. Est-il possible de modifier ce code pour discrétiser que les arc sélectionnés.Je vous remercie par avance.Cordialement.<BR>(defun C:ARC2LINE ( / js n ent dxf_ent obj_vlax pt_start pt_end res_track flag_ucs last_e old_osmd old_pdmd l_pt)<BR> (setq js (ssget "_X" '((-4 . "<OR") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>"))) n 0)<BR> (cond<BR> (js<BR> (setq<BR> old_osmd (getvar "osmode")<BR> old_pdmd (getvar "pdmode")<BR> )<BR> (setvar "osmode" 0)<BR> (setvar "pdmode" 1)<BR> (setvar "cmdecho" 0)<BR> (initget 7)<BR> (setq res_track (getdist "\nPas de résolution: "))<BR> (vl-load-com)<BR> (while (setq ent (ssname js n))<BR> (setq<BR> obj_vlax (vlax-ename->vla-object ent)<BR> pt_start (vlax-curve-getStartPoint obj_vlax)<BR> pt_end (vlax-curve-getEndPoint obj_vlax)<BR> )<BR> (setq last_e (entlast))<BR> (setq l_pt (cons (trans pt_end 0 1) '()))<BR> (command "_.measure" ent res_track)<BR> (while<BR> (and<BR> (= (cdr (assoc 0 (setq dxf_ent (entget (entlast))))) "POINT")<BR> (not (equal (entlast) last_e))<BR> )<BR> (setq l_pt (cons (trans (cdr (assoc 10 dxf_ent)) 0 1) l_pt))<BR> (entdel (entlast))<BR> )<BR> (command "_.line" (mapcar 'command (cons (trans pt_start 0 1) l_pt)))<BR> (entdel ent)<BR> (setq n (1+ n))<BR> )<BR> (setvar "osmode" old_osmd)<BR> (setvar "pdmode" old_pdmd)<BR> (setvar "cmdecho" 1)<BR> (princ (strcat "\n" (itoa n) " Cercles ou Arcs convertis en Ligne"))<BR> )<BR> (T (princ "\nAucun Arc ou Cercle trouvé!"))<BR> )<BR> (prin1)<BR>)<BR>(princ "\nARC2LINE.LSP chargé. Tapez ARC2LINE pour convertir un ARC en segment de LIGNE.")<BR>(prin1)<BR> Petit à petit on devient moins petit
stugeol Posté(e) le 20 décembre 2012 Auteur Posté(e) le 20 décembre 2012 Je viens de tenter : (setq js (ssget "_S:" '((-4 . "<OR") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>"))) n 0) Ne fonctionne pas. (setq js (ssget "_P" '((-4 . "<OR") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>"))) n 0) Pour utiliser le dernier jeux de sélection cela fonctionne mais c'est dangereux car ce jeux de selection n'est pas défini en amont dans le code.Comment définir cette sélection dans le code?Merci par avance.Cordialement. Petit à petit on devient moins petit
-Olivier- Posté(e) le 20 décembre 2012 Posté(e) le 20 décembre 2012 Bonjour stugeol, Tout simplement (ssget '((-4 . "<OR") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>")))Olivier
x_all Posté(e) le 20 décembre 2012 Posté(e) le 20 décembre 2012 je ne suis pas spécialiste, mais je crois que ssget sans méthode avec juste ton filtre devrait marcher du genre (setq js (ssget '((-4 . "<OR") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>"))) n 0) si j'ai bien retenu les leçons des docteurs es lisp du site...voir ici quelques trucs sur autocad
stugeol Posté(e) le 20 décembre 2012 Auteur Posté(e) le 20 décembre 2012 Je vous remercie,je voulais à tout pris utiliser une méthode, et en effet sans méthode, en utilisant juste le filtre cela fonctionne à merveille.Maintenant pour m'éclairer dans :(setq js (ssget '((-4 . "<OR") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>"))) n 0) la fin de la fonction setq n 0), à quoi servent n 0, à 'initialise le compteur n à 0? Pour aller plus loin, pourait-on discrétiser les arcs de polylignes sélectionnées? Petit à petit on devient moins petit
x_all Posté(e) le 20 décembre 2012 Posté(e) le 20 décembre 2012 j'ai tester ton code avec la séléction(setq js (ssget '((-4 . "<OR") (0 . "*POLYLINE") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>"))) n 0 )mais le résultat est pas top, car ça décompose les polylignes, et les coupe même en ligne droite... j'ai souvenir d'avoir vu passer des lisp plus performant, mais je n'arrive pas à remettre la main dessus car ayant covadis, il y a 2 fonction très performante qui font ça quelques trucs sur autocad
lecrabe Posté(e) le 20 décembre 2012 Posté(e) le 20 décembre 2012 Hello Tu trouveras une Super Routine (comme d'habitude) de Gilles (Nov 2008) qui avait ete developpee (a ma demande si je me souviens bien !?) ... ARC2SEG vs 1.03 qui traite les Arcs, Cercles et Arcs a l'interieur des Polylignes avec choix d'effacer Oui/non les objets originaux et choix de creer de nouveaux objets sur calque d'Origine ou sur calque Courant et en plus la routine transfere les eventuels XDatas ... En resume c le TOP ! Bonne Utilisation, Bonne Fetes a Tous, Sante, lecrabe PS: Routine retestee sur version 2013 ... Autodesk Expert Elite Team
x_all Posté(e) le 20 décembre 2012 Posté(e) le 20 décembre 2012 ho pinaise... c'est bien à cette routine que je pensait (j'aurai du me douter que c'était un lisp à (gile)) à la lecture sommaire et inculte du code je me rend compte que c'est encore un morceau de bravoure loin... très très loin de mes capacités quelques trucs sur autocad
stugeol Posté(e) le 27 décembre 2012 Auteur Posté(e) le 27 décembre 2012 Je vous remercie pour vote aide.Ce dernier Lisp est au top, une fois de plus merci à Gile qui apparement est trés prolifique...bonne fêtes de fin d'année à toutes et tous.Cordialement. Petit à petit on devient moins petit
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