Aller au contenu

Convertir Arc en ligne


tvr42

Messages recommandés

Bonjour,

 

J'aimerais savoir si il était possible de remanier ce Lisp pour que je puisse décomposer plusieurs arcs en même temps (je suis nul en programmation).

 

 

(defun c:arc2lines (/ ent nb obj n dist lst)

 

(vl-load-com)

 

(if (and (setq ent (car (entsel "\nSélectionnez un arc: ")))

 

(= (cdr (assoc 0 (entget ent))) "ARC")

 

)

 

(progn

 

(initget 7)

 

(setq nb (getint "\nEntrez le nombre de segments: ")

 

obj (vlax-ename->vla-object ent)

 

dist (/ (vlax-curve-getDistAtParam

 

obj

 

(vlax-curve-getEndParam obj)

 

)

 

nb

 

)

 

lst (list (vlax-curve-getStartPoint obj))

 

n 0

 

)

 

(repeat nb

 

(setq

 

lst

 

(cons

 

(vlax-curve-getPointAtDist obj (* dist (setq n (1+ n))))

 

lst

 

)

 

)

 

)

 

(while (cdr lst)

 

(entmake (list '(0 . "LINE")

 

(cons 10 (car lst))

 

(cons 11 (cadr lst))

 

)

 

)

 

(setq lst (cdr lst))

 

)

 

(entdel ent)

 

)

 

(prompt "\nEntité non valide.")

 

)

 

(princ)

 

)

 

 

 

Merci

arc2line.lsp

Lien vers le commentaire
Partager sur d’autres sites

Voilà, tu as les deux ARC2LINES pour sélectionner un seul arc ou ARCS2LINES pour en sélectionner plusieurs.

 

(defun arc2lines (ent nb / obj n dist lst)
 (vl-load-com)
 (setq	obj  (vlax-ename->vla-object ent)
dist (/	(vlax-curve-getDistAtParam
	  obj
	  (vlax-curve-getEndParam obj)
	)
	nb
     )
lst  (list (vlax-curve-getStartPoint obj))
n    0
 )
 (repeat nb
   (setq
     lst
      (cons
 (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n))))
 lst
      )
   )
 )
 (while (cdr lst)
   (entmake (list '(0 . "LINE")
	   (cons 10 (car lst))
	   (cons 11 (cadr lst))
     )
   )
   (setq lst (cdr lst))
 )
 (entdel ent)
)

(defun c:arc2lines (/ ent nb)
 (if (and (setq ent (car (entsel "\nSélectionnez un arc: ")))
   (= (cdr (assoc 0 (entget ent))) "ARC")
     )
   (progn
     (initget 7)
     (setq nb (getint "\nEntrez le nombre de segments: "))
     (arc2lines ent nb)
   )
   (prompt "\nEntité non valide.")
 )
 (princ)
)

(defun c:arcs2lines (/ ss nb n)
 (if (setq ss (ssget '((0 . "ARC"))))
   (progn
     (initget 7)
     (setq nb (getint "\nEntrez le nombre de segments: "))
     (repeat (setq n (sslength ss))
(arc2lines (ssname ss (setq n (1- n))) nb)
     )
   )
 )
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

  • 5 semaines après...
Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é