明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1764|回复: 33

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

[复制链接]
发表于 2024-11-17 23:34:49 | 显示全部楼层 |阅读模式
本帖最后由 qd001 于 2024-11-19 16:21 编辑

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

使用道具 举报

发表于 2024-11-19 20:04:50 | 显示全部楼层
本帖最后由 xyp1964 于 2024-11-19 22:27 编辑

  1. (defun c:tt ()
  2.   (defun xyp-dxf (code e) (cdr (assoc code (entget e))))
  3.   (setq i -1)
  4.   (if (setq ss (ssget '((0 . "LINE"))))
  5.     (while (setq s1 (ssname ss (setq i (1+ i))))
  6.       (setq p1 (xyp-DXF 10 s1)
  7.             p2 (xyp-DXF 11 s1)
  8.       )
  9.       (if (not(or (equal (car p1) (car p2)) (equal (cadr p1) (cadr p2))))
  10.         (vla-put-color (vlax-ename->vla-object s1) 1)
  11.       )
  12.     )
  13.   )
  14.   (princ)
  15. )


  1. (defun c:tt ()
  2.   (setq i -1)
  3.   (if (setq ss (ssget '((0 . "LINE"))))
  4.     (while (setq s1 (ssname ss (setq i (1+ i))))
  5.       (setq s (vlax-curve-getStartPoint s1)
  6.             e (vlax-curve-getEndPoint s1)
  7.       )
  8.       (if (not (or (equal (car s) (car e)1e-3) (equal (cadr s) (cadr e)1e-3)))
  9.         (vla-put-color (vlax-ename->vla-object s1) 1)
  10.       )
  11.     )
  12.   )
  13.   (princ)
  14. )

回复 支持 反对

使用道具 举报

发表于 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)"水平""倾斜"))
  1. (defun c:tt(/ s e en);;;倾斜直线改为红色
  2.   (and(setq s(ssget'((0 . "line"))))
  3.       (repeat(sslength s)
  4.         (setq e(ssname s 0)en(entget e))
  5.         (or(vl-some(function(lambda(a b)(equal a b 1e-8)))(cdr(assoc 10 en))(mapcar'+'(0 0)(cdr(assoc 11 en))))
  6.            (entmod(append en'((62 . 1)))))
  7.         (ssdel e s))))





回复 支持 反对

使用道具 举报

发表于 2024-11-19 16:25:37 | 显示全部楼层

对于垂直和水平的线不处理,其他线改为红色
  1. (defun c:tt (/ ls l n a)
  2.   (setq ls (ssget (list (cons 0 "LINE"))))
  3.   (if (null ls) (exit))
  4.   (setq n 0)
  5.   (repeat (sslength ls)
  6.     (setq l (entget (ssname ls n)))
  7.     (setq a (angle (cdr (assoc 10 l)) (cdr (assoc 11 l))))
  8.     (cond
  9.       ((equal a 0 1e-6) (princ))
  10.       ((equal a (/ PI 2) 1e-6) (princ))
  11.       ((equal a PI 1e-6) (princ))
  12.       ((equal a (/ (* PI 3) 2) 1e-6) (princ))
  13.       (T
  14.        (if (assoc 62 l)
  15.          (entmod (subst (cons 62 1) (assoc 62 l) l))
  16.          (entmod (append l (list (cons 62 1))))
  17.        )
  18.       )
  19.     )
  20.     (setq n (1+ n))
  21.   )
  22.   (princ)
  23. )

点评

都计算角度了,不如继续算角度sin值的绝对值,0水平1垂直。判断分支就少了。  发表于 2024-11-19 19:26
回复 支持 反对

使用道具 举报

发表于 2024-11-18 00:24:06 | 显示全部楼层
让我想起来高版本的直线上下差0.1是看不出来的,
而低版本可以看到折了一下
回复 支持 反对

使用道具 举报

发表于 2024-11-18 07:23:46 | 显示全部楼层
用inters 可以判断
回复 支持 反对

使用道具 举报

发表于 2024-11-18 10:06:21 | 显示全部楼层
属性看始终点坐标?
回复 支持 反对

使用道具 举报

发表于 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
是因为低版本显示差,高版本设置显示差时一样可以看到折了。

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

使用道具 举报

发表于 2024-11-19 09:43:28 | 显示全部楼层
用两直线单位向量叉乘可以判断平行和垂直,绝对值等于0是平行,绝对值等于1是垂直
回复 支持 反对

使用道具 举报

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

怎么写代码,可以判断图纸里面所有的直线么
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-19 14:21:31 | 显示全部楼层
llsheng_73 发表于 2024-11-18 11:23
垂直是两条线的关系,一条直线只有正交(竖直或水平)和非正交(倾斜)
计算直线起点和止点的坐标或坐标 ...

怎么写代码,可以判断图纸里面所有的直线么,找出不是水平和垂直的就是倾斜的直线并着色显示
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-22 05:22 , Processed in 0.164587 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表