néné Posté(e) le 2 janvier 2006 Posté(e) le 2 janvier 2006 Salut a tous Tout dabord je tien a remercier particulièrement didier pour la routine qu'il m'a donnéCette routine transforme les splines et les élipse en polyligne avec des longueurs de segment paramètrable ça fonctionne très bien et ça va énormément m'aidé Mais peut on faire mieu ? En effet serait il possible de:1_ paramètré le nombre de segment plutot que la longueur2_d'avoir la possibilité de convertir plusieur éléménts en même temp Voila le problème posé si quelqu'un ou quelqu'une a une soluce !!!!!! Voici cette routine==============================================(defun C:E2PL ( / ent typent dxf_ent obj_vlax param_start param_end perim_obj pt_start pt_end res_track flag_ucs last_e old_osmd old_pdmd l_pt)(while (null (setq ent(entsel"\nChoix de la Spline ou Ellipse à convertir en polyligne: ") ;_ Fin de entsel) ;_ Fin de setq) ;_ Fin de null) ;_ Fin de while(setq typent (cdr (assoc 0 (setq dxf_ent (entget (car ent))))))(cond((or (eq typent "SPLINE") (eq typent "ELLIPSE"))(vl-load-com)(setqobj_vlax (vlax-ename->vla-object (car ent))param_start (vlax-curve-getStartParam obj_vlax)param_end (vlax-curve-getEndParam obj_vlax)perim_obj (vlax-curve-getDistAtParamobj_vlax(+ param_start param_end)) ;_ Fin de vlax-curve-getDistAtParampt_start (vlax-curve-getStartPoint obj_vlax)pt_end (vlax-curve-getEndPoint obj_vlax)) ;_ Fin de setq(initget 6)(setq res_track (getdist (cadr ent) (strcat "\nDistance de résolution<" (rtos (/ perim_obj 500.0)) ">: " )))(setq last_e (entlast)old_osmd (getvar "osmode")old_pdmd (getvar "pdmode")) ;_ Fin de setq(if (not res_track)(setq res_track (/ perim_obj 100.0))) ;_ Fin de if;;;(initget "Oui Non _Yes No");;; (if;;; (eq;;; (getkword;;; "\nVoulez vous faire une projection sur le SCU courant? [Oui/Non]: ";;; ) ;_ Fin de getkword;;; "Yes";;; ) ;_ Fin de eq;;; (setq flag_ucs nil);;; (progn;;; (command "_.ucs" "_entity" (car ent));;; (setq flag_ucs T);;; ) ;_ Fin de progn;;; ) ;_ Fin de if(cond((and (eq typent "SPLINE")(not (zerop (boole 1 1 (cdr (assoc 70 dxf_ent)))))) ;_ Fin de and(setq l_pt '("_close")))((and (eq typent "ELLIPSE")(zerop (cdr (assoc 41 dxf_ent)))(eq (cdr (assoc 42 dxf_ent)) (* 2 pi))) ;_ Fin de and(setq l_pt '("_close")))(T(setq l_pt (cons (trans pt_end 0 1) '(""))))) ;_ Fin de cond(setvar "osmode" 0)(setvar "pdmode" 1)(setvar "cmdecho" 0)(command "_.measure" (car ent) res_track)(while(and(= (cdr (assoc 0 (setq dxf_ent (entget (entlast)))))"POINT") ;_ Fin de =(not (equal (entlast) last_e))) ;_ Fin de and(setq l_pt (cons (trans (cdr (assoc 10 dxf_ent)) 0 1) l_pt))(entdel (entlast))) ;_ Fin de while(command "_.pline"(mapcar 'command (cons (trans pt_start 0 1) l_pt))) ;_ Fin de command;(if flag_ucs; (command "_.ucs" "_previous") ;_ Fin de if(initget "Oui Non _Yes No")(if (not (eq (getkword "\nEffacer l'entité source [Oui/Non] : ")"No") ;_ Fin de eq) ;_ Fin de not(entdel (car ent))) ;_ Fin de if(setvar "osmode" old_osmd)(setvar "pdmode" old_pdmd)(setvar "cmdecho" 1))(T (princ "\nN'est pas une Spline ou Ellipse!"))) ;_ Fin de cond(prin1)) ===============================================Autre réflexion ! en enregistrant un fichier comportant des splines et des élipses sous le format R12 ces entités sont transformées en polylignes ayant des segments de longueur par défaut très coutesceci engendre un gros problème LE POIDPar contre un avantage certaint c'est que toutes les entités sont converties en même temp alors voila exist il une méthode qui pourais etre appliqué pour changer la longeur par défaut de ces segments pour obtenir des segments plus long et ainsi allègé le poid du fichier Merci a tous bonne réflextion et surtout n'oubliez pas les bonnes résolutions pour cette nouvelle année
bonuscad Posté(e) le 2 janvier 2006 Posté(e) le 2 janvier 2006 Salut Le même remanié pour travailler sur TOUTES les SPLINE et ELLIPSE du dessin.Options Diviser ou Mesurer rajoutées. (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: ")) ) ) (setq old_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) (setq ent (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) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
mikL44 Posté(e) le 2 janvier 2006 Posté(e) le 2 janvier 2006 Salut Une fois de plus, nickel, à garder dans ses archives lisp.Bravo didier et bonuscad. Tchaoooooo
néné Posté(e) le 3 janvier 2006 Auteur Posté(e) le 3 janvier 2006 salut a tous Mille MERCI bonuscad J'ai pas encore testé mais je pense qu' il ni a pas de raison de douter Heu!!!!!.........Ben je ne sais vraiment pas quoi dire tellement je suis content si ce n'est merci Cette routine va me faire gagné un temp fou et m'épargné pas mal de cliks Par conséquent plus productif, ( c'est mon boss qui va etre content !) encore merci a tous Cad xp c'est magique :heartpump:
mikL44 Posté(e) le 3 janvier 2006 Posté(e) le 3 janvier 2006 C est vrai que pour moi le lisp c est du navajo, à chaque fois que je vois les 3 ou 4 personnesqui répondent sur ce theme demeler des dizaines et des dizaines de lignes de lisp, j ai l impression d avoir à faire à plein de ptit " Will Hunting ". :D Tchaoooooo
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