明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2018|回复: 6

圖上的圓編號,依圓心座標x軸y軸大小分為8種排序方式

[复制链接]
发表于 2004-4-26 14:32:00 | 显示全部楼层 |阅读模式
歡迎來找碴,


本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2004-4-26 15:09:00 | 显示全部楼层
在你的基础上把排序部分改了一下:顺序可能跟你不一样,那个cond里你自己改一下你的取圆心部分怎么那么罗嗦?即使用ACTIVEX方法,也不需要那个pt_save啊
  1. (defun c:111 (/ txth ss ans pt_list i ename ptms fun pt)
  2.    (vl-load-com)
  3.    (setvar "cmdecho" 0)
  4.    (setvar "blipmode" 0)
  5.    (setq txth (getvar "textsize"))
  6.    (setq ss (ssget '((0 . "CIRCLE"))))
  7.    (initget "1 2 3 4 5 6 7 8")
  8.    (setq ans (getkword "\n輸入排序方向<1-8>:"))
  9.    (setq pt_list '())
  10.    (setq i 0)
  11.    (repeat (sslength ss)
  12.        (setq ename (ssname ss i))
  13.        (setq ptms (cdr (assoc 10 (entget ename))))
  14.        (setq pt_list (cons ptms pt_list))
  15.        (setq i (+ i 1))
  16.    )
  17.    (cond
  18.        ((= ans "1") (setq fun '(car cadr < <)))
  19.        ((= ans "2") (setq fun '(car cadr > <)))
  20.        ((= ans "3") (setq fun '(car cadr < >)))
  21.        ((= ans "4") (setq fun '(car cadr > >)))
  22.        ((= ans "5") (setq fun '(cadr car < <)))
  23.        ((= ans "6") (setq fun '(cadr car > <)))
  24.        ((= ans "7") (setq fun '(cadr car < >)))
  25.        ((= ans "8") (setq fun '(cadr car > >)))
  26.    )
  27.    (setq pt_list (vl-sort pt_list
  28.        '(lambda (e1 e2)
  29.              ((eval (nth 2 fun))
  30.                  ((eval (nth 0 fun)) e1)
  31.                  ((eval (nth 0 fun)) e2)
  32.              )
  33.          )
  34.    )
  35.    )
  36.    (setq pt_list (vl-sort pt_list
  37.        '(lambda (e1 e2)
  38.              ((eval (nth 3 fun))
  39.                  ((eval (nth 1 fun)) e1)
  40.                  ((eval (nth 1 fun)) e2)
  41.              )
  42.          )
  43.    )
  44.    )
  45.    (setq i 0)
  46.    (repeat (sslength ss)
  47.        (setq pt (nth i pt_list))
  48.        (command "text" "m" pt txth 0 (rtos (+ i 1)))
  49.        (setq i (+ i 1))
  50.    )
  51.    (prin1)
  52. )
 楼主| 发表于 2004-4-26 16:45:00 | 显示全部楼层
謝謝指正


另一個問題,如果將圖上的數個圓旋轉一個角度(如25度)再旋轉回來(-25度)重做一遍,排序結果會有異常
发表于 2004-4-26 16:51:00 | 显示全部楼层
这是CAD内部精度问题,旋转后那些原来 X坐标相同的,现在其实不同了,会有一点点的不同,这个不同作为平常位置要求,完全可以忽略,但要作为比较用,就完全不同了,解决的办法就是你自己做一个大于和小于的函数代替 &gt; 和 &lt;,要求就是如果两个数差一点点都算等于,即如果A和B相差一个极小的数值(精度控制),使用你的大于和小于符号,都返回nil
 楼主| 发表于 2004-4-26 17:17:00 | 显示全部楼层
我原本提供的程序選1,3,5,7時會有異常,2,4,6,8則不會,之前研究老半天,心中也曾有老大您說的看法,可是查詢座標點則看不出所以然,也用過誤差控制,一樣無效,這程序本身是寫好玩的,在實際工作中並未用到,但透過這過程,多了解一些排序的觀念,THANKS



PS.請套用的人要自行注意這樣的問題
发表于 2004-4-27 09:51:00 | 显示全部楼层
飞哥编的程序真是很妙啊!
发表于 2008-6-12 19:15:00 | 显示全部楼层
80万个圆做标注的时候我用了一天一夜才弄5万。程序还可以优化么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-2 21:05 , Processed in 0.216187 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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