Aller au contenu

polyligne avec la fonction spline


boul140370

Messages recommandés

Salut,

 

Un objet est dit plan s'il est contenu dans un seul plan. C'est toujours le cas pour les cercles, arcs, ellipses, polylignes (2d ou optimisées) et les régions. Une spline ou une polyligne 3d peuvent aussi être plane (si tous les points qui les composent sont contenus dans le même plan.

 

Pour ce que tu veux faire, une extrusion, le plus simple est de transformer les objets jointifs en une REGION avec la commade du même nom ou avec la commande CONTOUR (_BOUNDARY).

 

 

Nos messages se sont croisés.

 

je viens d'essayer la fonction contour avec spline +arc+trait, ça ne fonctionne pas: une solution?

 

Tes objets ne sont peut-être pas jointifs. avec des objets autres que des lignes polylignes et arcs la commande CONTOUR devrait te proposer de créer une région.

 

[Edité le 9/2/2008 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

Il existe de nombreux LISP qui transforment une spline en polyligne. La plupart utilisent des segments droits sur le trajet de la spline en nombre suffisant pour recréer l'illusion de la courbe. Fais une recherche sur le site.

 

Je t'en propose un qui crée une polyligne composée uniquement d'arcs tangents entre eux, il faut aussi qu'ils soient suffisamment courts pour suivre au plus près la courbe. Fait des essais, la spline est conservée et tu peux annuler l'opération si tu n'est pas satisfait (U ou CTRL+Z)

 

(defun c:spl2pl	(/ spl dis seg dis nor elv len lst1 lst2 lst3 ang1 ang2	n pl)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )

 (defun tan (a) (/ (sin a) (cos a)))

 (while (not
   (and
     (setq spl (car (entsel "\nSélectionnez une spline: ")))
     (= (cdr (assoc 0 (entget spl))) "SPLINE")
     (vlax-curve-IsPlanar spl)
   )
 )
 )
 (initget 7)
 (setq	seg (getdist "\nSpécifiez la longueur des segments: ")
dis 0
nor (cdr (assoc 210 (entget spl)))
len (vlax-curve-getDistAtpoint spl (vlax-curve-getEndPoint spl))
 )
 (while (    (setq lst1 (cons (vlax-curve-getPointAtDist spl dis) lst1)
  dis  (+ dis seg)
   )
 )
 (setq	elv  (caddr (trans (car lst1) 0 nor))
lst1 (reverse (cons (vlax-curve-getEndPoint spl) lst1))
lst1 (mapcar '(lambda (x)
		(setq x (trans x 0 nor))
		(list (car x) (cadr x))
	      )
	     lst1
     )
lst2 lst1
ang1 (angle '(0 0 0)
	    (trans (vlax-curve-getFirstDeriv spl 0) 0 nor)
     )
n    0
 )
 (while (cdr lst2)
   (setq ang2 (angle (car lst2) (cadr lst2))
  lst3 (cons (cons n (tan (/ (- ang2 ang1) 2.0))) lst3)
  n    (1+ n)
  ang1 (- (* 2 ang2) ang1)
  lst2 (cdr lst2)
   )
 )
 (vla-StartUndoMark *acdoc*)
 (setq	pl (vlax-invoke
     (vla-get-ModelSpace *acdoc*)
     'addLightWeightPolyline
     (apply 'append lst1)
   )
 )
 (mapcar '(lambda (x) (vla-setBulge pl (car x) (cdr x)))
  lst3
 )
 (if (vlax-curve-IsClosed spl)
   (vla-put-Closed pl :vlax-true)
 )
 (vla-put-Normal pl (vlax-3d-point nor))
 (vla-put-Elevation pl elv)
 (vla-EndUndoMark *acdoc*)
 (princ)
) 

 

 

PS : Pour les ellipses tu trouveras l'équivalent dans ce sujet

 

[Edité le 9/2/2008 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

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é