包哥 发表于 2023-1-24 00:24:42

求前辈帮忙指点一下这个小功能如何实现(grread函数没学透),万分感谢

先通过拾取两角点绘制一个矩形,然后移动光标(注意不是鼠标左键单击,只是移动鼠标改变光标位置),根据十字光标所在位置(pt1)计算离pt1最近的矩形角点(jd1),将pt1和jd1连线

xyp1964 发表于 2023-1-24 18:33:48

(defun c:tt ()
(defun PlPtn (s1)(mapcar 'cdr(vl-remove-if '(lambda (x) (/= (car x) 10)) (entget s1))))
(if (and (setq p0 (getpoint "\n基点<退出>: "))
           (setq p1 (getcorner p0 "\n对角点<退出>: "))
      )
    (progn
      (setvar "osmode" 0)
      (command "Rectang" p0 p1)
      (setq s1 (entlast)
          ptn (PlPtn s1)
          mode t
      )
      (while mode
        (setq gd15 (grread t 15 0)
              cd (car gd15)
        )
        (cond ((or (= cd 2) (= cd 3) (= cd 25)) (setq mode nil))
              ((= cd 5)
             (redraw)
             (setq pt (cadr gd15)
                     ptn (vl-sort ptn '(lambda (x y) (< (distance pt x) (distance pt y))))
                     p1 (car ptn)
             )
             (Grvecs (list 1 pt p1))
              )
        )
      )
      (redraw)
      (command "Line" pt p1 "")
    )
)
(princ)
)

xyp1964 发表于 2023-1-24 18:35:33

本帖最后由 xyp1964 于 2023-1-25 09:44 编辑




包哥 发表于 2023-1-24 22:56:53

xyp1964 发表于 2023-1-24 18:33


感谢院长{:1_1:}

masterlong 发表于 2023-1-27 14:56:04

盲猜动态云线

chslwj521 发表于 2023-2-21 15:09:25

可以哦,最近点这个有用

金鹅起飞 发表于 2023-9-20 09:14:18

感谢xyp1964分享插件,向你学习{:1_1:}

Klein 发表于 2024-5-11 11:16:01

研究了下代码,矩形取点和点排序代码太简洁了,换我估计要套好几层if;P,学习了。另外,代码里判断grread返回值2,3,25,什么情况下会返回25,哪位大神解可以答下?
页: [1]
查看完整版本: 求前辈帮忙指点一下这个小功能如何实现(grread函数没学透),万分感谢