lisp中使用command或vl-cmdf时,数据过多出现"未响应"假死状态
lisp中使用command或vl-cmdf时,数据过多出现无响应假死状态,导致使用者认为程序死了。怎么解决,让CAD保持响应?
如:
gysjy的连接线段的小LSP
在我们的cad绘图中常常需要将多条线段连接成一条线。用pedit中的j命令可以实现这一功能要求。而本程序可以框选图元,批量连接所选的线段:(defun c:nn(/ ss s)
(princ "\n 本程序用来批量连接线段。gysjy 2009.10.27")
(setq ss (ssget '((-4 . "<OR")
(0 . "LINE")(0 . "ARC")
(-4 . "<AND")(0 . "LWPOLYLINE")(70 . 0)(-4 . "AND>")
(-4 . "OR>")))
)
(while ss
(setq s (ssname ss 0))
(if (or (= "LINE" (cdr (assoc 0 (entget s))))
(= "ARC" (cdr (assoc 0 (entget s))))
)
(command "pedit" s "y" "j" "p" "" "x")
(command "pedit" s "j" "p" "" "x")
)
(setq ss (ssget "p"))
)
(princ)
)在1000个矩形打散后,重新连接过程,后期CAD就会出现忙状态,标题栏上显示“未响应”。
很多使用者无经验就为认为程序已经死机,就没有耐心等待了。
如何避免这种情况? 网蜂大师,好久不见! 本帖最后由 自贡黄明儒 于 2015-5-11 15:21 编辑
(VL-CATCH-ALL-APPLY 'VL-CMDF ....
循环中加入
(defun spin (wh)
(princ (strcat "\r"
wh
(cond ((= #spin "|") (setq #spin "/"))
((= #spin "/") (setq #spin "-"))
((= #spin "-") (setq #spin "\\"))
(T (setq #spin "|"))
)
)
)
(princ)
)
这段程序好象不是最精简的 本帖最后由 wen1235 于 2015-5-17 19:07 编辑
网蜂大神 你的程序不用循环试试
只要判断是否有多线段就好
(command “pedit” “m” (ssget) “y” “j” “” “”)
这样会快很多 wen1235 发表于 2015-5-17 19:04 static/image/common/back.gif
网蜂大神 你的程序不用循环试试
只要判断是否有多线段就好
(command “pedit” “m” (ssget) “y” “ ...
最初是就使用的这句,对象过多的时候同样假死。
才想到的加入进度条。
===
经过这段时间的测试,发现在纯CAD环境中进度条正常运行。在CASS环境下容易出现:未响应,但程序能正常运行完毕。
有时间再查了。
页:
[1]