Aller au contenu

Messages recommandés

Posté(e)

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: "))

)

)

(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)

 

 

 

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

Posté(e)

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]

Posté(e)

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

 

@+

  • 2 semaines après...
Posté(e)

Salut

merci pour le LISP

le lisp ne marche pas chez moi

lorsque je lence le lisp et que je sélectionne les lignes

il y'a une erreur.

il me change la premiere ligne en polyligne et les autres non.

 

 

Posté(e)

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

Posté(e)

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]

Posté(e)

Ç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

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é