Aller au contenu

spline vers polyligne


kurt32

Messages recommandés

L'inverse oui, c'est pas tout à fait vrai, sauf à prendre l'option Objet de l'outil Spline et de selectionner une quadratique ou une cubique dérivée d'une poly normale.

Là on obtient une vrai spline....

 

 

Pour ton problème, FLATTEN des express tools est le meilleur outil.

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

et si on a pas les Express Tools (les LTsiens par exemple), une astuce consiste à exporter en DXF version 12 cette spline, puis à l'insérer à nouveau dans le dessin.

 

Il suffit de se créer une Macro

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

 

Bonjour

 

Voici une excellente routine !

Tapez S2P au clavier !

 

;;CADALYST 12/03 AutoLISP Solutions SPLINE-TO-PLINE.LSP

;;© 2003 Tony Hotchkiss

 

(defun spline-to-pline (/ i)

(vl-load-com)

(setq *thisdrawing* (vla-get-activedocument

(vlax-get-acad-object)

) ;_ end of vla-get-activedocument

*modelspace* (vla-get-ModelSpace *thisdrawing*)

) ;_ end of setq

(setq spline-list (get-spline))

(setq i (- 1))

(if spline-list

(progn

(setq msg "\nNumber of segments : ")

(initget 6)

(setq num (getint msg))

(if (or (= num 100) (= num nil))

(setq num 100)

) ;_ end of if

(repeat (length spline-list)

(setq splobj (nth (setq i (1+ i)) spline-list))

(convert-spline splobj num)

) ;_ end of repeat

) ;_ end of progn

) ;_ end of if

) ;_ end of spline-to-pline

 

(defun get-spline (/ spl-list obj spline no-ent i)

(setq spl-list nil

obj nil

spline "AcDbSpline"

selsets (vla-get-selectionsets *thisdrawing*)

ss1 (vlax-make-variant "ss1")

) ;_ end of setq

(if (= (vla-get-count selsets) 0)

(setq ssobj (vla-add selsets ss1))

) ;_ end of if

(vla-clear ssobj)

(setq no-ent 1)

(while no-ent

(prompt "\nSelect splines: ")

(vla-Selectonscreen ssobj)

(if (> (vla-get-count ssobj) 0)

(progn

(setq no-ent nil)

(setq i (- 1))

(repeat (vla-get-count ssobj)

(setq

obj (vla-item ssobj

(vlax-make-variant (setq i (1+ i)))

) ;_ end of vla-item

) ;_ end of setq

(cond

((= (vlax-get-property obj "ObjectName") spline)

(setq spl-list

(append spl-list (list obj))

) ;_ end of setq

)

) ;_ end-of cond

) ;_ end of repeat

) ;_ end of progn

(prompt "\nNo entities selected, try again.")

) ;_ end of if

(if (and (= nil no-ent) (= nil spl-list))

(progn

(setq no-ent 1)

(prompt "\nNo splines selected.")

(quit)

) ;_ end of progn

) ;_ end of if

) ;_ end of while

(vla-delete (vla-item selsets 0))

spl-list

) ;_ end of get-spline

 

(defun convert-spline (splobj n / i)

(setq point-list nil

2Dpoint-list nil

z-list nil

spl-lyr (vlax-get-property splobj 'Layer)

startSpline (vlax-curve-getStartParam splobj)

endSpline (vlax-curve-getEndParam splobj)

i (- 1)

) ;_ end of setq

(repeat (+ n 1)

(setq i (1+ i))

(setq p (vlax-curve-getPointAtParam

splobj

(* i

(/ (- endspline startspline) n)

) ;_ end of *

) ;_ end of vlax-curve-getPointAtParam

) ;_ end of setq

(setq 2Dp (list (car p) (cadr p))

2Dpoint-list (append 2Dpoint-list 2Dp)

point-list (append point-list p)

z (caddr p)

z-list (append z-list (list z))

) ;_ end of setq

) ;_ end of repeat

(setq summ (apply '+ z-list))

(setq arraySpace

(vlax-make-safearray

vlax-vbdouble ; element type

(cons 0

(- (length point-list) 1)

) ; array dimension

) ;_ end of vlax-make-safearray

) ;_ end of setq

(setq vert-array (vlax-safearray-fill arraySpace point-list))

(vlax-make-variant vert-array)

(if (and (= :vlax-true (vlax-get-property splobj 'IsPLanar))

(= summ 0.0)

) ;_ end of and

(setq plobj (add-polyline

2Dpoint-list

vla-AddLightweightPolyline

) ;_ end of add-polyline

) ;_ end of setq

(setq plobj (add-polyline

point-list

vla-Add3DPoly

) ;_ end of add-polyline

) ;_ end of setq

) ;_ end of if

(vlax-put-property plobj 'Layer spl-lyr)

(vla-delete splobj)

(vlax-release-object splobj)

) ;_ end of convert-spline

 

(defun add-polyline (pt-list poly-func)

(setq arraySpace

(vlax-make-safearray

vlax-vbdouble

(cons 0

(- (length pt-list) 1)

) ; array dimension

) ;_ end of vlax-make-safearray

) ;_ end of setq

(setq vertex-array

(vlax-safearray-fill arraySpace pt-list)

) ;_ end of setq

(vlax-make-variant vertex-array)

(setq plobj (poly-func

*modelspace*

vertex-array

) ;_ end of poly-func

) ;_ end of setq

) ;_ end of add-polyline

 

(defun c:s2p ()

(spline-to-pline)

(princ)

) ;_ end of c:s2p

 

(prompt

"SPLINE-TO-PLINE by Tony Hotchkiss. Enter S2P to start"

) ;_ end of prompt

 

 

Le Decapode (qui farfouille sur le NET)

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Mon cher LeCrabe, t'as routine est bonne et connue pour ça d'ailleurs, mais FLATTEN renvoie une poly contenant des arcs de cercle suivant au plus près la spline.

 

......

 

on ne controle pas le nombre de segments, c'est vrai.

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
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é