明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1400|回复: 4

[源码] 提取点/线坐标

[复制链接]
发表于 2016-9-23 17:40:05 | 显示全部楼层 |阅读模式
写了个提取点/线坐标的Lisp程序,还没有特别完善,先在这分享大家,应该可以直接复制使用
(defun c:ZBTQ()
(setq i 0 m 0  yxz nil Boint nil )
(setq S(getint "\n选择模式(1)点(2)线:"))
(setq ss (ssget))
(setq OF(open(getfiled "文件保存为" "C:/users/administrator/desktop/" "dat" 1) "W"))
(setq n (sslength ss));选择集
(cond
      ((= S 1)
       (repeat n
             (setq spt (ssname ss i))
             (setq ept (entget spt))
             (if (= (cdr(assoc 0 ept)) "POINT")
               (progn
                     (setq yxz(cdr(assoc 10 ept)))
                     (setq y(nth 0 yxz))
                     (setq x(nth 1 yxz))
                     (setq z(nth 2 yxz))
                     (setq Boint(append Boint (list(list y x z))));目的是先将坐标数据统一放置一个表,方便删除重复项
               )
             )
             (setq i (+ 1 i))
       )      
      )
      ((= S 2)
       (repeat n
              (setq spt(ssname ss i))
              (setq ept(entget spt))
              (if(= (cdr(assoc 0 ept)) "LWPOLYLINE");二维多段线
                 (progn
                       (foreach zb ept
                               (if(=(car zb) 10)
                                  (progn
                                        (setq y(car(cdr zb)) x(car(cdr(cdr zb))))
                                        (setq Boint(append Boint (list(list y x 0.000))))
                                  )
                               )
                       )
                 )
              )
              (if(=(cdr(assoc 0 ept)) "LINE");直线
                 (progn
                       (setq Spoint(assoc 10 ept) Epoint(assoc 11 ept))
                       (setq y(car(cdr Spoint))  x(car(cdr(cdr Spoint))) z(car(cdr(cdr(cdr Spoint)))))
                       (setq Boint(append Boint (list(list y x z))))
                       (setq y(car(cdr Epoint)) x(car(cdr(cdr Epoint))) z(car(cdr(cdr(cdr Epoint)))))
                       (setq Boint(append Boint (list(list y x z))))
                 )
              )
              (if(=(cdr(assoc 0 ept)) "POLYLINE");多段线                  
                 (progn
                       (setq b 0)
                       (setq Name(vlax-get(vlax-ename->vla-object spt) "ObjectName"))
                       (if(= Name "AcDb2dPolyline")
                          (progn
                            (setq point(vlax-get(vlax-ename->vla-object  spt) "Coordinates") H(vlax-get(vlax-ename->vla-object spt) "Elevation"));将图元转化为vla对象
                               (setq a(/(length point) 3) );顶点数
                               (repeat a
                                     (setq y(nth b point) x(nth (+ 1 b) point))
                                     (setq Boint(append Boint (list(list y x H))))
                                     (setq b(+ 3 b))
                               )
                          )
                        )
                        (if(= Name "AcDb3dPolyline")
                          (progn
                                (setq point(vlax-get(vlax-ename->vla-object spt) "Coordinates"))
                                (setq a(/(length point) 3));定点数
                                (repeat a
                                      (setq y(nth b point) x(nth (+ 1 b) point) z(nth (+ 2 b) point))
                                      (setq Boint(append Boint (list(list y x z))))
                                      (setq b(+ 3 b))
                                )
                          )
                         )
                 )
              )
              (setq i(+ 1 i))
      )
     )
)
  ;删除表中重复坐标
(while Boint
       (setq m(+ 1 m) s(rtos m 2 0))
       (setq y(rtos (car(car Boint)) 2 3) x(rtos (car(cdr(car Boint))) 2 3) z(rtos (car(cdr(cdr(car Boint)))) 2 3))
       (setq syxz(strcat s ",," y "," x "," z))
       (write-line syxz OF)
       (setq Boint(vl-remove (car Boint) Boint))
)   
(close OF)
)

发表于 2016-9-23 20:53:21 | 显示全部楼层
此帖仅作者可见

使用道具 举报

发表于 2016-9-23 21:27:34 | 显示全部楼层
此帖仅作者可见

使用道具 举报

 楼主| 发表于 2016-9-24 09:42:13 | 显示全部楼层
此帖仅作者可见

使用道具 举报

发表于 2019-7-26 14:20:01 | 显示全部楼层
此帖仅作者可见

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-19 04:05 , Processed in 0.146222 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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