明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4690|回复: 18

无聊源码:多义线局部线段拷贝,偏移程序v1.0-----------lxx.2004.

  [复制链接]
发表于 2011-5-10 23:55 | 显示全部楼层 |阅读模式
老程序,呷一口咖啡,追忆往事不堪回首明月中嫦娥

  1. ;; (plncp eplst)(c:plncp)(plnff eplst)(c:plnff) = 多义线局部线段拷贝,偏移程序v1.0-----------lxx.2004.7.30
  2. (vl-load-com)
  3. (alert "\n 多义线局部线段拷贝,偏移程序v1.0
  4.         \n-------梦断江南.2004.7.30--------\n
  5.         \n(plncp eplst) = 拷贝多义线单段线段
  6.         \nc:plc = 拷贝多义线局部线段并连接
  7.         \n(plnff eplst) = 偏移多义线单段线段
  8.         \nc:plf = 偏移多义线局部线段并连接
  9.        ")
  10. ;;/////////////////////////////////******拷贝多义线局部线段*****/////////////////////////////////////;;
  11. ;| (plncp eplst) = 拷贝多义线单段线段------------ok!!!------------------lxx.2004.7.29
  12. 说明: 1.支持polyline及lwpolyline. 2.仅可拷贝单段.
  13. 参数: eplst = (entsel)返回的表.必须选中多义线!
  14. 返回: (list eplst p2 (distance p p2) el)
  15. 测试: (plncp (entsel))
  16. |;
  17. (defun plncp (eplst / e p1 p ent el el0  k seq plx plx2 p2)
  18.   (setq e  (car eplst)
  19. p1 (cadr eplst)
  20. p  (vlax-curve-getclosestpointto e p1);;确保取点.
  21.         ent(entget e))
  22.   (if (= "LWPOLYLINE" (cdr(assoc 0 ent))) ;;转为旧式pl格式.
  23.     (progn
  24.       (vl-cmdf "_.convertpoly" "h" e "")
  25.       (setq eL (entlast) el0 el ent (entget el) k T)
  26.     )
  27.     (setq el e el0 e)
  28.   )
  29.   (while (/= "SEQEND" (cdr(assoc 0 (setq seq (entget(setq el (entnext el))))))));;取seqend段.
  30.   (setq ent (subst (cons 70 0) (assoc 70 ent) ent) ;;改为不封闭.
  31.         plx (entget (car(nentselp p1)));;取点中段的实体表.
  32.        plx2 (entget(entnext (cdr(assoc -1 plx)))));;下一个.
  33.   (if (equal seq plx2)(setq plx2 (entget (entnext el0))));;如果是闭合段,下一个取pl线第一段.
  34.   (mapcar 'entmakex(mapcar '(lambda (y) (vl-remove-if '(lambda(x)(member (car x) '(-1 5 -2))) y))(list ent plx plx2 seq)));;生成新的pl段.
  35.   ;(if k (entdel el0));;删除多余实体.
  36.   (vl-cmdf "_.move" (setq el (entlast)) "" p pause)
  37.   (if (equal (setq p2 (getvar "lastpoint")) p 1e-4)
  38.     (progn (entdel el) nil)
  39.     (list eplst p2 (distance p p2) el)
  40.   )
  41. )
  42. ;;;;;;;;;;;;;;
  43. ;| plncp = 拷贝多义线局部线段并连接. -ok!!!------------------lxx.2004.7.30
  44. |;
  45. (defun c:plc (/ ss a b lst dis)
  46.   (setq ss (ssadd))
  47.   (while (setq a (entsel))
  48.     (if (setq b (plncp a))(setq lst (cons b lst)))
  49.   )
  50.   (mapcar '(lambda(x)(ssadd (last x) ss)) lst)
  51.   (setq dis (apply 'max (mapcar '(lambda(x)(nth 2 x)) lst)))
  52.   (vl-cmdf "_.Pedit" "m" ss "" "J" (* 2 dis) "")
  53. )
  54. ;;/////////////////////////////////******以下是偏移多义线局部线段*****/////////////////////////////////////;;
  55. ;| (plnff eplst) = 偏移多义线单段线段------------ok!!!------------------lxx.2004.7.29
  56. 说明: 1.支持polyline及lwpolyline. 2.仅可偏移单段.
  57. 参数: eplst = (entsel)返回的表.必须选中多义线!
  58. 返回: (list eplst p2 (distance p p2) el)
  59. 测试: (plnff (entsel))
  60. |;
  61. (defun plnff (eplst / e p1 p ent el el0  k seq plx plx2 p2 pt d)
  62.   (setq e  (car eplst)
  63. p1 (cadr eplst)
  64. p  (vlax-curve-getclosestpointto e p1);;确保取点.
  65.         ent(entget e))
  66.   (if (= "LWPOLYLINE" (cdr(assoc 0 ent))) ;;转为旧式pl格式.
  67.     (progn
  68.       (vl-cmdf "_.convertpoly" "h" e "")
  69.       (setq eL (entlast) el0 el ent (entget el) k T)
  70.     )
  71.     (setq el e el0 e)
  72.   )
  73.   (while (/= "SEQEND" (cdr(assoc 0 (setq seq (entget(setq el (entnext el))))))));;取seqend段.
  74.   (setq ent (subst (cons 70 0) (assoc 70 ent) ent) ;;改为不封闭.
  75.         plx (entget (car(nentselp p1)));;取点中段的实体表.
  76.        plx2 (entget(entnext (cdr(assoc -1 plx)))));;下一个.
  77.   (if (equal seq plx2)(setq plx2 (entget (entnext el0))));;如果是闭合段,下一个取pl线第一段.
  78.   (mapcar 'entmakex(mapcar '(lambda (y) (vl-remove-if '(lambda(x)(member (car x) '(-1 5 -2))) y))(list ent plx plx2 seq)));;生成新的pl段.
  79.   ;(if k (entdel el0));;删除多余实体.
  80.   (setq pt (getpoint p "\n偏移方向及距离<输入数字or点取>:")
  81. d  (distance p pt)
  82. el (entlast))
  83.   (vl-cmdf "_.offset" d (list el p) pt "")
  84.   ;(while (/= 0 (getvar "cmdactive")) (vl-cmdf pause))
  85.   (entdel el)
  86.   (if (equal el (entlast)) nil (list eplst d (entlast)))
  87. )
  88. ;(setq eplst (entsel))
  89. ;;;;;;;;;;;;;;
  90. ;| plnff = 偏移多义线局部线段并连接. -ok!!!------------------lxx.2004.7.30
  91. |;
  92. (defun c:plf (/ ss a b lst dis)
  93.   (setq ss (ssadd))
  94.   (while (setq a (entsel))
  95.     (if (setq b (plnff a))(setq lst (cons b lst)))
  96.   )
  97.   (mapcar '(lambda(x)(ssadd (last x) ss)) lst)
  98.   (setq dis (apply 'max (mapcar '(lambda(x)(nth 1 x)) lst)))
  99.   (vl-cmdf "_.Pedit" "m" ss "" "J" (* 2 dis) "")
  100. )


评分

参与人数 1金钱 +5 收起 理由
lohas1118 + 5 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-5-11 06:29 | 显示全部楼层
回复 狂刀lxx 的帖子

谢谢 狂刀 大侠 一挥手 劈出了这么多把 锋利的刀,刀刀不平常

多年来一直在您的代码中学到许多睿智的编程思路。

追忆往事不堪回首明月中嫦娥.. 嘿嘿 好奇中

发表于 2011-5-11 07:19 | 显示全部楼层
支持,收藏程序。这么晚了少喝咖啡,
发表于 2011-5-11 08:03 | 显示全部楼层
收藏了
下来看看学习学习,慢慢领会
谢谢楼主的分享
发表于 2011-5-11 08:36 | 显示全部楼层
收藏慢慢看!!
謝謝 無私的分享
发表于 2011-5-11 08:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2011-5-12 20:32 | 显示全部楼层
狂刀哥大源码大奉送,多谢了,努力学习lisp
发表于 2011-11-9 09:42 | 显示全部楼层
支持,收藏程序。
发表于 2011-11-9 11:35 | 显示全部楼层
不错的程序,支持源码共享
发表于 2012-8-23 14:50 | 显示全部楼层
支持源码共享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-11 22:36 , Processed in 0.145972 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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