仅靠Lisp很难达到理想的效果,下面是网上搜索到的,你可以试着自己改进

- ;;;CADALYST 01/06 Tip 2082: Spline2Pline2.lsp Spline to Polyline Conversion - Update (c) 2006 Cadalyst and Lloyd Beachy + narrator
- ;; Spline2Pline2.lsp (c) 2005 Lloyd Beachy + narrator
- ;; Routine to convert splines to plines
- (Defun C:S2P2 (/ ss pt# cmdecho osmode clayer count ent lay lng pt-list
- cnt)
- (vl-load-com)
- (setq ss (ssget '((0 . "spline")))
- multi# (getint
- "Please specify number of polyline points by a multiplicator of spline's control points, leave default for the same number <1>:"
- )
- cmdecho (getvar "cmdecho")
- osmode (getvar "osmode")
- clayer (getvar "clayer")
- count 0 ;spline counter
- ) ;end setq
- (if (null multi#)
- (setq multi# 1)
- )
- (setvar "cmdecho" 0)
- (command ".undo" "begin") ;begin undo group
- (setvar "osmode" 0)
- (repeat (sslength ss) ;repeat for each spline
- (setq ent (vlax-ename->vla-object (ssname ss count))
- ;change spline to vla-object
- lay (vlax-get-property ent "layer") ;spline's layer
- cp# (vlax-get-property ent "numberofcontrolpoints")
- ;spline's control points number
- lng (vlax-curve-getDistAtPoint ent (vlax-curve-getEndPoint ent))
- ;length of spline
- pt-list (list (vlax-curve-getStartPoint ent))
- ;coords for start of spline
- cnt 1.0 ;segment counter
- pt# (* cp# multi#)
- ) ;end setq
- (repeat pt# ;repeat for each segment
- (setq pt-list
- (cons (vlax-curve-getPointAtDist ent (* lng (/ cnt pt#)))
- pt-list
- )
- ) ;add segment's point to pt-list
- (setq cnt (1+ cnt)) ;counter to next segment
- ) ;end segment repeat
- (setq cnt 0) ;pline counter
- (setvar "clayer" lay) ;match spline's layer
- (command ".pline" ;start "pline" command
- (repeat (length pt-list) ;repeat for each point
- (command (nth cnt pt-list)) ;enter current point
- (setq cnt (1+ cnt)) ;counter to next point
- "" ;return value to close "pline" command
- ) ;end point repeat
- ) ;end command
- (setq count (1+ count)) ;counter to next spline
- ) ;end spline repeat
- (command ".erase" ss "")
- (setvar "osmode" osmode)
- (setvar "clayer" clayer)
- (command ".undo" "end") ;end of undo group
- (setvar "cmdecho" cmdecho)
- (princ) ;exit quietly
- ) ;end C:S2P
|