找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2611|回复: 2

[求助] [LISP程序]:求助:用lsp提取lwpline的点坐标

[复制链接]
发表于 2005-8-11 12:26:40 | 显示全部楼层 |阅读模式

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

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

×
有现成的吗?

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

已领礼包: 8156个

财富等级: 富甲天下

发表于 2005-8-11 13:31:39 | 显示全部楼层
code from net by Michael Puckett

;;;(cdrs 10 (entget (car (entsel "\nSelect a polyline: "))))
;;;returns something like this:
;;;((259.943 -252.219) (215.0 -21.0386).... (253.406 41.8621) (215.817
112.115))
;;;Michal Puckett

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

使用道具 举报

发表于 2005-8-12 08:55:25 | 显示全部楼层
这时有一段代码,可供参考(写的时间太久了)
;;==================================================================== ;;       
;将选择的多义线以每行一个坐标点对的形式输出到文件中
;;====================================================================
(defun c:OPL (/ Ss Ts n i Os Ns ent Fh sp Os0 Os1)        ;        08:35 2000-10-13
        (prompt"\n ***** Output Pline(s) *****  08:35 2000-10-13") ;;
        (prompt "\n************* 以填加形式打开文件 ************")
        (setq i (getString "\n 为保存数据,请输入一个文件名(如:D:/TTTT.Dat)===>"))
        (if (= "" i) (setq i "D:/TTTT.Dat"))
        (setq sp (getString "\n 输入一个字符作为数据间的分隔符(如逗号或空格等)"))
        (if (= "" sp) (setq sp " "))
;;        ( print i )                ; 文件名 <--------------
        (setq Fh( open i "a"))

        (setq ss (ssget))                                ; 选择对象
        (setvar "CMDECHO" 0)                        ; 执行过程没有回应
        (setvar "LUPREC" 8)                        ; 设置小数位
        (setq n (sslength ss))
        (setq i 0)
;---------------------------------------------------------------
        (repeat n
            (setq    ent (entget(ssname ss i ))    i (+ i 1))
;;                ( print ent )                ; 显示当前表 <--------------

            (if (= "LWPOLYLINE" (cdr (assoc 0 ent))) ; 取对象名,判断该对象是否是 LWPOLYLINE
            (Progn
;;--------------------------------------------------------
                ( setq Ns (cdr (assoc 90 ent )))                ; 取每条线的总点数
                 ( princ "\n This Line Total Point is ===>")
                ( princ Ns )                ; 显示当前线的总点数 <--------------
;;--------------------------------------------------------
                ( setq Os (cdr (assoc 70 ent )))        ; 取每条线的闭合状态(0不闭合,1闭合)
                (setq Clo 0)                ; 设置非闭合线标致0
                (if (Or (= OS 1) (= OS 129))                 ; 当前线是封闭线
                    (Progn
                        (setq Clo 1)        ; 设置闭合线标致1
                        (setq Ns (+ Ns 1))        ; 当前线的总点数加1 <--------------
                        (princ "  ") (Princ Ns)                ; 显示当前线的总点数 <--------------
                    )                                ; 用于在线尾增加线的首点,人为进行闭合。
                )        ;当前线是封闭线,线节点数加1。
;;--------------------------------------------------------
                ( setq Os ( assoc 10 ent ))                ; 取第一点子表
                ( setq Ts 5        Os1 0)
                (while (/= Os  ( nth Ts ent ))  (setq Ts( + Ts 1))    ); 确定第一点子表位置

                (princ "\n" Fh)                ;;每条线空一行
                ;;----------------------------------------
                (princ Ns Fh)                ;;每条线的总点数
                (princ "\n" Fh)
                ;;----------------------------------------
                ;;----------------------------------------
            (while  Os                 ;;是否是空子表
                ( setq Os ( nth Ts ent ))        ; 取每一点的子表
                ( setq Ts (+ Ts 4))
                (if (= (car Os) 10)
                  (Progn
                  (setq Os0 (strcat (rtos(cadr Os)) "," (rtos(caddr Os))) )
                  (if (/= Os0 Os1) (princ (strcat Os0 "\n") fh ) )  ; 非重复点
                  (setq Os1 Os0)
                  );;;; Progn
                );;;;  If  
                (If (= Clo 1)                        ; 是闭合线
                        (setq Clo 2    XY0 Os0)        ; 设置闭合线标致2,保存第一点坐标
                        ;;(princ XY0)        ; 显示闭合点坐标
                );;;; if
             ) ; while
                (If (= Clo 2)                ; 是闭合线
                         (princ (Strcat XY0 "\n") fh ) ; 输出第一点
                )                ; 在线尾增加线的首点,人为进行闭合。
             ) ; Progn
             ) ; end if
        ) ; repeat
        (setvar "CMDECHO" 1)
        (close fh)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 11:07 , Processed in 0.165497 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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