[求助]请帮修改自编的多段线与曲线相互转换程序(lisp)
<p>自编一段多段线与曲线相互转换程序,想将转换后的线保持和原线一样的颜色、线型、线型比例、线宽和图层。但只能改变颜色,其它的不能改变,不知什么原因,请高手帮看看错在哪能里?<br/>程序如下:<br/>(defun c:lpsp ()</p><p> (setq ss (car(entsel"\n请选择曲线、多段线: ")))<br/> (setq endata (entget ss)) ;取出对象(多段线)ssn的信息列表赋于endata<br/> (setq s0 (cdr (assoc 0 endata))) ;取得原实体线型名称<br/> (entdel ss) ;删除要修改的线<br/> (if (= s0 "LWPOLYLINE") (progn ;如果是多段线<br/> (setq kd 10) ;判断坐标的参数为10<br/> (command "_spline") ;启动画曲线命令<br/> ))<br/> (if (= s0 "SPLINE") (progn ;如果是曲线<br/> (setq kd 11) ;判断坐标的参数为11<br/> (command "_pline") ;启动画多段线命令<br/> ))<br/> (setq n 0 ptn '())<br/> (repeat (length endata)<br/> (setq pt (nth n endata)) ;依次取得信息列表的子表<br/> (setq x (car pt)) <br/> (if (= x kd) (command (cdr pt))) ;判断是否是坐标点,是就画线<br/> (setq n (+ n 1))<br/> )<br/> (if (= s0 "LWPOLYLINE") (command "" "" "")) ;多段线画线结束<br/> (if (= s0 "SPLINE") (command "")) ;曲线画线结束<br/> (setq f1 (cdr (assoc 62 endata))) ;取得ss的颜色<br/> (setq f2 (cdr (assoc 6 endata))) ;取得ss的线型<br/> (setq f3 (cdr (assoc 48 endata))) ;取得ss的线型比例<br/> (setq f4 (cdr (assoc 370 endata))) ;取得ss的线宽<br/> (setq f5 (cdr (assoc 8 endata))) ;取得ss的图层<br/> (command "_chprop" (entlast) "" "c" f1 "") ;新线的颜色<br/> (command "_chprop" (entlast) "" "it" f2 "") ;新线的线型<br/> (command "_chprop" (entlast) "" "s" f3 "") ;新线的线型比例<br/> (command "_chprop" (entlast) "" "lw" f4 "") ;新线的线宽<br/> (command "_chprop" (entlast) "" "la" f5 "") ;新线的图层<br/>)<br/> </p> LT写成it了。有时用大写字母有优势,可以看出是否写错了。(defun c:lpsp ()
(setq ss (car(entsel "\n请选择曲线、多段线: ")))
(setq endata (entget ss)) ;取出对象(多段线)ssn的信息列表赋于endata
(setq s0 (cdr (assoc 0 endata))) ;取得原实体线型名称
(entdel ss) ;删除要修改的线
(if (= s0 "LWPOLYLINE") (progn ;如果是多段线
(setq kd 10) ;判断坐标的参数为10
(setq ff (= (cdr (assoc 70 endata)) 1))
(command "_spline") ;启动画曲线命令
))
(if (= s0 "SPLINE") (progn ;如果是曲线
(setq kd 11) ;判断坐标的参数为11
(setq ff (= (cdr (assoc 70 endata)) 1))
(command "_pline") ;启动画多段线命令
))
(setq n 0 ptn '())
(repeat (length endata)
(setq pt (nth n endata)) ;依次取得信息列表的子表
(setq x (car pt))
(if (= x kd) (command (cdr pt)));判断是否是坐标点,是就画线
(setq n (+ n 1))
)
(if (= s0 "LWPOLYLINE") (command (if ff "c" "") "" "")) ;多段线画线结束
(if (= s0 "SPLINE") (command (if ff "c" ""))) ;曲线画线结束
(setq f1 (cdr (assoc 62 endata))) ;取得ss的颜色
(setq f2 (cdr (assoc 6 endata))) ;取得ss的线型
(setq f3 (cdr (assoc 48 endata))) ;取得ss的线型比例
(setq f4 (cdr (assoc 370 endata))) ;取得ss的线宽
(setq f5 (cdr (assoc 8 endata))) ;取得ss的图层
(command "_chprop" "L" "" "C" f1) ;新线的颜色
(command "_chprop" "L" "" "LT" f2) ;新线的线型
(command "_chprop" "L" "" "S" f3) ;新线的线型比例
(command "_chprop" "L" "" "LW" f4) ;新线的线宽
(command "_chprop" "L" "" "LA" f5 "") ;新线的图层
(princ)
)
谢谢楼上朋友的细心,我总以为是什么大问题,谁知问题出在细节上。 东西不错。很实用
页:
[1]