qd001 发表于 2024-11-17 23:34:49

一条或者多条直线是垂直或者水平,对于不是垂直或者水平的,倾斜的直线修改其颜色

本帖最后由 qd001 于 2024-11-19 16:21 编辑

有没有可以实现图纸里直线与直线垂直和水平关系检查功能的,框选2条或以上直线,判断一条或者多条直线是垂直或者水平,对于不是垂直或者水平的,倾斜的直线修改其颜色特别显示

xyp1964 发表于 2024-11-19 20:04:50

本帖最后由 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-18 11:23:05

本帖最后由 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))))




如果当时0809 发表于 2024-11-19 16:25:37

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)
)

你有种再说一遍 发表于 2024-11-18 00:24:06

让我想起来高版本的直线上下差0.1是看不出来的,
而低版本可以看到折了一下

自贡黄明儒 发表于 2024-11-18 07:23:46

用inters 可以判断

帝都划水王 发表于 2024-11-18 10:06:21

属性看始终点坐标?

gzcsun 发表于 2024-11-18 10:41:43

你有种再说一遍 发表于 2024-11-18 00:24
让我想起来高版本的直线上下差0.1是看不出来的,
而低版本可以看到折了一下

是因为低版本显示差,高版本设置显示差时一样可以看到折了。

你有种再说一遍 发表于 2024-11-18 13:41:44

gzcsun 发表于 2024-11-18 10:41
是因为低版本显示差,高版本设置显示差时一样可以看到折了。

不觉得这是显示策略的不同而已嘛?
为什么你总会想到差不差的点上面,而且不觉得影响用户才是差吗

如果当时0809 发表于 2024-11-19 09:43:28

用两直线单位向量叉乘可以判断平行和垂直,绝对值等于0是平行,绝对值等于1是垂直

qd001 发表于 2024-11-19 14:19:56

如果当时0809 发表于 2024-11-19 09:43
用两直线单位向量叉乘可以判断平行和垂直,绝对值等于0是平行,绝对值等于1是垂直

怎么写代码,可以判断图纸里面所有的直线么

qd001 发表于 2024-11-19 14:21:31

llsheng_73 发表于 2024-11-18 11:23
垂直是两条线的关系,一条直线只有正交(竖直或水平)和非正交(倾斜)
计算直线起点和止点的坐标或坐标 ...

怎么写代码,可以判断图纸里面所有的直线么,找出不是水平和垂直的就是倾斜的直线并着色显示
页: [1] 2 3 4
查看完整版本: 一条或者多条直线是垂直或者水平,对于不是垂直或者水平的,倾斜的直线修改其颜色