选择集问题
(setq en (car (entsel "\n选择踏步直线:"))pt1 (cdr (assoc 10 (entget en)))
pt2 (cdr (assoc 11 (entget en)))
ku1 (angle pt1 pt2)
Id (mapcar '(lambda (x y) (* (+ x y) 0.5)) pt1 pt2)
I2 (polar Id (+ ku1 (* pi 0.5)) 410)
ss(ssget "f" (list Id I2) '((8 . "楼梯" )))
)
这个获取选择集代码执行100次90多次都正常,但有时ss(ssget "f" (list Id I2) '((8 . "楼梯" )))这个SS就选不到东西,ss=nil,有人遇到过这种问题吗,难道这也是LISP的陷阱
本帖最后由 llsheng_73 于 2023-7-26 16:39 编辑
ssget"F"可能存在问题,给定的栏选坐标没有与要选择的目标相连,虽然肉眼看上去应该是相连的,比如在直线段起止点之间取两个点,理论上这两个点都是过直线的,但实际上由于实数精度问题,它们有可能并不在直线段上,当然,这个问题也不是绝对的,所以有时就可能抽疯。。。。
比如选定一条直线等分成10000份,以过等分点与已知直线的垂线作为栏选线进行选择,按说每次都应该能选到那个直线(因为栏选所用的点有一个是直线上的等分点),但实际上肯定会经常选不到目标,
下边一段测试代码选择直线后,在直线上取10000个等分点,计算栏选线来对直线进行栏选,分别记录选择成功与失败次数,不管直线怎么画,最后的结果总是接近一半一半
(defun c:tt(/ e d i j p dis ang)
(if(setq e(ssget":E:S"'((0 . "line"))))
(progn(setq e(ssname e 0)d(*(vlax-curve-getendparam e)0.0001)dis 0 i 0 j 0
ang(+(angle(vlax-curve-getstartpoint e)(vlax-curve-getendpoint e))(* pi 0.5)))
(while(setq dis(+ dis d)p(vlax-curve-getpointatparam e dis))
(if(ssget"F"(List p(polar p ang 1))'((0 . "line")))
(setq j(+ 1 j))
(setq i(+ i 1))))))
(List j i))
对于与栏选线相交的情况,需要保证被选择对象与栏选线不在虚部相交;
对于栏选线端点与被选对象似接触,建议适当延伸栏选线端点,在可控范围内变成与被选对象相交;
对于被选对象端点与栏选线似接触的情况就比较麻烦,建议对栏选线进行双向微距偏移把栏选线变成选择范围,用"CP"方式进行选择;
(if (and (setq en (car (entsel "\n选择踏步直线: ")))
(setq p1 (cdr (assoc 10 (entget en))))
(setq p2 (cdr (assoc 11 (entget en))))
)
(progn
(setq ra (angle p1 p2)
p3 (mapcar '(lambda (x y) (* (+ x y) 0.5)) p1 p2)
p4 (polar p3 (+ ra (* pi 0.5)) 410)
)
(command "zoom" "w" p3 p4)
(setq ss (ssget "f" (list p3 p4) '((8 . "楼梯"))))
(command "zoom" "p")
(if ss (sssetfirst nil ss))
)
)
选择不到对象是因为,这个这个选择集获取跟图像在屏幕上的显示大小相关。简单来说,你需要利用zoom相关函数,把图形以选取的中心点进行放大,才能准确以某个中心点进行对象自动选取,选取后恢复原来的视角。
原理和手动选取一样,图形越大,越能在密密麻麻的图像中精准的选取的对象
ZOOM相关函数研究一下。 这个应该就是没选到对象,好好检查一下是哪几个坐标栏选不了对象就知道了。 应该不是上面说的问题,因为我画一个简单图形程序执行正常,我把这个图原位旋转一个角度,再执行这个程序,ss=nil,再把这个图旋转一下,程序又正常了
szx025 发表于 2023-7-24 09:11
应该不是上面说的问题,因为我画一个简单图形程序执行正常,我把这个图原位旋转一个角度,再执行这个程序, ...
:lol相信你的判断,等你找到10次为啥不正常的答案,记得再来发帖额,我想学习一下 学习学习,期待解决 我刚开始以为是坐标点是三维点造成的,全部转换成二维点后,还是有这个问题,为啥不正常的答案还有请高人出场 选择集最多只能新建128个,需要及时删除不用的选择集。是不是这个原因? 本帖最后由 飞雪神光 于 2023-7-25 10:08 编辑
上图哇 瞅瞅 从代码上看是在直线一侧搜索 如果搜不到就是没图形或者出视口 或者视口显示范围过大 都容易选不到
页:
[1]
2