最初由 网络水手 发布
[B]标注时我们用捕捉点进行标注, 有时使用CAD自带的捕捉点工具, 可以不用关闭对象捕捉就会捕捉到需要的点, 但对于自己写的捕捉程序, 点是可以选对,但在标注时如果对象捕捉的端点捕捉打开的话就会捕捉到尺寸线的端点, 相... [/B]
这是肯定的,当你的系统捕捉在打开情况下,在LISP程序中,使用了Command命令,若该命令的需要点参数,而你给的点参数附近(范围由变量控制)刚好有系统捕捉中设置的捕捉要素(如端点、交点等),则系统将根据捕捉原则对点参数进行捕捉改正后再传给command命令。
这是正常的,产生这个的原因是在LISP中使用command来运行CAD命令时,等同于在标准命令行状态下键入命令运行一样。所以它也遵循命令行状态下的捕捉原则。
解决方法一般有二种:
1、不用command命令(呵呵,,,,,,,,)
2、在用command命令前保存捕捉变量值,并设置其为0(即关掉捕捉),在使用command命令后立即恢复变量值。
我的程序中的一个写字函数

- (defun zbh_draw (slist / slen loop_i)
- (setq slen (length slist))
- ;;逐一从表sszwd中提取坐标进行标注;
- ;关闭捕捉方式
- (setq osmode_old (getvar "osmode"))
- (setvar "osmode" 0)
- (setq loop_i 0)
- (while (<= loop_i (1- slen))
-
- (setq pt (nth loop_i slist))
- (setq
- pt1
- (list (+ (car pt) NB_Bh_textoffset)
- (+ (cadr pt) NB_Bh_textoffset)
- )
- ) ;_结束setq
- ;;将编号加上前后缀
- (setq
- zbh_ok (strcat NB_Bh_texthome (itoa bh_began) NB_Bh_textend)
- )
- (command "_.text" "s" "ZBH" pt1 NB_Bh_textsize "0d" zbh_ok)
- ;;(setq bho (entlast))
- ;;(command "move" bho "" pt pt1)
- (setq bh_began (1+ bh_began))
- (setq loop_i (1+ loop_i))
- ) ;_结束while
- ;;恢复捕捉方式
- (setvar "osmode" osmode_old)
- ) ;_ 结束defun
- ;;-------------------
|