drault Posté(e) le 7 septembre 2020 Posté(e) le 7 septembre 2020 Bonjour, Après avoir chercher sur différents sites et tester la fonction "Editspline" (pas convaincu), je cherche une manière de convertir une spline en polyligne.Je ne sais pas comment mais ma spline était une polyligne avant de se transformer en spline. 1ere fois que cela m'arrive. Merci
lecrabe Posté(e) le 7 septembre 2020 Posté(e) le 7 septembre 2020 Hello CLIC dessus... Bouton droit... Convertir en Polyligne ... Fonctionnalite possible depuis la version 2010 ! LA SANTE (Stay Safe), Bye, le crabe "triste"Automne 2020, la retraite Autodesk Expert Elite Team
drault Posté(e) le 8 septembre 2020 Auteur Posté(e) le 8 septembre 2020 Bonjour Le crabe, Merci, j'ai oublié de préciser avoir tester cette commande mais même avec un facteur de 99 en précision, la spline ne se converti pas en une polyligne acceptable ou tout du moins comme elle était à l'origine.
lecrabe Posté(e) le 8 septembre 2020 Posté(e) le 8 septembre 2020 Hello OK et si tu essayais cette vieille routine "S2P" !? LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite ;; Conversion d'une SPLINE en une POLYLIGNE ;; Lancement de la fonction: S2P ;; ;; CADALYST 12/03 AutoLISP Solutions SPLINE-TO-PLINE.LSP ;; (c) 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 <100>: ") (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 Autodesk Expert Elite Team
(gile) Posté(e) le 8 septembre 2020 Posté(e) le 8 septembre 2020 Salut, Une polyligne (composée uniquement de segments linéaires et/ou en arc de cercle) ne pourra jamais figurer exactement une spline (courbe non rationnelle).N'importe quel développement pourra difficilement faire mieux que la commande native avec la variable système PLINECONVERTMODE à 1 et une valeur de précision de 99. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Aleck_Ultimate Posté(e) le 8 septembre 2020 Posté(e) le 8 septembre 2020 Je ne sais pas comment mais ma spline était une polyligne avant de se transformer en spline. 1ere fois que cela m'arrive.Les seules raisons que je vois sont que suite à une commande comme JOINDRE ou EPURER elle se soit fusionnée avec une spline ou un arc d'ellipse. Elle aurais aussi pus se fusionner avec des entités (lignes, segments) sur un plans 3D (il ne peut pas y avoir de segments arc sur une poly3D d'où la conversion). Si tu regarde ta ligne de commande il y est toujours précisé si des entités sont converties en spligne à la suite de ce genre de commande. J'aie pris l'habitude de toujours vérifier pour éviter les surprises de ce genre. Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux. Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage ! Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;]) Utilisateur d'AutoCAD 2021 sous Windows 10
drault Posté(e) le 8 septembre 2020 Auteur Posté(e) le 8 septembre 2020 Merci pour vos contributions: -Le crabe => testé et pas du tout probant mais je garde au cas où prochaine tuile -Gile =>ESTISPLINE retesté avec PLINECONVERTMODE à 1 plutôt que 0 = pas probant -Aleck => En fait j'ai récupéré le bébé d'une personne et je me retrouve avec cette chose bien relou et qui doit peser plutôt qu'une polyligne (pas sûr concernant question du poids. Je pencherai plus pour une jointure. Bon, je crois que je vais devoir redessiner cette polyligne....
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant