明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3016|回复: 24

[提问] 求一个能实现这个功能的LISP,我手都要弄断了....

[复制链接]
发表于 2014-2-26 09:08:42 | 显示全部楼层 |阅读模式

我现在是用多段线打断以后再一个个连接,实在太慢了,求大侠给个办法吧,

本帖子中包含更多资源

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

x

点评

你这图是用在什么地方啊?感觉平时看不见啊???  发表于 2014-3-1 13:34
发表于 2014-2-26 10:20:45 | 显示全部楼层
本帖最后由 Gu_xl 于 2014-2-28 09:19 编辑

  1. ;;(c:tt)
  2. (defun c:tt (/ S1 S2 EL        P1 P2 PA PB PC PD ANG VEC N P3 P4 PL L1        L2 E1 E2)
  3.   (princ "\n选择要打断的线:")
  4.   (setq s1 (ssget '((0 . "line"))))
  5.   (if (not s1)
  6.     (exit)
  7.   )
  8.   (princ "\n选择分割线:")
  9.   (setq s2 (ssget '((0 . "line"))))
  10.   (if (or (not s2)
  11.           (/= 2 (sslength s2))
  12.       )
  13.     (exit)
  14.   )
  15.   (setq        el (entget (ssname s1 0))
  16.         p1 (cdr (assoc 10 el))
  17.         p2 (cdr (assoc 11 el))
  18.         el (entget (setq e1 (ssname s2 0)))
  19.         pa (cdr (assoc 10 el))
  20.         pb (cdr (assoc 11 el))
  21.         el (entget (setq e2 (ssname s2 1)))
  22.         pc (cdr (assoc 10 el))
  23.         pd (cdr (assoc 11 el))
  24.   )
  25.   (setq        ang (angle p1 p2)
  26.         vec (list (cos ang) (sin ang)  0)
  27.   )
  28.   (entdel e1)
  29.   (entdel e2)
  30.   (repeat (setq n (sslength s1))
  31.     (setq el (entget (setq e1 (ssname s1 (setq n (1- n)))))
  32.           p1 (trans (cdr (assoc 10 el)) 0 vec)
  33.           p2 (trans (cdr (assoc 11 el)) 0 vec)
  34.           p3 (trans
  35.                (inters (cdr (assoc 10 el)) (cdr (assoc 11 el)) pa pb nil)
  36.                0
  37.                vec
  38.              )
  39.           p4 (trans
  40.                (inters (cdr (assoc 10 el)) (cdr (assoc 11 el)) pc pd nil)
  41.                0
  42.                vec
  43.              )
  44.     )
  45.     (entdel e1)
  46.     (setq pl (cons (vl-sort (list p1 p2 p3 p4)
  47.                             '(lambda (a b) (< (caddr a) (caddr b)))
  48.                    )
  49.                    pl
  50.              )
  51.     )
  52.   )
  53. (setq pl (vl-sort pl '(lambda (a b) (> (caadr a) (caadr b)))))
  54.   (while (cadr pl)
  55.     (setq l1 (car pl)
  56.           l2 (cadr pl)
  57.           p1 (car l1)
  58.           p2 (cadr l1)
  59.           p3 (cadr l2)
  60.           p4 (car l2)
  61.     )
  62.     (entmake
  63.       (list '(0 . "LWPOLYLINE")
  64.             '(100 . "AcDbEntity")
  65.             '(100 . "AcDbPolyline")
  66.             '(90 . 4)
  67.             '(70 . 1)
  68.             '(43 . 0.0)
  69.             '(38 . 0.0)
  70.             '(39 . 0.0)
  71.             (cons 10 (trans p1 vec 0))
  72.             '(40 . 0.0)
  73.             '(41 . 0.0)
  74.             '(42 . 0.0)
  75.             (cons 10 (trans p2 vec 0))
  76.             '(40 . 0.0)
  77.             '(41 . 0.0)
  78.             '(42 . 0.0)
  79.             (cons 10 (trans p3 vec 0))
  80.             '(40 . 0.0)
  81.             '(41 . 0.0)
  82.             '(42 . 0.0)
  83.             (cons 10 (trans p4 vec 0))
  84.             '(40 . 0.0)
  85.             '(41 . 0.0)
  86.             '(42 . 0.0)
  87.             '(210 0.0 0.0 1.0)
  88.       )
  89.     )
  90.     (setq p1 (caddr l1)
  91.           p2 (cadddr l1)
  92.           p3 (cadddr l2)
  93.           p4 (caddr l2)
  94.     )
  95.     (entmake
  96.       (list '(0 . "LWPOLYLINE")
  97.             '(100 . "AcDbEntity")
  98.             '(100 . "AcDbPolyline")
  99.             '(90 . 4)
  100.             '(70 . 1)
  101.             '(43 . 0.0)
  102.             '(38 . 0.0)
  103.             '(39 . 0.0)
  104.             (cons 10 (trans p1 vec 0))
  105.             '(40 . 0.0)
  106.             '(41 . 0.0)
  107.             '(42 . 0.0)
  108.             (cons 10 (trans p2 vec 0))
  109.             '(40 . 0.0)
  110.             '(41 . 0.0)
  111.             '(42 . 0.0)
  112.             (cons 10 (trans p3 vec 0))
  113.             '(40 . 0.0)
  114.             '(41 . 0.0)
  115.             '(42 . 0.0)
  116.             (cons 10 (trans p4 vec 0))
  117.             '(40 . 0.0)
  118.             '(41 . 0.0)
  119.             '(42 . 0.0)
  120.             '(210 0.0 0.0 1.0)
  121.       )
  122.     )
  123.     (setq pl (cddr pl))
  124.   )
  125.   (princ)
  126. )

点评

给力给力  发表于 2022-3-31 17:21
回复 支持 1 反对 0

使用道具 举报

发表于 2014-2-28 12:34:11 | 显示全部楼层


本帖子中包含更多资源

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

x

点评

谢谢斑竹啦,已经解决  发表于 2014-2-28 16:11

评分

参与人数 1明经币 +1 收起 理由
999999 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2014-2-26 09:14:52 | 显示全部楼层
程序没有实用性,所以不会有人写。
使用CAD的命令的确有点麻烦,不过还是可以优化的:首先,你在两端画线封闭,然后使用BO命令,每个封闭多义线只要点一下即可,最后再删除不需要的,应该快很多。
发表于 2014-2-26 09:29:14 | 显示全部楼层
把第一条线 设为A1 和我A4 ,两交点为什么A2 A3
就得到(A1 A2 A3 A4 )
类推:第二条线(B1 B2 B3 B4)
N条线(N1 N2 N3 N4)
这就组成数组。
画线的规律是 A1 A2 B2 B1 A1
然后是 A3 A4 B4 B3 A3

发表于 2014-2-26 10:37:25 来自手机 | 显示全部楼层
用面域,差集很容易搞定
发表于 2014-2-26 11:31:38 | 显示全部楼层
Gu_xl 发表于 2014-2-26 10:20

好厉害,这么快完整的程序出来了。大神。
 楼主| 发表于 2014-2-26 12:18:32 | 显示全部楼层
Gu_xl 发表于 2014-2-26 10:20

大侠给个操作办法?  怎么我弄出来是这个样子?

本帖子中包含更多资源

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

x
发表于 2014-2-26 15:03:15 | 显示全部楼层
选择直线的时候,按照顺序来啊

点评

重新下载下程序,不需要按顺序选!  发表于 2014-2-26 15:17
发表于 2014-2-26 15:15:11 | 显示全部楼层
YANGF85 发表于 2014-2-26 12:18
大侠给个操作办法?  怎么我弄出来是这个样子?

重新下载程序再试下!
发表于 2014-2-26 16:53:27 | 显示全部楼层
Gu版,给力!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-25 10:25 , Processed in 0.216127 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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