- 积分
- 6483
- 明经币
- 个
- 注册时间
- 2002-4-17
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2002-11-16 10:08:00
|
显示全部楼层
我很久以前注意到过这个问题。你这个方法没有根本解决。Aperture设置还是很有缺点的
我很久以前注意到过这个问题。你这个方法没有根本解决。Aperture设置还是很有缺点的。我用这样方法。。。[br]leeyeafu的方法是根据autocad的帮助想当然的。但是很久以前我试过这种方法,的确是不灵光的,autocad的随机文档应该说清楚一点。
我想除了那个aperture外(其实我反而认为这个方法不是很好,毕竟aperture大一点画图时会方便一点)有两种方法:
1。在cal命令之前临时屏蔽自动捕捉。这个方法可能大家不会注意到,即使用non关键词:
Command: line
Specify first point: NON
'cal
>> Expression: (end+end)/2
>> Select entity for END snap:
>> Select entity for END snap:
(180.246 99.7775 0.0)
Specify next point or [Undo]:
Specify next point or [Undo]:
Command:
这个non用在lisp的command,vl-cmdf中也是有效的,可以避免操作osmode系统变量,对小程序很有效,如(command "line" "non" '(1 3 4) "non" '(3 4 5) "")
2. 第二种方法与leeyeafu说的有关。其实所谓的键盘优先,是autocad文档不够清楚。对于autocad来说,其实键盘的输入应该是字符串,所以,只要cal返回的结果是字符串形式的坐标,就可以屏蔽掉自动捕捉。而cal命令不提供相关的字符串操作函数。所以,这一条仅对autolisp有用。如(command "line" "1,3,4" "3,4,5" ""),这样也可以屏蔽掉自动捕捉。
给一个更实用一点的:
(defun getmidpt ( pt1 pt2 / x1 y1 z1 x2 y2 z2 x y z midptstr)
(setq x1 (car pt1)
y1 (cadr pt1)
z1 (caddr pt1))
(setq x2 (car pt2)
y2 (cadr pt2)
z2 (caddr pt2))
(setq x (/ (+ x1 x2) 2)
y (/ (+ y1 y2) 2)
z (/ (+ z1 z2) 2))
(setq midptstr (strcat (rtos x 2 16) ","
(rtos y 2 16) ","
(rtos z 2 16)
)
)
)
(defun C:midpt()
(princ "\n***捕捉两点的中点*** ")
(setq pt1 (getpoint "第一点:"))
(setq pt2 (getpoint "第二点:" pt1))
(getmidpt pt1 pt2)
)
上述程序是我初学lisp时写的(当时不会用什么lambda, mapcar之类的函数),现在看来可以写得简单一点,呵呵。
应用:
Command: line
Specify first point: 'midpt
***捕捉两点的中点*** 第一点:第二点:"145.2154945639678,110.1693458721686,0"
Specify next point or [Undo]:
Specify next point or [Undo]:
Command:
以字符串形式返回,可以避免自动捕捉 |
|