明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1767|回复: 5

[提问] 关于修改多线段顶点表

[复制链接]
发表于 2017-12-13 18:24:09 | 显示全部楼层 |阅读模式
3明经币
需求以下功能职:
框选闭合多线段(数量2000以上)
修改全部顶点表的座标精度:
如XXX.XXXXXXXX 更新为XXX.XXX
    YYY.YYYYYYYY更新为YYY.YYY

子函数都找好了。。无奈太久没玩LISP。对不起大家的教导了
以下子程序摘自 自贡黄明儒




  1. ;;164.35 [功能] 多段线修改顶点 By 自贡黄明儒
  2. ;;示例(HH:ModifyVertex (car(setq en(entsel))) (cadr en) (getpoint))
  3. (defun HH:ModifyVertex (en pt newPt / ENT L1 L2 NPT P P10)
  4.   (setq p (HH:PickClosePt en pt))
  5.   (setq p10 (list 10 (car p) (cadr p)))
  6.   (setq ent (entget en))
  7.   (setq L2 (cdr (member p10 ent)))
  8.   (setq L1 (reverse (cdr (member p10 (reverse ent)))))
  9.   (setq Npt (list (list 10 (car newPt) (cadr newPt))))
  10.   (entmod (append L1 Npt L2))
  11. )
  12. ;;(HH:ModifyVertex1 (car(setq en(entsel))) (cadr en)) By 自贡黄明儒
  13. (defun HH:ModifyVertex1        (en p / ENT GR L1 L2 NPT P10)
  14.   (setq ent (entget en))
  15.   (setq pt (HH:PickClosePt en p))
  16.   (setq p10 (list 10 (car pt) (cadr pt)))
  17.   (setq L2 (cdr (member p10 ent)))
  18.   (setq L1 (reverse (cdr (member p10 (reverse ent)))))
  19.   (while (and (setq gr (grread 5)) (= (car gr) 5))
  20.     (setq Npt (list (list 10 (car (cadr gr)) (cadr (cadr gr)))))
  21.     (entmod (append L1 Npt L2))
  22.   )
  23. )


  24. ;-----------------------------------------------------


  25. ;;164.3 [功能] 多段线端点列表 By 自贡黄明儒
  26. ;;示例(HH:PtLists (car (entsel)))
  27. (defun HH:PtLists (en)
  28.   (mapcar 'cdr
  29.           (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget en))
  30.   )
  31. )





"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2017-12-13 18:29:21 | 显示全部楼层

看看是什么
回复

使用道具 举报

发表于 2017-12-13 20:29:26 | 显示全部楼层
  1. (defun c:fix (/ dxf e ent i ss)

  2.   (defun fixpoint (p n / div)
  3.     (setq div (expt 10. n))
  4.     (mapcar '(lambda (e) (/ (fix (* div e)) div)) p)
  5.   )

  6.   (defun fixdxf        (dxf)
  7.     (setq dxf
  8.            (mapcar
  9.              '(lambda (e)
  10.                 (if (= (car e) 10)
  11.                   (cons 10 (fixpoint (cdr e) 3))
  12.                   e
  13.                 )
  14.               )
  15.              dxf
  16.            )
  17.     )
  18.     (entmod dxf)
  19.   )

  20.   (setq ss (ssget '((0 . "LWPOLYLINE") (70 . 1))))
  21.   (if ss
  22.     (progn

  23.       (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))

  24.       (repeat (setq i (sslength ss))
  25.         (setq ent (ssname ss (setq i (1- i)))
  26.               dxf (entget ent)
  27.         )
  28.         (fixdxf dxf)
  29.       )

  30.       (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
  31.     )
  32.   )
  33.   (princ)
  34. )
回复

使用道具 举报

发表于 2017-12-14 09:05:26 | 显示全部楼层
本帖最后由 llsheng_73 于 2017-12-14 11:06 编辑

  1. (defun fixxy(e n / a)
  2.   (entmod(reverse(foreach x(entget e)
  3.      (setq a(cons(if(member(car x)'(10 11 12 13 14))
  4.      (cons(car x)(mapcar'(lambda(x)(- x(rem x n)))(cdr x)))x)a))))))
  5. (defun c:t1(/ e n)
  6.   (setq n(getreal"坐标精度小数位<3>:")
  7. n(if(>= n 0)n 3)
  8. n(expt 10.(- n))
  9. e(princ"\n"))
  10.   (while(progn(prompt"\r选择多段线")
  11.   (setq e(ssget":E:S"'((0 . "lwpolyline")))))
  12.     (fixxy(ssname e 0)n))
  13.   (princ))
  14. (defun c:t2(/ e n i)
  15.   (setq n(getreal"坐标精度小数位<3>:")
  16. n(if(>= n 0)n 3)
  17. n(expt 10.(- n))
  18. e(princ"\选择多段线")
  19. e(ssget))
  20.   (if e(repeat(setq i(sslength e))
  21.   (setq i(1- i))
  22.   (fixxy(ssname e i)n))))
回复

使用道具 举报

 楼主| 发表于 2017-12-14 11:11:02 | 显示全部楼层

谢谢大师出手相助。。。。。。。
回复

使用道具 举报

 楼主| 发表于 2017-12-14 11:11:35 | 显示全部楼层

谢谢大师出手相助
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-1-3 03:35 , Processed in 0.212639 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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