程序出了问题,求大家帮帮忙
我在公司里写了一个将SPLINE转为PLINE的程序,能达到理想的效果,但是我回家后重新写了一下,而且因为是第二次写所以一些地方我仔细修改过,但是问题来了——调试了好多遍都不成功,故此到论坛上来求教了。代码如下:(defun bak ()(setq ort (getvar "ORTHOMODE")
os(getvar "osmode")
)
(setvar "ORTHOMODE" 0)
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setq err *error*)
(setq *error* err_d)
)
(defun err_d (msg)
(if (/= msg "Function cancelled")
(princ (strcat ":" msg))
)
(setq *error* err)
(setvar "ORTHOMODE" ort)
(setvar "cmdecho" 1)
(setvar "osmode" os)
(princ "程序退出!")
(prin1)
)
;****************************
(defun c:ff(/ ss i ii pl en enlist p_num st ed pl p_ss )
(bak)
(setq ss (ssget '((0 . "SPLINE"))))
(setq i 0)
(if (tblsearch "layer" "p_point")
(command "_.layer" "s" "p_point" "on" "")
(command "_.layer" "m" "p_point" "")
)
(while (> (sslength ss) i)
(setq pl nil)
(setq en
(ssname ss i)
enlist (entget en)
)
(setq p_num (* (length (member (assoc 11 enlist) enlist)) 3)
)
(setq st (cdr (assoc 11 enlist))
ed (cdr (assoc 11 (reverse enlist)))
pl (cons st pl)
)
(command "DIVIDE" en p_num)
;刚开始运行得到这里没问题,但是运行第二次的时候这里就有问题了,在此卡壳了
(setq p_ss (ssget "X" '((0 . "POINT") (8 . "p_point"))))
(setq ii 0)
(while (> (sslength p_ss) ii)
(setq pl (cons (cdr (assoc 10 )) pl))
(entdel (ssname p_ss ii))
(setq ii (1+ ii))
)
(setq pl (cons ed pl))
(entdel (ssname ss i))
(setq i (1+ i))
(apply '(command) (cons "pline" pl))
(command "")
(command "PEDIT" (entlast) "f" "")
)
(princ)
)
再个希望大家多提意见。谢谢!
(while (> (sslength p_ss) ii)
(setq pl (cons (cdr (assoc 10 (entget(ssname p_ss ii)))) pl));这行改了下
(entdel (ssname p_ss ii))
(setq ii (1+ ii))
)
回复 ZZXXQQ 的帖子
版主果然眼睛很精,但是任然没能解决问题,还是在 (command "DIVIDE" en p_num)这里卡主了,希望楼主再帮我看看,谢谢! (command "_.layer" "s" "p_point" "on" "")
改成
(command "_.layer" "s" "p_point" "on" "" "")
(apply '(command) (cons "pline" pl))
改成
(apply 'command (cons "pline" pl))
还是用2012吧,现在这个已经是内部命令了。 现在我们都还在用2004,你们就整上2012啦? 回复 ZZXXQQ 的帖子
谢谢版主,确实是这样的,真的非常感谢!
页:
[1]