为什么两个线的共用端点提取出的DXF不相等呢?
本帖最后由 Scarlet2001 于 2024-9-4 16:26 编辑如题,用这个代码来判断两条线是否有共用端点时不能成功,为什么DXF提取出的坐标值是一样的但是=判断中却是不等的呢?
(defun c:tt ( / ss a1 a2 p1 p2 p3 p4)
(if (setq ss (ssget '((0 . "LINE"))));选择直线
(if (= 2 (sslength ss));确认选中直线数量为2
(progn
(setq a1 (entget (ssname ss 0)));线1定义数据
(setq a2 (entget (ssname ss 1)));线2定义数据
(setq p1 (cdr (assoc 10 a1)));线1点1
(setq p2 (cdr (assoc 11 a1)));线1点2
(setq p3 (cdr (assoc 10 a2)));线2点3
(setq p4 (cdr (assoc 11 a2)));线2点4
(if (not (/= p1 p2 p3 p4));如果有两个点一样,理论上两线共用一个端点
(princ "\n存在共用端点")
(progn
(foreach p (list p1 p2 p3 p4) (princ "\n") (princ p))
)
)
)
)
)
(princ)
) (defun c:tt ()
(if (and (setq ss (ssget '((0 . "LINE")))) (= (sslength ss) 2)) ;选择2根直线
(progn
(setq l1 (ssname ss 0)
l2 (ssname ss 1)
p1 (vlax-curve-getStartPoint l1)
p2 (vlax-curve-getEndPoint l1)
p3 (vlax-curve-getStartPoint l2)
p4 (vlax-curve-getEndPoint l2)
)
(if (or (equal p1 p3) (equal p1 p4) (equal p2 p3) (equal p2 p4))
(princ "\n存在共用端点")
(mapcar 'prin1 (list p1 p2 p3 p4))
)
)
)
(princ)
) tryhi 发表于 2024-9-5 09:53
你不觉得你这句 (/= p1 p2 p3 p4)永远不可能成立吗?你是否对\=这个函数有误解?以你的理解来看,你觉得这 ...
懂了,我理解错了,以为是逐一比较
但是把(not (/= p1 p2 p3 p4))改成(or (= p1 p2) (= p1 p3) (= p1 p4) (= p2 p3) (= p2 p4) (= p3 p4))还是不行 Scarlet2001 发表于 2024-9-5 14:48
懂了,我理解错了,以为是逐一比较
但是把(not (/= p1 p2 p3 p4))改成(or (= p1 p2) (= p1 p3) (= p1 p4 ...
因为=不能比较“表”,或者准确来说,地址不同的表,用=对比则返回nil,你试试下面的代码
(setq
p1 '(1 2)
p2 '(1 2)
)
(= p1 p2) ;--> nil https://free2.yunpng.top/2024/09/04/66d817294f02e.png
浮点数误差 但是把坐标拆出来判断又是可以的,很奇怪
例:(and (= (car p1) (car p2)) (= (cadr p1) (cadr p2))) d1742647821 发表于 2024-9-4 16:17
浮点数误差
请问为啥用(and (= (car p1) (car p2)) (= (cadr p1) (cadr p2)))把坐标拆开来比较又可以了呢? 因为=号有容差呗 本帖最后由 tryhi 于 2024-9-5 09:57 编辑
你不觉得你这句 (/= p1 p2 p3 p4)永远不可能成立吗?你是否对\=这个函数有误解?以你的理解来看,你觉得这句返回什么(/= 1 2 1 2) tryhi 发表于 2024-9-5 09:53
你不觉得你这句 (/= p1 p2 p3 p4)永远不可能成立吗?你是否对\=这个函数有误解?以你的理解来看,你觉得这 ...
是相邻两个数比较,12 23 34...,不是两两比较。对比较结果取and。
页:
[1]
2