chengx2000 发表于 2011-6-11 16:47:17

程序出了问题,求大家帮帮忙

我在公司里写了一个将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)
)

再个希望大家多提意见。谢谢!

ZZXXQQ 发表于 2011-6-11 16:59:56

(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))
)

chengx2000 发表于 2011-6-11 19:51:20

回复 ZZXXQQ 的帖子

版主果然眼睛很精,但是任然没能解决问题,还是在 (command "DIVIDE" en p_num)这里卡主了,希望楼主再帮我看看,谢谢!

ZZXXQQ 发表于 2011-6-11 20:49:31

    (command "_.layer" "s" "p_point" "on" "")
改成
    (command "_.layer" "s" "p_point" "on" "" "")

(apply '(command) (cons "pline" pl))
改成
(apply 'command (cons "pline" pl))

zhynt 发表于 2011-6-11 20:59:09

还是用2012吧,现在这个已经是内部命令了。

skynoon 发表于 2011-6-11 21:22:46

现在我们都还在用2004,你们就整上2012啦?

chengx2000 发表于 2011-6-11 21:45:29

回复 ZZXXQQ 的帖子

谢谢版主,确实是这样的,真的非常感谢!
页: [1]
查看完整版本: 程序出了问题,求大家帮帮忙