找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 844|回复: 7

[每日一码] 读取pline中的点表

[复制链接]

已领礼包: 267个

财富等级: 日进斗金

发表于 2020-2-21 08:45:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
(defun nl_pl_zb( ent /
                                ent ptb class_ent ent_nx i
                                )       
        (setq ptb '())
    ; (setq ent (car (entsel "\n请选择pline:")))
        ;;获取其中的组码性质是什么!"LWPOLYLINE"则可进行反向,"POLYLINE".
        (setq class_ent (cdr (assoc 0 (entget ent))))
        (if  (or (= class_ent "LWPOLYLINE")  (= class_ent "POLYLINE"))
                (progn
                        ;;POLYLINE"
                        (if (= class_ent "POLYLINE")
                                (progn
                                        (if (entnext ent)
                                                (progn
                                                        (while (setq ent_nx (entnext ent))
                                                                (if (= (cdr (assoc 0 (entget ent_nx))) "VERTEX")
                                                                        (progn
                                                                                ;;将老式的"POLYLINE"组码加入
                                                                                (setq ptb (append ptb (list (cdr (assoc 10 (entget ent_nx))))))
                                                                       
                                                                        )
                                                                )
                                                                ;;下一个对象
                                                                (setq ent ent_nx)
                                                        )
                                                )
                                        )
                                )
                        )
                        ;;"LWPOLYLINE"
                        (if (= class_ent "LWPOLYLINE")
                                (progn
                                        (setq i 1)
                                        (setq  ptb
                                                (vl-remove 'nil
                                                        (mapcar '(lambda(x)(if (= (car x) 10)  (cdr x) ))
                                                        (entget ent)
                                                        )
                                                )
                                        )                                       
                                )
                        )
                )
                ;;--else
                (progn
                        (print "所选线段并非二维多段线!")
                        (exit)
                )
        )
        (setq ptb ptb)
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 511个

财富等级: 财运亨通

发表于 2020-2-23 10:51:56 | 显示全部楼层
;给出另一种方法
;获取 LWPOLYLINE POLYLINE 端点列表
(defun getcoor  (ent / type_ent coor)
   (cond ((entget ent)
          (setq type_ent (cdr (assoc 0 (entget ent))))
          (print)
          (cond ((member type_ent '("LWPOLYLINE" "POLYLINE"))
                 (setq coor (vlax-safearray->list
                               (vlax-variant-value
                                  (vla-get-Coordinates (vlax-ename->vla-object ent)))))
                 (if (= type_ent "LWPOLYLINE")
                    (vl-remove-if-not '(lambda(x) (= (rem (vl-position x (mapcar 'list coor (cdr coor))) 2) 0))
                                      (mapcar 'list coor (cdr coor)))
                    (vl-remove-if-not '(lambda(x) (= (rem (vl-position x (mapcar 'list coor (cdr coor) (cddr coor))) 3) 0))
                                      (mapcar 'list coor (cdr coor) (cddr coor)))))
                (t (prompt "\n所选对象不是*POLYLINE!")(princ))))))

点评

这种比上面要慢点.  详情 回复 发表于 2020-2-23 12:03
这种比上面要慢点.  详情 回复 发表于 2020-2-23 12:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

发表于 2020-2-23 12:01:32 | 显示全部楼层
pxr201419 发表于 2020-2-23 10:51
;给出另一种方法
;获取 LWPOLYLINE POLYLINE 端点列表
(defun getcoor  (ent / type_ent coor)

这种比上面要慢点.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

发表于 2020-2-23 12:03:49 | 显示全部楼层
pxr201419 发表于 2020-2-23 10:51
;给出另一种方法
;获取 LWPOLYLINE POLYLINE 端点列表
(defun getcoor  (ent / type_ent coor)

这种比上面要慢点.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5295个

财富等级: 富甲天下

发表于 2020-2-23 14:24:18 | 显示全部楼层
这个代码好,用起来方便多了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-2-23 15:50:45 | 显示全部楼层
本帖最后由 Lisphk 于 2020-2-23 16:01 编辑

帮你从新组织下代码
  1. (defun nl_pl_zb        (ent / ent ptb class_ent ed)
  2.   (setq ptb '())
  3.   (setq class_ent (cdr (assoc 0 (setq ed (entget ent)))))
  4.   (cond
  5.     ((= class_ent "LWPOLYLINE")
  6.      (setq ptb
  7.             (vl-remove 'nil
  8.                        (mapcar '(lambda        (x)
  9.                                   (if (= (car x) 10)
  10.                                     (cdr x)
  11.                                   )
  12.                                 )
  13.                                ed
  14.                        )
  15.             )
  16.      )
  17.     )
  18.     ((= class_ent "POLYLINE")
  19.      (while (and (setq ent (entnext ent))
  20.                  (= (cdr (assoc 0 (setq ed (entget ent)))) "VERTEX")
  21.             )
  22.        (setq
  23.          ptb (cons (cdr (assoc 10 ed)) ptb)
  24.        )
  25.      )
  26.      (setq ptb (reverse ptb))
  27.     )
  28.   )
  29.   ptb
  30. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 267个

财富等级: 日进斗金

 楼主| 发表于 2020-2-27 09:31:53 | 显示全部楼层
谢谢楼上各位大师的帮助。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 676个

财富等级: 财运亨通

发表于 2020-5-29 17:03:12 | 显示全部楼层
不错啊,纯lisp的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-14 01:45 , Processed in 0.234698 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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