一条或者多条直线是垂直或者水平,对于不是垂直或者水平的,倾斜的直线修改其颜色
本帖最后由 qd001 于 2024-11-19 16:21 编辑有没有可以实现图纸里直线与直线垂直和水平关系检查功能的,框选2条或以上直线,判断一条或者多条直线是垂直或者水平,对于不是垂直或者水平的,倾斜的直线修改其颜色特别显示 本帖最后由 xyp1964 于 2024-11-19 22:27 编辑
(defun c:tt ()
(defun xyp-dxf (code e) (cdr (assoc code (entget e))))
(setq i -1)
(if (setq ss (ssget '((0 . "LINE"))))
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq p1 (xyp-DXF 10 s1)
p2 (xyp-DXF 11 s1)
)
(if (not(or (equal (car p1) (car p2)) (equal (cadr p1) (cadr p2))))
(vla-put-color (vlax-ename->vla-object s1) 1)
)
)
)
(princ)
)
(defun c:tt ()
(setq i -1)
(if (setq ss (ssget '((0 . "LINE"))))
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq s (vlax-curve-getStartPoint s1)
e (vlax-curve-getEndPoint s1)
)
(if (not (or (equal (car s) (car e)1e-3) (equal (cadr s) (cadr e)1e-3)))
(vla-put-color (vlax-ename->vla-object s1) 1)
)
)
)
(princ)
)
本帖最后由 llsheng_73 于 2024-11-19 17:42 编辑
垂直是两条线的关系,一条直线只有正交(竖直或水平)和非正交(倾斜)
计算直线起点和止点的坐标或坐标差
(setq dxy(mapcar'- p1 p2'(0 0)))
(cond((equal(car dxy)0 1e-8)"竖直")((equal(cadr dxy)0 1e-8)"水平")(T"倾斜"))
或
(setq dxy(mapcar(function(lambda(a b)(equal a b 1e-8)))p1(mapcar'+ p2'(0 0))))
(if(apply'or dxy)"正交""倾斜")
或(if(car dxy)"竖直"(if(cadr dxy)"水平""倾斜"))
(defun c:tt(/ s e en);;;倾斜直线改为红色
(and(setq s(ssget'((0 . "line"))))
(repeat(sslength s)
(setq e(ssname s 0)en(entget e))
(or(vl-some(function(lambda(a b)(equal a b 1e-8)))(cdr(assoc 10 en))(mapcar'+'(0 0)(cdr(assoc 11 en))))
(entmod(append en'((62 . 1)))))
(ssdel e s))))
qd001 发表于 2024-11-19 16:19
标题我更新了
对于垂直和水平的线不处理,其他线改为红色
(defun c:tt (/ ls l n a)
(setq ls (ssget (list (cons 0 "LINE"))))
(if (null ls) (exit))
(setq n 0)
(repeat (sslength ls)
(setq l (entget (ssname ls n)))
(setq a (angle (cdr (assoc 10 l)) (cdr (assoc 11 l))))
(cond
((equal a 0 1e-6) (princ))
((equal a (/ PI 2) 1e-6) (princ))
((equal a PI 1e-6) (princ))
((equal a (/ (* PI 3) 2) 1e-6) (princ))
(T
(if (assoc 62 l)
(entmod (subst (cons 62 1) (assoc 62 l) l))
(entmod (append l (list (cons 62 1))))
)
)
)
(setq n (1+ n))
)
(princ)
) 让我想起来高版本的直线上下差0.1是看不出来的,
而低版本可以看到折了一下 用inters 可以判断 属性看始终点坐标?
你有种再说一遍 发表于 2024-11-18 00:24
让我想起来高版本的直线上下差0.1是看不出来的,
而低版本可以看到折了一下
是因为低版本显示差,高版本设置显示差时一样可以看到折了。 gzcsun 发表于 2024-11-18 10:41
是因为低版本显示差,高版本设置显示差时一样可以看到折了。
不觉得这是显示策略的不同而已嘛?
为什么你总会想到差不差的点上面,而且不觉得影响用户才是差吗 用两直线单位向量叉乘可以判断平行和垂直,绝对值等于0是平行,绝对值等于1是垂直 如果当时0809 发表于 2024-11-19 09:43
用两直线单位向量叉乘可以判断平行和垂直,绝对值等于0是平行,绝对值等于1是垂直
怎么写代码,可以判断图纸里面所有的直线么 llsheng_73 发表于 2024-11-18 11:23
垂直是两条线的关系,一条直线只有正交(竖直或水平)和非正交(倾斜)
计算直线起点和止点的坐标或坐标 ...
怎么写代码,可以判断图纸里面所有的直线么,找出不是水平和垂直的就是倾斜的直线并着色显示