明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2436|回复: 6

关于LISP选择集排序的求教!

[复制链接]
发表于 2005-12-6 13:21 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2005-12-8 17:16:31 编辑

我有个LISP程序,请各位帮我看看

(defun c:writepolygon()
  (setvar "cmdecho" 0)
  (setq s (ssget '((0 . "text"))))
  (if (/= nil s)
    (progn
      (setq fname (getfiled "输出文件" "" "" 1))
      (if (/= nil fname)
 (progn
 (setq fp (open fname "w")
       sl (sslength s)
       i 0)
 (command "-boundary" "_a" "_o" "_p" "" "")
 (repeat sl
   (setq ename (ssname s i))
   (setq zb (car (fvertex ename)))
   (setq text (cdr (assoc 1 (entget ename))))
   (command "zoom" "_c" zb 3000)
   (command "-boundary" zb "")
   (setq lename (entlast))
   (setq zbb (fvertex lename))
   (write-line text fp)
   (setq ii 0)
   (repeat (length zbb)
     (setq nzb (nth ii zbb))
     (setq line (strcat (itoa ii) "," (rtos (nth 0 nzb) 2 3) "," (rtos (nth 1 nzb) 2 3)))
     (write-line line fp)
     (setq ii (+ ii 1))
     )
   (entdel lename)
   (setq i (+ i 1))
   )
 )
 )
      (close fp)
      (princ "\n******ok*******")
      )
    )
  (princ)
  )

实现的功能是在CAD图中框选文字,然后得到文字所在封闭多段线的坐标,但是每次输出的顺序不是按文字大小排序的,现在希望能够按大小顺序输出到文本文件里头,哪位大侠能帮帮忙啊!

发表于 2005-12-6 22:57 | 显示全部楼层
将(setq s (ssget '((0 . "text"))))改成(setq s "X" (ssget '((0 . "text"))))即可。
 楼主| 发表于 2005-12-8 17:11 | 显示全部楼层

不行啊.提示    错误: 语法错误

关键是排序,要能够对选择集的表排序,要根据多义线里的文本的大小排序.

发表于 2005-12-8 19:52 | 显示全部楼层
  1. (setq s (ssget "X" '((0 . "TEXT"))))
发表于 2005-12-9 13:22 | 显示全部楼层
这样只是将文字选出来了,并不能按大小进行排序,还要加些程序才行
发表于 2005-12-9 21:13 | 显示全部楼层

文字的大小?

 楼主| 发表于 2005-12-16 15:13 | 显示全部楼层
我自己已经用VBA实现了,但还是要谢谢大家.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 16:16 , Processed in 0.222096 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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