yusukens82 Posté(e) le 24 janvier 2008 Posté(e) le 24 janvier 2008 Bonjours Apres mes recherche dans CADXP j'ai trouvé ce lisp qui fait par didier et bonuscad, qui permet de diviser en segment des ELIPSE ou SPLINE en segment de polyligne. (defun C:S-E2PL ( / js n ent typent dxf_ent obj_vlax param_start param_end perim_obj pt_start pt_end res_track res_divid flag_ucs flag_erase last_e old_osmd old_pdmd l_pt)(setq js (ssget "_X" '((0 . "SPLINE,ELLIPSE"))))(cond(js(vl-load-com)(initget "Mesurer Diviser _Measure Divide")(if (eq (getkword "\nAction par [Mesurer/Diviser]? < Mesurer >: ") "Divide")(progn(initget 7)(setq res_divid (getint "\nNombre de division: ")))(progn(initget 7)(setq res_track (getdist "\nDistance de résolution: "))))(setqold_osmd (getvar "osmode")old_pdmd (getvar "pdmode")n -1)(initget "Oui Non _Yes No")(if (eq (getkword "\nVoulez vous faire une projection sur le SCU courant? [Oui/Non] < Non >: ") "Yes")(setq flag_ucs nil)(setq flag_ucs T))(initget "Oui Non _Yes No")(if (not (eq (getkword "\nEffacer l'entité source [Oui/Non] < Oui >: ") "No"))(setq flag_erase T)(setq flag_erase nil))(setvar "osmode" 0)(setvar "pdmode" 1)(setvar "cmdecho" 0)(repeat (sslength js)(setqent (ssname js (setq n (1+ n)))obj_vlax (vlax-ename->vla-object ent)param_start (vlax-curve-getStartParam obj_vlax)param_end (vlax-curve-getEndParam obj_vlax)perim_obj (vlax-curve-getDistAtParam obj_vlax (+ param_start param_end))pt_start (vlax-curve-getStartPoint obj_vlax)pt_end (vlax-curve-getEndPoint obj_vlax)last_e (entlast))(if res_divid (setq res_track (/ perim_obj res_divid)))(if flag_ucs (command "_.ucs" "_entity" ent))(cond((and (eq typent "SPLINE") (not (zerop (boole 1 1 (cdr (assoc 70 dxf_ent))))))(setq l_pt '("_close")))((and (eq typent "ELLIPSE") (zerop (cdr (assoc 41 dxf_ent))) (eq (cdr (assoc 42 dxf_ent)) (* 2 pi)))(setq l_pt '("_close")))(T(setq l_pt (cons (trans pt_end 0 1) '("")))))(command "_.measure" ent res_track)(while(and(= (cdr (assoc 0 (setq dxf_ent (entget (entlast))))) "POINT")(not (equal (entlast) last_e)))(setq l_pt (cons (trans (cdr (assoc 10 dxf_ent)) 0 1) l_pt))(entdel (entlast)))(command "_.pline" (mapcar 'command (cons (trans pt_start 0 1) l_pt)))(if flag_ucs (command "_.ucs" "_previous"))(if flag_erase (entdel ent)))(setvar "osmode" old_osmd)(setvar "pdmode" old_pdmd)(setvar "cmdecho" 1))(T (princ "\nAucune Spline ou Ellipse trouvée!")))(prin1))(princ "\nS-E2PL.LSP chargé. Tapez S-E2PL pour convertir SPLINE ou ELLIPSE en POLYLIGNE.")(prin1) avez vous un lisp qui me permetrait de faire selon une sélection de ligne, et de les transformer en polyligne ??jusqu'a maintenant j'utiliser PEDIT, mais cela prend un temps fou.merci de votre aide
yusukens82 Posté(e) le 24 janvier 2008 Auteur Posté(e) le 24 janvier 2008 En fait c'est bon, j'ai écrit rapidement un LISP qui me conviendra (defun c:LPL () (command "PEDIT" "m")) je lance LPL, je choisi mes lignes et je confirme 2 fois. ^^ Par contre si quelqu'un sais comment allé plus loin c'est a dire après avoir la transformation les lignes en polyligne, pouvoir les JOINDRE afin d'en faire d'un (pareil j'utilise PEDIT mais en LISP je sais que m'arreté à M) ^^ [Edité le 24/1/2008 par yusukens82]
lesourd2 Posté(e) le 24 janvier 2008 Posté(e) le 24 janvier 2008 Salut J'aurais ceci a te proposer eventuellement. ;programme r‚alis‚ par B.ROUSSEAU;change toute ligne en polyligne avec une ‚paisseur par selection globale (defun C:CHligne () (princ "\nChange toutes les lignes en polylignes avec une nouvelle ‚paisseur") (princ "\nPar COLLY Romuald ,V1.0 1992") (setq p (ssget)) ; Selection d'entites (if p (progn ; Si des objets sont selectiones (setq l 0 na 0 n (sslength p)) (setq na (getreal " Nouvelle ‚paisseur : ")) (while (< l n) ; Selection des entites une par une (if (= "LINE" ; Regarde si l'entite est une ligne (cdr (assoc 0 (setq e (entget (ssname p l)))))) (progn (setq lin (ssname p l)) (command "pedit" lin "o" "e" na "s") ) ) (if (= "POLYLINE" ; Regarde si l'entite est une polyligne (cdr (assoc 0 (setq e (entget (ssname p l)))))) (progn (setq lin (ssname p l)) (command "pedit" lin "e" na "s") ) ) (setq l (+ l 1)) ; Suivante ) ) ) (redraw) ) @+
dest Posté(e) le 5 février 2008 Posté(e) le 5 février 2008 Salut lesourd2Merci pour ton lisp et trés pratique. Bonne continuation à vous tous
yusukens82 Posté(e) le 5 février 2008 Auteur Posté(e) le 5 février 2008 Salutmerci pour le LISPle lisp ne marche pas chez moilorsque je lence le lisp et que je sélectionne les lignesil y'a une erreur.il me change la premiere ligne en polyligne et les autres non.
(gile) Posté(e) le 5 février 2008 Posté(e) le 5 février 2008 Salut, Un exemple de ce qu'on peut faire. On fait d'abord un jeu de sélection avec uniquement des arcs lignes et polylignes (filtre).On lance ensuite la commande PEDIT, option multiple, on lui passe le jeu de sélection, on valide (""), option Joindre ("_j"), tolérence 0 (à changer si tu veux), et on valide. (defun c:lpl (/ ss) (if (setq ss (ssget '((0 . "ARC,LINE,LWPOLYLINE")))) (command "_.pedit" "_m" ss "" "_j" 0.0 "") ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
yusukens82 Posté(e) le 5 février 2008 Auteur Posté(e) le 5 février 2008 Merci Gile. Je viens d'essayer le lisp, et j'ai rencontré un petit souci.en cherchant un peu j'ai réussi a trouver la solution.tu as oublié de mettre la confirmation du transformation en polyligne "O" (defun c:lpl2 (/ ss)(if (setq ss (ssget '((0 . "ARC,LINE,LWPOLYLINE"))))(command "_.pedit" "_m" ss "" "O" "_j" 0.0 ""))(princ)) Avec ce LISP je vais pouvoir adapter d'autre problème, et donc moins soliciter le forum.Merci encore[Edité le 5/2/2008 par yusukens82] [Edité le 5/2/2008 par yusukens82]
(gile) Posté(e) le 5 février 2008 Posté(e) le 5 février 2008 Ça dépend de la valeur de la variable système PEDITACCEPT (qui, chez moi, est toujours à 1) et du contenu du jeu de sélection.Avec ton code, si le jeu de sélection ne contient que des polylignes, tu auras une erreur. Un nouveau code qui met la PEDIACCEPT à un avant de lancer la commande et restaure sa valeur initiale. (defun c:lpl (/ pa ss) (setq pa (getvar "PEDITACCEPT")) (setvar "PEDITACCEPT" 1) (if (setq ss (ssget '((0 . "ARC,LINE,LWPOLYLINE")))) (command "_.pedit" "_m" ss "" "_j" 0.0 "") ) (setvar "PEDITACCEPT" pa) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
yusukens82 Posté(e) le 5 février 2008 Auteur Posté(e) le 5 février 2008 Effectivement mon PEDITACCEPT était à 0.je connaisais pas cette variable. merci pour l'adaptation du lisp.
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