grread做的一个递增复制,如何用GU版的替换掉
小弟最近用grread做了个递增复制的lisp,根据Gu_xl版主的帖子想替换为gxl-Ge-grread带捕捉的函数,可不知怎样终止循环。下面我发上我自己的这个lisp,有精通该函数用法的高手,请深处您的援助之手。小弟不胜感激。(defun c:mc ( );自定义新的出错函数
(defun newerr(msg)
(mapcar 'eval sysvarlst) ;恢复变量设置
(if*olderror*
(setq *error* *olderror*
*olderror* nil
)
) ;恢复*error*函数
(if(not
(member msg '(nil "函数被取消" ";错误:quit / exit abort"))
)
(princ (strcat ";错误:" msg))
)
);;系统设置
(command "undo" "be") ;;命令编组开始
(setq
sysvarlst (mapcar
(function (lambda (n) (list 'setvar n (getvar n))))
'("osmode" "cmdecho""OSNAPCOORD"
"dimzin" "plinewid""TEXTSIZE"
"textstyle"
)
)
) ;;保存系统变量
(setq *olderror* *error*) ;;保存出错函数
(setq *error* newerr) ;;设置自定义出错函数
(setvar "cmdecho" 0) ;;关闭命令响应
(setvar "OSNAPCOORD" 1) ;;坐标数据优先级设为:键盘输入替代对象捕捉设置
(setvar "OSMODE" 65) ;;改变捕捉模式
(setvar "dimzin" 0) ;;不对主单位值作消零处理
(setq el (entget (car (entsel "\n 请选择数字>>"))))
(setqp0(cdr (assoc 10 el))
str (read (cdr (assoc 1 el)))
h (assoc 40 el)
)
(c:mf)
(command "_undo" "_e") ;;活动编组结束
(mapcar 'eval sysvarlst) ;;恢复变量设置
(setq *error* *olderror*);;恢复出错函数
(princ)
(defun c:mf ()
(if el
(progn
(entmake
(list '(0 . "TEXT") (cons 1 (itoa (1+ str))) (cons 10 p0) h)
)
(setq lst (entget (entlast)))
(setq loop T)
(while loop
(setq code (grread T 8)
mod(car code)
val(cadr code)
)
(cond ((= mod 5)
(setq p0 val)
(setq lst (subst (cons 10 p0) (assoc 10 lst) lst))
(entmod lst)
(setq str (read (cdr (assoc 1 lst))))
)
((= mod 3) (c:mf)) ;;左击鼠标从c:mf继续循环
((= mod 25) (setq loop nil) (entdel (entlast))) ;;右击鼠标(本电脑值为25),删除最后生成的数字编号,结束操作
)
)
)
)
)
)
(setq loop T)
(while loop ....)
您得对 Loop 变量做条件式 ==> nil
那么当 (while Loop==> (while nil <== 退出 Andyhon 发表于 2015-1-3 11:36 static/image/common/back.gif
(setq loop T)
(while loop ....)
我看gu版在带捕捉的grread自定义函数帖子里说,直接替换掉grread效果一样,我替换完了,结果不循环。 自己顶一下,希望有此经验之人给小解一下gxl-Ge-grread函数的详细用法。 ..他的函数说明写的挺详细的. 鱼与熊掌 发表于 2015-1-3 16:54 static/image/common/back.gif
..他的函数说明写的挺详细的.
是啊,他的使用说明里说用gxl-Ge-grread代替grread即可实现带捕捉功能,可我替换完之后,就不能循环复制了呢?麻烦熊掌大哥看下我的那个小程序,是不是循环部分有问题。 (while (progn
(setq gr(gxl-grread ~~~))
(setq a(car gr) b(cadr gr))
(cons((= a 5)
t)
(t nil)
)
) 鱼与熊掌 发表于 2015-1-3 17:44 static/image/common/back.gif
(while (progn
(setq gr(gxl-grread ~~~))
(setq a(car gr) b(cadr gr))
我将原程序中的一句做了如下改动,(grread T 8)==>>(gxl-Ge-grread '(T 7 3) p0 e),可打开的捕捉只有端点和插入点的捕捉,没有测试程序中的最近点,垂足点等其他点的捕捉。并且在鼠标移动过程中,整个效果就跟打开了“捕捉”效果一样,请注意是捕捉,不是对象捕捉。按键“F3”后,关闭捕捉,运行很流畅,具体效果如下图所示,还望兄长阁下明示。 newbuser 发表于 2015-1-4 10:48 static/image/common/back.gif
我将原程序中的一句做了如下改动,(grread T 8)==>>(gxl-Ge-grread '(T 7 3) p0 e),可打开的捕捉只有端点 ...
因为你字也一起捕捉了,所以会这样,g版的代码不是有对ss不捕捉吗,你看看 鱼与熊掌 发表于 2015-1-4 10:58 static/image/common/back.gif
因为你字也一起捕捉了,所以会这样,g版的代码不是有对ss不捕捉吗,你看看
我按你的方法改进了下,运行倒是流畅了,可,仍然只有端点和插入点的捕捉啊。另外,你说的Gu版避开选择集捕捉跟我这个单独的text图元有些不符。代码我发上来,麻烦您老费心看下到底是哪里出的问题。(defun c:mc ()
;自定义新的出错函数
(defun newerr (msg)
(mapcar 'eval sysvarlst) ;恢复变量设置
(if *olderror*
(setq *error* *olderror*
*olderror* nil
)
) ;恢复*error*函数
(if (not
(member msg '(nil "函数被取消" ";错误:quit / exit abort"))
)
(princ (strcat ";错误:" msg))
)
)
;;系统设置
(command "undo" "be")
;;命令编组开始
(setq
sysvarlst (mapcar
(function (lambda (n) (list 'setvar n (getvar n))))
'("osmode" "cmdecho" "OSNAPCOORD"
"dimzin" "plinewid" "TEXTSIZE"
"textstyle"
)
)
)
;;保存系统变量
(setq *olderror* *error*)
;;保存出错函数
(setq *error* newerr)
;;设置自定义出错函数
(setvar "cmdecho" 0)
;;关闭命令响应
(setvar "OSNAPCOORD" 1)
;;坐标数据优先级设为:键盘输入替代对象捕捉设置
(setvar "OSMODE" 65)
;;改变捕捉模式
(setvar "dimzin" 0)
;;不对主单位值作消零处理
(setq el (entget (car (entsel "\n 请选择数字>>"))))
(setq p0(cdr (assoc 10 el))
str (read (cdr (assoc 1 el)))
h (assoc 40 el)
)
(c:mf)
(command "_undo" "_e")
;;活动编组结束
(mapcar 'eval sysvarlst)
;;恢复变量设置
(setq *error* *olderror*)
;;恢复出错函数
(princ)
)
(defun c:mf ()
(entmake
(list '(0 . "TEXT") (cons 1 (itoa (1+ str))) (cons 10 p0) h)
)
(setq lst (entget (setq en (entlast))))
(setq loop T)
(while loop
(progn
(setq code (gxl-Ge-grread '(T 7 3) p0 en)
mod (car code)
val (cadr code)
)
)
(cond ((= mod 5)
(setq p0 val)
(setq lst (subst (cons 10 p0) (assoc 10 lst) lst))
(entmod lst)
(setq str (read (cdr (assoc 1 lst))))
)
((= mod 3) (c:mf))
((or (= mod 32) (= mod 25))
(setq loop nil)
(entdel (entlast))
)
)
)
)
页:
[1]
2