明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5699|回复: 18

求画直线相交断己

  [复制链接]
发表于 2012-12-7 17:31:44 | 显示全部楼层 |阅读模式
同一图层  只有 line  线性求可以 输入打断距离  

画 line线时 遇到 同图层line线时 打断自己

请高手指教,求相应教程
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-4-30 15:00:34 | 显示全部楼层

这个可以发下给我吗,很需要
发表于 2019-6-19 08:45:59 | 显示全部楼层
老大能不能做个多段线同样功能的。
发表于 2012-12-7 21:52:55 | 显示全部楼层
  1. (defun c:tt (/ LA P0 PT S PL A)
  2.   (setq la (getvar 'clayer))
  3.   (setq p0 (getpoint "\n第一点:"))
  4.   (while (setq pt (getpoint p0 "\n下一点:"))
  5.     (setq s (ssget "f" (list p0 pt) (list (cons 0 "line") (cons 8 la))))
  6.     (if        s
  7.       
  8.       (progn
  9.         (setq pl (mapcar '(lambda (x) (cadr (cadddr x))) (ssnamex s)))
  10.         (setq a p0)
  11.         (foreach b pl
  12.           (entmake
  13.             (list '(0 . "line")
  14.                   (cons 10 a)
  15.                   (cons 11 b)
  16.             )
  17.           )
  18.           (setq a b)
  19.         )
  20.         (entmake
  21.           (list        '(0 . "line")
  22.                 (cons 10 a)
  23.                 (cons 11 pt)
  24.           )
  25.         )
  26.       )
  27.       (entmake
  28.         (list '(0 . "line")
  29.               (cons 10 p0)
  30.               (cons 11 pt)
  31.         )
  32.       )
  33.     )
  34.     (setq p0 pt)
  35.   )
  36.   (princ)
  37. )

点评

谢谢G版~~不过还少个打断距离~  发表于 2012-12-7 21:55
发表于 2012-12-7 22:01:39 | 显示全部楼层
Gu_xl 发表于 2012-12-7 21:52

输入距离打断,更简单!自己思考吧!

点评

想了几天没想出来。  发表于 2012-12-11 13:07
 楼主| 发表于 2012-12-8 02:09:37 | 显示全部楼层
  1. (defun c:tt (/ LA P0 PT S PL A)
  2. (setq numdd (getint "请输入打断距离:"))
  3.   (setq numdd (/ numdd 2))
  4.   (setq la (getvar 'clayer))
  5.   (setq p0 (getpoint "\n第一点:"))
  6.   (while (setq pt (getpoint p0 "\n下一点:"))
  7.     (setq s (ssget "f" (list p0 pt) (list (cons 0 "line") (cons 8 la))))
  8.     (if        s

  9.       (progn
  10.         (setq pl (mapcar '(lambda (x) (cadr (cadddr x))) (ssnamex s)))
  11.         (setq a p0)
  12.                 (setq jd (angle (list (car p0) (cadr p0)) (list (car pt) (cadr pt)) ))
  13.                 (print jd)
  14.                
  15.                
  16.                
  17.         (foreach b pl
  18.        
  19.                
  20.           (entmake
  21.             (list '(0 . "line")
  22.                   (cons 10 a)
  23.                   (cons 11 b)
  24.             )
  25.           )
  26.           (setq a b)
  27.         )
  28.                         (setq zd2 (list (+ (car a) (* (cos jd) numdd)) (+ (cadr a) (* (sin jd) numdd)) (caddr a)) )
  29.         (entmake
  30.           (list        '(0 . "line")
  31.                 (cons 10 zd2)
  32.                 (cons 11 pt)
  33.           )
  34.         )
  35.       )
  36.       (entmake
  37.         (list '(0 . "line")
  38.               (cons 10 p0)
  39.               (cons 11 pt)
  40.         )
  41.       )
  42.     )
  43.     (setq p0 pt)
  44.   )
  45.   (princ)
  46. )



暂时做会做 打断一边的。这切做得不好。
不懂的地方很多。(cons 0 "line") (cons 8 la)
是什么意思? (list '(0 . "line")
              (cons 10 p0)
              (cons 11 pt)
        )
查了下 cons是AutoLISP的基本表构造函数。
实例
    (cons 'a' (b c d))    ; ; ; 返回(A B C D)

请问 看什么开发手册呢



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2012-12-8 02:14:47 | 显示全部楼层
本帖最后由 weiqi 于 2012-12-8 02:16 编辑

双边的话 交点处 会多出 一条线且多个交点的时候,只断了 最后一个的距离。
  1. (defun c:tt (/ LA P0 PT S PL A)
  2. (setq numdd (getint "请输入打断距离:"))
  3.   (setq numdd (/ numdd 2))
  4.   (setq la (getvar 'clayer))
  5.   (setq p0 (getpoint "\n第一点:"))
  6.   (while (setq pt (getpoint p0 "\n下一点:"))
  7.     (setq s (ssget "f" (list p0 pt) (list (cons 0 "line") (cons 8 la))))
  8.     (if        s

  9.       (progn
  10.         (setq pl (mapcar '(lambda (x) (cadr (cadddr x))) (ssnamex s)))
  11.         (setq a p0)
  12.                 (setq jd (angle (list (car p0) (cadr p0)) (list (car pt) (cadr pt)) ))
  13.                 (print jd)
  14.                
  15.                
  16.                
  17.         (foreach b pl
  18.          (setq zd1 (list (- (car b) (* (cos jd) numdd)) (- (cadr b) (* (sin jd) numdd)) (caddr b)) );;中点第一点
  19.                
  20.           (entmake
  21.             (list '(0 . "line")
  22.                   (cons 10 a)
  23.                   (cons 11 zd1)
  24.             )
  25.           )
  26.           (setq a b)
  27.         )
  28.           (setq zd2 (list (+ (car a) (* (cos jd) numdd)) (+ (cadr a) (* (sin jd) numdd)) (caddr a)) );;中点第二点
  29.         (entmake
  30.           (list        '(0 . "line")
  31.                 (cons 10 zd2)
  32.                 (cons 11 pt)
  33.           )
  34.         )
  35.       )
  36.       (entmake
  37.         (list '(0 . "line")
  38.               (cons 10 p0)
  39.               (cons 11 pt)
  40.         )
  41.       )
  42.     )
  43.     (setq p0 pt)
  44.   )
  45.   (princ)
  46. )






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2012-12-8 02:52:52 | 显示全部楼层
我基础 太差了,望高手指点指点。
发表于 2012-12-8 06:59:26 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

开玩笑! 院长是学艺术表演出身啊。  发表于 2012-12-8 11:12
太帅了 院长~  发表于 2012-12-8 08:44
发表于 2012-12-11 13:45:23 | 显示全部楼层
Gu_xl 发表于 2012-12-7 21:52

  1. (defun c:tt  (/ LA P0 PT S PL A d)
  2.   (setq d (getdist "\n打断距离<0>:"))
  3.   (if (null d)
  4.     (setq d 0))
  5.   (setq d (* 0.5 d))
  6.   (setq la (getvar 'clayer))
  7.   (setq p0 (getpoint "\n第一点:"))
  8.   (while (setq pt (getpoint p0 "\n下一点:"))
  9.     (setq s
  10.            (ssget "f" (list p0 pt) (list (cons 0 "line") (cons 8 la))))
  11.     (if        s

  12.       (progn
  13.         (setq pl
  14.                (mapcar '(lambda (x) (cadr (cadddr x))) (ssnamex s)))
  15.         (setq a p0)
  16.         (foreach b  pl
  17.           (if (not (equal p0 b (* 0.1 d)))
  18.             (progn
  19.               (entmake
  20.                 (list '(0 . "line")
  21.                       (cons 10 a)
  22.                       (cons 11 (polar b (angle pt p0) d))
  23.                       )
  24.                 )
  25.               (setq a (polar b (angle p0 pt) d))
  26.               )
  27.             )
  28.           )
  29.         (entmake
  30.           (list        '(0 . "line")
  31.                 (cons 10 a)
  32.                 (cons 11 pt)
  33.                 )
  34.           )
  35.         )
  36.       (entmake
  37.         (list '(0 . "line")
  38.               (cons 10 p0)
  39.               (cons 11 pt)
  40.               )
  41.         )
  42.       )
  43.     (setq p0 pt)
  44.     )
  45.   (princ)
  46.   )

点评

谢谢G版, (setq a (polar b (angle p0 pt) d)) 得用IF,刚发了个悬赏你就发了。画电气太有用了  发表于 2012-12-11 14:46
发表于 2013-9-4 16:49:38 | 显示全部楼层
很好的命令  收藏了先
发表于 2013-9-4 19:02:52 | 显示全部楼层
下载下来,以备需要时使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 21:52 , Processed in 0.211031 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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