革天明 发表于 2012-8-18 15:35:31

如何自动纠正getpoint所获取的点?这个问题不知道可以简捷的程序实现?

目的:在下图所示的图中,在P2点附近(3MM以内)任意getpoint,希望能得到P2点的坐标。
在osmode为16383的情况下,很容易点选到P1点,如何得到P2点的坐标?点选时是手动点选。


下面是测试图,有兴趣的朋友可以尝试一下。

namezg 发表于 2012-8-18 15:35:32

本帖最后由 namezg 于 2012-8-18 22:37 编辑

写了一个,有点穷,收一个币,呵呵



xsso 发表于 2012-8-18 16:55:04

osmode非0时极容易获取你不想要的其它点,所以很多画图的程序都一在执行前将osmode设为0,然后执行完操作后恢复osmode值。如果你非要osmode非0时捕获点,就有点自找麻烦

革天明 发表于 2012-8-20 08:33:38

当我选择P1时,返回的点在P2点附近或者就是P2点,当我选择P2时,返回的点是P2点左上角的另外一点,我的要求是:选择P1点,返回P2,选择P2,返回P2,最重要的是程序要有通用性,不过我的对象比较单一,P1和P2的水平和垂直间距都在2左右。

革天明 发表于 2012-8-20 08:50:32

(defun c:test1 ()
   (setq p1 (getpoint))
   (setq p2 (list (+ (car p1) -2) (+ (cadr p1) 2)))
   (setq        ss (ssget "C"
                  (list (+ (car p2) 1) (+ (cadr p2) -1))
                  (list (+ (car p2) -1) (+ (cadr p2) 1))
           )
   )
   (if (null ss)
   (princ p2)
   (princ p1)
   )
)
P1 P2的两个引线标注在测试时删除,正常使用过程中没有这两个引线标注,基本能使用了

namezg 发表于 2012-8-20 20:49:02

我的程序满足你的要求应该没问题。

革天明 发表于 2012-8-21 08:36:15

namezg 发表于 2012-8-20 20:49 static/image/common/back.gif
我的程序满足你的要求应该没问题。

我昨天试过了,点P1点,返回P2点,
但是点P2点,返回的是P2点左上角的一个点,此时要求返回P2
我测试时是这样的,对吗?

namezg 发表于 2012-8-21 17:37:10

你测试的图纸应具再代表性.你应把已知条件表达完全.你测试的图p1为中心6mm为边长的正方形区域只有p1 p2两个点.是没有其它点的,只要在这个范围内没有p1 p2以外的其它点.我的程序就能用.
页: [1]
查看完整版本: 如何自动纠正getpoint所获取的点?这个问题不知道可以简捷的程序实现?