Aller au contenu

SVP Test Routine S2P.lsp sur ACAD 2010/2011


lecrabe

Messages recommandés

 

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 MP

cadxp 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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour lecrabe,

Volontiers je test ton lisp:

Première subtilité c'est Spline to Poly3D ou Spline to Poly2D

Avec A2011:Transformation de la spline en poly 3D

Avec A2010:Transformation de la spline en poly 3D

Avec A2009:Transformation de la spline en poly 3D..

Sa a l'air de rouler....

DAO: AutoCAD(2D & 3D), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

Lien vers le commentaire
Partager sur d’autres sites

 

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

Lien vers le commentaire
Partager sur d’autres sites

 

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

Lien vers le commentaire
Partager sur d’autres sites

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 CADALIST

Il 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

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é