明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1132|回复: 2

[讨论] 打散多义线

[复制链接]
发表于 2013-12-7 15:11:11 | 显示全部楼层 |阅读模式
本帖最后由 liu22737 于 2013-12-7 16:46 编辑

;;;;打散多义线 ----lsx.2013.12
;调用方法:(py_ln1(car(entsel)))
(defun py_ln1(a1 / a2 p1 pt i a_last ssa)
(setq a2(entget a1)p1(assoc 10 a2)i 0 a_last(entlast)ssa(ssadd))
(while p1(setq pt(cons(cdr p1)pt)a2(cdr(member p1 a2))p1(assoc 10 a2)));while
(setq pt(reverse pt)ssa(ssadd a1 ssa))
(repeat(-(length pt)1)(setq i(1+ i))(command"break"(entlast)"non"(trans(nth i pt)0 1)(trans(nth i pt)0 1)))
(while(setq a_last(entnext a_last))(setq ssa(ssadd a_last ssa)));while
);end
;;----------------
;;;;打散多义线 ----lsx.2013.12
;调用方法:(py_ln(car(entsel)))
(defun py_ln(a1/  a2 pt b1 b210  b70 n a_last lst1 lst2 b4 ssa)
;(defun py_210(pt b210 / )(if(< b210 0)(setq pt(cons 10(list(- 0(cadr pt))(caddr pt)))))pt);
  (setq a2(entget a1)pt(assoc 10 a2)b210(last(assoc 210 a2))b70(cdr(assoc 70 a2))
b1(cdr(member pt(reverse a2)))
b1(foreach n(list(assoc 5 b1)(assoc -1 b1)(assoc 66 b1)(assoc 90 b1)(assoc 70 b1))
  (setq b1(vl-remove n b1)));foreach
b1(cons'(70 . 0)(cons(cons 90 2)b1))
i 0 lst1 nil lst2 nil ssa(ssadd));setq
  (if(< b210 0)
     (while pt(setq a2(member pt a2)a2(cdr a2)lst1(cons(cons 10(list(- 0(cadr pt))(caddr pt)))lst1)pt(assoc 10 a2))
(while(member(car(setq b4(car a2)))'( 40 41 42))(setq lst1(cons b4 lst1)a2(cdr a2)));while
(setq lst2(cons lst1 lst2)lst1 nil)
       );while
     (while pt(setq a2(member pt a2)a2(cdr a2)lst1(cons pt lst1)pt(assoc 10 a2))
(while(member(car(setq b4(car a2)))'( 40 41 42))(setq lst1(cons b4 lst1)a2(cdr a2)));while
(setq lst2(cons lst1 lst2)lst1 nil)
      );while
    );if b210
  (redraw a1 2)
  (repeat(1-(length lst2))
(entmake(reverse(append(nth i lst2)(append(nth(1+ i)lst2)b1))))
(setq ssa(ssadd(entlast)ssa)i(1+ i))
   );repeat
  (if(= b70 1)(progn
(entmake(reverse(append(reverse(cons(last(last lst2))(cdr(reverse(car lst2)))))
   (append(car lst2)  b1))))
(setq ssa(ssadd(entlast)ssa))
    ));if b70
);end
发表于 2013-12-7 15:59:04 | 显示全部楼层
  1. (defun py_ln(a1/  a2 pt b1 b210  b70 n a_last lst1 lst2 b4 ssa)
-->
  1. (defun py_ln(a1 /  a2 pt b1 b210  b70 n a_last lst1 lst2 b4 ssa)
----
第一段的osmode建议改成
  1. ;;;;打散多义线 ----lsx.2013.12
  2. ;调用方法:(py_ln1(car(entsel)))
  3. (defun py_ln1(a1 / a2 p1 pt i a_last ssa old_os)
  4.   (setq old_os(getvar "osmode"))
  5. (setvar "osmode" 0)
  6. (setq a2(entget a1)p1(assoc 10 a2)i 0 a_last(entlast)ssa(ssadd))
  7. (while p1(setq pt(cons(cdr p1)pt)a2(cdr(member p1 a2))p1(assoc 10 a2)));while
  8. (setq pt(reverse pt)ssa(ssadd a1 ssa))
  9. (repeat(-(length pt)1)(setq i(1+ i))(command"break"(entlast)(trans(nth i pt)0 1)(trans(nth i pt)0 1)))
  10. (setvar "osmode" old_os)
  11. (while(setq a_last(entnext a_last))(setq ssa(ssadd a_last ssa)));while
  12. )
关于osmode还有更好的方式一会找一下。

发表于 2013-12-7 16:02:06 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 13:53 , Processed in 0.178835 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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