marko_ribar 发表于 2022-7-6 07:39:02

我不明白,(osnap)函数的行为就像真实的osnap:如果测试点最接近“u qua”捕捉,则,(osnap)将返回圆的象限点;若距离测试点最近的第一个捕捉距离圆心较近,则(osnap)将返回圆的圆心。。。测试取决于测试点-其相对于最近实体捕捉的位置。。。

Costinbos77 发表于 2022-7-6 07:44:26

我们讨论的一切都在一个循环中进行,而决策,函数在哪里
 

(grread T 15 0)

 
主题:
 
http://www.cadtutor.net/forum/showthread.php?77110-vla移动和OSMODE问题。

marko_ribar 发表于 2022-7-6 07:48:18

我认为,在圆作为测试实体的情况下,应该考虑将孔径sys变量更改为更高的值,因为这个小代码为捕捉提供了不同的结果。。。
 

(while (setq gr (grread t))
(print (osnap (cadr gr) "_cen,_qua"))
)

 
当光圈小时,这将只返回圆的象限点,但当您将光圈设置为更高的值(我最大值为50)时,上述代码也将返回象限点之间的值和圆中心的坐标。。。注意,主要捕捉将是零点,因为实体圆周围的空间比OSNAP孔径操作的空间更宽、更大。。。

Costinbos77 发表于 2022-7-6 07:51:29

孔径=10,不是预期结果,我将尝试5。
 
谢谢你的想法。

Costinbos77 发表于 2022-7-6 07:54:19

我找到了一个解决方案:
 
计算每个鼠标点和OSMODE所需列表之间的距离。根据此距离,进行区分:
 

    (setq liosnap nil) ;_ end of setq
    (foreach el litos (if (setq op (osnap p el))
   (progn
   (setq d (distance p op)d (cond ((= el "_cen") (/ d 4.)) ((= el "_nea") (* d 10.)) (T d)) )
   (setq liosnap (cons (list d op el) liosnap)) ))) ;_ end of f
    (if liosnap
   (setq liobs (car (vl-sort liosnap '(lambda (s1 s2) (< (car s1) (car s2)) ) ) )op (nth 1 liobs)mod (nth 2 liobs) ) ;_ end of setq
   (setq op nil) ;_ end of setq
    ) ;_ end of if liosnap


 
OSNAP的某些方式更“敏感”(qua,snow),因此必须加以抑制。
页: 1 [2]
查看完整版本: OSNAP函数