lecrabe Posté(e) le 1 octobre 2010 Posté(e) le 1 octobre 2010 Hello Voici une routine en VLisp que j'utilise depuis longtemps et qui fonctionne sur MAP 2004 - MAP 2011 mais il semblerait qu'elle se plante sur AutoCAD 2010 (voire meme peut etre sur AutoCAD 2011) Je sais que Gilles a developpe la meme chose en mieux ... SVP pourriez vous faire un test sur AutoCAD 2010 et 2011 et me dire si elle fonctionne OUI ou NON (sur un "simple" AutoCAD) ? Merci d'avance, Le Decapode PS: si il y a un souci de copier/coller , je peux vous l'envoyer par MPcadxp at hotmail point fr ;; 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 : ") (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
RhymOne Posté(e) le 1 octobre 2010 Posté(e) le 1 octobre 2010 Bonjour lecrabe,Volontiers je test ton lisp:Première subtilité c'est Spline to Poly3D ou Spline to Poly2DAvec A2011:Transformation de la spline en poly 3DAvec A2010:Transformation de la spline en poly 3DAvec A2009:Transformation de la spline en poly 3D..Sa a l'air de rouler.... DAO: AutoCAD(2D & 3D), CovadisCAO: 3D's MAX, Rhinoceros 3D, REVITGeoModeliSation: AutoCAD MEP, RhinoTerrainRendu: Vray for Rhino, Keyshot, LumionProgrammation: Grasshopper, Dynamo, VisualStudio C.V.Profil LinkedInBookSite web http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg
lecrabe Posté(e) le 1 octobre 2010 Auteur Posté(e) le 1 octobre 2010 Hello Sorry ! Apres chargement le nom de la commande c'est : S2P Cette routine S2P permet de selectionner N Splines en une fois pour les transformer toutes en Polylignes de NNN segments ! Les Splines d'origine sont supprimees Donc si j'ai bien compris cela fonctionne parfaitement un AutoCAD 2009 / 2010 / 2011 ? Merci d'avance de vos reponses ! ET si je pouvais avoir la reponse pour ceux qui ont un AutoCAD 2010 et 2011 64 bits !Ca serait Sympa ! Bon WE a tous, Le Decapode Autodesk Expert Elite Team
Fraid Posté(e) le 1 octobre 2010 Posté(e) le 1 octobre 2010 Salut Sa marche impécable chez moi sur 2010 et 2011 64bites https://github.com/Fraiddd
lecrabe Posté(e) le 3 octobre 2010 Auteur Posté(e) le 3 octobre 2010 Hello Merci pour vos tests, je suis surpris car cette routine se plante a l'execution sur certains PCs avec AutoCAD 2010 32 bits alors que pour moi elle est fonctionnelle (en theorie) pour toute version d'AutoCAD / MAP / Autodesk Architectural Desktop / CIVIL depuis la version 2004 jusqu'a la version 2011 (32 ou 64 bits) Quand je dis "toute" je suis "un peu presomptueux" car je n'ai que des AutoCAD MAP pour tester ! Mais bon jusqu'a maintenant une routine qui fonctionnait sur un MAP (peu de differences par rapport a un AutoCAD) a toujours fonctionne sur un AutoCAD "simple" ! Donc c un mystere pour moi !? :casstet: En quoi d'autres routines Lisp / VLisp prechargees, pourraient interferer eventuellement avec cette routine S2P.lsp ? Le Decapode Autodesk Expert Elite Team
Fraid Posté(e) le 9 octobre 2010 Posté(e) le 9 octobre 2010 Bonjour, Il y a peu de variables déclarées dans ce lisp. Le probléme vient peut etre de là ? Surtout si tu utilise deja des lisp de chez CADALISTIl utlise surment les memes fonctions et/ ou les memes noms de variables. Donc a ta place je declarerai au debut du code les variables utilisées. ex (defun c:s2p ( / arraySpace plobj ..........) ou je chercherai dans les autres lisp du meme auteur pour voir si il n'y a pas 2 fonctions differentes mais au nom identique Bonne chance https://github.com/Fraiddd
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