lisp 读取样条曲线座标点_将三维折线更改为在Autocad中用lisp进行样条曲线

我有一个可以从3D多段线创建样条线的工作语法。我的问题是我不能让它工作来选择多个三维多段线或整个图层,并且一个lisp会将结果图层更改为默认图层。它应该保持原来的。

这是我的工作lisp:

(defun c:3p2spl ( / *error* line2spl loop pl e s ss sss )

(vl-load-com)

(defun *error* ( msg )

(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))

)

(defun line2spl ( e / sp ep d )

(setq sp (cdr (assoc 10 (entget e)))

ep (cdr (assoc 11 (entget e)))

d (distance sp ep)

)

(entdel e)

(entmakex

(list

'(0 . "SPLINE") '(100 . "AcDbEntity") '(100 . "AcDbSpline") '(210 0.0 0.0 1.0) '(71 . 1) '(73 . 2)

'(42 . 1.0e-010) '(43 . 1.0e-010) '(40 . 0.0) '(40 . 0.0) (cons 40 d) (cons 40 d) (cons 10 sp) (cons 10 ep)

)

)

)

(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))

(setq loop T)

(setq sss (ssget "_I"))

(if (and sss (eq (cdr (assoc 0 (entget (setq pl (ssname sss 0))))) "POLYLINE") (< 7 (cdr (assoc 70 (entget pl))) 14)) (setq loop nil))

(while loop

(setq pl (car (entsel "\nPick 3DPOLYLINE to convert it to SPLINE")))

(if (and (eq (cdr (assoc 0 (entget pl))) "POLYLINE") (< 7 (cdr (assoc 70 (entget pl))) 14)) (setq loop nil))

)

(setq e (entlast))

(command "_.explode" pl "")

(setq ss (ssadd))

(while (setq e (entnext e))

(if (eq (cdr (assoc 0 (entget e))) "LINE")

(progn

(setq s (line2spl e))

(ssadd s ss)

)

)

)

(command "_.join" (ssname ss 0) ss "")

(*error* nil)

(princ)

)如果我将ssget "_I"更改为ssget "_:E",则可以选择多条线,但是它会更改为只绘制第一条线。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值