Aller au contenu

Hé oui encore moi avec mes splines/Elipses


Messages recommandés

Posté(e)

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 longueur

2_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)

(setq

obj_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-getDistAtParam

obj_vlax

(+ param_start param_end)

) ;_ Fin de vlax-curve-getDistAtParam

pt_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 coutes

ceci engendre un gros problème LE POID

Par 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

Posté(e)

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

Posté(e)

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:

 

Posté(e)

C est vrai que pour moi le lisp c est du navajo, à chaque fois que je vois les 3 ou 4 personnes

qui 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

 

 

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité