明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: fjutcivil

[提问] 这个怎么实现

[复制链接]
发表于 2013-8-28 12:28:52 | 显示全部楼层
本帖最后由 xyp1964 于 2013-8-28 12:45 编辑

  1. ;; 多段线端点打断
  2. (defun c:tt (/ i ss s1 pt)  (CMDLA0)  (setq i -1)  (if (setq ss (ssget '((0 . "*polyLINE"))))    (while (setq s1 (ssname ss (setq i (1+ i))))      (setq ptn        (xyp-get-Vertexs s1 3)            ptn        (cdr ptn)            ptn        (reverse ptn)            ptn        (cdr ptn)      )      (foreach pt ptn        (xyp-breake s1 pt pt)      )    )  )  (CMDLA1))

本帖子中包含更多资源

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

x
发表于 2013-8-28 12:33:00 | 显示全部楼层
xyp1964 发表于 2013-8-28 12:28

看来版主是没理会楼主的意思

点评

纯属理解力问题  发表于 2013-8-28 12:42
发表于 2013-8-28 12:41:26 | 显示全部楼层
本帖最后由 xyp1964 于 2013-8-28 12:44 编辑

  1. ;; 多段线交点打断
  2. (defun c:tt ()
  3.   (CMDLA0)
  4.   (setq i -1)
  5.   (if (setq ss (ssget '((0 . "*polyLINE"))))
  6.     (while (setq s1 (ssname ss (setq i (1+ i))))
  7.       (if (setq ptn (xyp-Get-CurveIntersLengLay s1 3 "DOTE"))
  8.         (foreach pt (reverse ptn)
  9.           (xyp-breake s1 pt pt)
  10.         )
  11.       )
  12.     )
  13.   )
  14.   (CMDLA1)
  15. )

本帖子中包含更多资源

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

x
发表于 2013-8-28 12:52:49 | 显示全部楼层
xyp1964 发表于 2013-8-28 12:41

楼主的意思是打断被压在粗线下面的细实线,我一开始也没看懂,只是楼主在晓东发的帖子说的更容易让人理解罢了。

点评

打断细实线——吃饱了撑的……  发表于 2013-8-28 13:04
 楼主| 发表于 2013-8-28 14:19:16 | 显示全部楼层
xyp1964 发表于 2013-8-28 12:41

你的好像不能用 哪里错了
发表于 2013-8-28 15:25:32 | 显示全部楼层
本帖最后由 ll_j 于 2013-8-29 11:11 编辑
fjutcivil 发表于 2013-8-27 21:35
就是附件那张图纸里面左图达到右图的效果就可以了


应该是你要的,没加出错和undo处理,你自己再看看。
  1. (defun c:tt (/ ss dt pl i en e el)
  2.   (setq ss (ssget '((0 . "*LINE") (8 . "a,DOTE")))    ;选择,图层a和DOTE应根据实际修改
  3.         i  -1
  4.         dt nil
  5.         pl nil
  6.   )
  7.   (repeat (sslength ss)
  8.     (setq i (1+ i))
  9.     (if (and (= (cdr (assoc 8 (entget (setq en (ssname ss i))))) "a")   ;分离墙线,图层a
  10.              (= (cdr (assoc 0 (entget en))) "LWPOLYLINE")  ;线形多段线
  11.         )
  12.       (setq pl (cons en pl))  ;多段线
  13.       (setq dt (cons en dt))  ;轴线
  14.     )
  15.   )
  16.   (setq dt (ll dt '(10 11))   ;构造图元名+端点的轴线表
  17.         pl (ll pl '(10))  ;构造图元名+顶点的墙线表
  18.         el (entlast)   ;最后实体,备用
  19.   )
  20.   (mapcar    ;打断多段线
  21.     '(lambda (x)
  22.        (if (> (length x) 3)
  23.          (progn
  24.            (setq e (list (car x) (cadr x)))
  25.            (mapcar
  26.              '(lambda (y)
  27.                 (command ".break" e "f" y y)
  28.               )
  29.              (cdr (reverse (cdr x)))
  30.            )
  31.          )
  32.        )
  33.      )
  34.     pl
  35.   )
  36.   (while (setq e (entnext el))     ;重新构造多段线表
  37.     (setq pl (cons (list e) pl)
  38.           el e
  39.     )
  40.   )
  41.   (setq pl (mapcar 'car pl)     ;只保留多段线图元名
  42.         pl (mapcar 'cdr (ll pl '(10))) ;只保留多段线顶点
  43.         pl (apply 'append pl)   ;顶点汇总
  44.   )
  45.   (setq dt (mapcar    ;构造轴线相互交叉点表,图元名+起点+端点+交叉点...
  46.              '(lambda (x)
  47.                 (setq tl nil)
  48.                 (mapcar
  49.                   '(lambda (y)
  50.                      (if (setq
  51.                            it (inters (cadr x) (caddr x) (cadr y) (caddr y))
  52.                          )
  53.                        (setq tl (cons it tl))
  54.                      )
  55.                    )
  56.                   dt
  57.                 )
  58.                 (if tl
  59.                   (append x tl)
  60.                   x
  61.                 )
  62.               )
  63.              dt
  64.            )
  65.         dt (mapcar  ;添加多段线在轴线上的顶点
  66.              '(lambda (x)
  67.                 (setq tl nil)
  68.                 (mapcar
  69.                   '(lambda (y)
  70.                      (if (equal (+ (distance y (cadr x))
  71.                                    (distance y (caddr x))
  72.                                 )
  73.                                 (distance (cadr x) (caddr x))
  74.                                 1e-6
  75.                          )
  76.                        (setq tl (cons (append y '(0.0)) tl))
  77.                      )
  78.                    )
  79.                   pl
  80.                 )
  81.                 (if tl
  82.                   (append x tl)
  83.                   x
  84.                 )
  85.               )
  86.              dt
  87.            )
  88.         dt (mapcar     ;特征点排序,除重
  89.              '(lambda (x)
  90.                 (append
  91.                   (list (car x) (cadr x))
  92.                   (su (vl-sort
  93.                         (cddr x)
  94.                         '(lambda (y z)
  95.                            (> (distance (cadr x) y) (distance (cadr x) z))
  96.                          )
  97.                       )
  98.                   )
  99.                 )
  100.               )
  101.              dt
  102.            )
  103.   )
  104.   (mapcar         ;打断
  105.     '(lambda (x)
  106.        (setq e (list (car x) (cadr x)))
  107.        (mapcar
  108.          '(lambda (y)
  109.             (command ".break" e "f" y y)
  110.           )
  111.          (cddr x)
  112.        )
  113.      )
  114.     dt
  115.   )
  116.   (princ)
  117. )


  118. (defun ll (l nl)   ;提取点表
  119.   (mapcar
  120.     '(lambda (x)
  121.        (cons x
  122.              (mapcar 'cdr
  123.                      (vl-remove-if-not
  124.                        '(lambda (y) (member (car y) nl))
  125.                        (entget x)
  126.                      )
  127.              )
  128.        )
  129.      )
  130.     l
  131.   )
  132. )

  133. (defun su (l)   ;点表除重
  134.   (if l
  135.     (cons (car l)
  136.           (su (vl-remove-if
  137.                 '(lambda (x) (equal (distance (car l) x) 0 1e-6))
  138.                 l
  139.               )
  140.           )
  141.     )
  142.   )
  143. )

评分

参与人数 1明经币 +1 金钱 +20 收起 理由
fjutcivil + 1 + 20

查看全部评分

 楼主| 发表于 2013-8-29 10:07:24 | 显示全部楼层
ll_j 发表于 2013-8-28 15:25
应该是你要的,没加出错和undo处理,你自己再看看。

额 我这边怎么运行不了你写的,是不是哪里出错了?还有晓东那边有人回了我个my_wipeout的代码 那个怎么加载呢,前面要写什么?
发表于 2013-8-29 11:15:54 | 显示全部楼层
fjutcivil 发表于 2013-8-29 10:07
额 我这边怎么运行不了你写的,是不是哪里出错了?还有晓东那边有人回了我个my_wipeout的代码 那个怎么加 ...

是我在最前面声明局部变量的时候漏了一个空格,现在改好了。开始写的时候没有声明局部变量,复制粘贴后又增加了声明,结果不小心在/和ss之间漏了一个空格。
 楼主| 发表于 2014-3-29 20:29:29 | 显示全部楼层
ll_j 发表于 2013-8-27 11:14
不是一个专业,不太看懂“PL端点处打断轴线”的意思,可以看看break命令的F选项是否有用。
右面“掏空”的 ...

那个掏空功能还是没找到啊 貌似是消除残影那个 可是没有币!囧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-25 04:25 , Processed in 0.145876 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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