求前辈帮忙指点一下这个小功能如何实现(grread函数没学透),万分感谢
先通过拾取两角点绘制一个矩形,然后移动光标(注意不是鼠标左键单击,只是移动鼠标改变光标位置),根据十字光标所在位置(pt1)计算离pt1最近的矩形角点(jd1),将pt1和jd1连线 (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-25 09:44 编辑
xyp1964 发表于 2023-1-24 18:33
感谢院长{:1_1:} 盲猜动态云线 可以哦,最近点这个有用 感谢xyp1964分享插件,向你学习{:1_1:} 研究了下代码,矩形取点和点排序代码太简洁了,换我估计要套好几层if;P,学习了。另外,代码里判断grread返回值2,3,25,什么情况下会返回25,哪位大神解可以答下?
页:
[1]