明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1399|回复: 3

如何对所选直线排序?

[复制链接]
发表于 2009-8-15 21:35:00 | 显示全部楼层 |阅读模式
如何对所选直线排序?
比如我在cad中选择了一些直线,如何让这些直线按照坐标的顺序加入选择集?
哪位能帮帮忙,多谢了!
发表于 2009-8-15 22:25:00 | 显示全部楼层

(setq ttLL (ACET-SS-TO-list (ssget '((0 . "LINE")))))
(setq ttLL (vl_sort ttLL (lambda (e1 e2)(> (car (acet-dxf 10 (entget e1))) (car (acet-dxf 10 (entget e2)))))))

acet-ss-to-list及acet-dxf参见acet函数
vl_sort参见无痕老大的排序

发表于 2009-8-17 14:03:00 | 显示全部楼层

;; ▓ (lt:pts-angle-Sort <点集> <角度>)
;; [功能] 根据角度将点集重新排序

;; 测试

(defun c:tt (/ p lst)
  (while (setq p (getpoint "\n拾取:")) (setq lst (cons p lst)))
  (setvar 'osmode 0)
  (apply 'command (cons "_.pline" (lt:pts-angle-Sort lst (getangle "\n角度:"))))
  (command "")
)

(defun lt:pts-angle-Sort (pts ang / pt 0.5pi n p lst1 lst2 dis1 dis2)
  (setq pt (car pts) pts (cdr pts) 0.5pi (/ pi 2))
  (repeat (setq n (length pts))
    (setq n (1- n))
    (if (equal (angle pt (setq p (nth n pts))) ang 0.5pi)
      (setq lst1 (cons p lst1) dis1 (cons (distance pt p) dis1))
      (setq lst2 (cons p lst2) dis2 (cons (distance pt p) dis2))
    )
  )
  (append
    (mapcar '(lambda (x) (nth x lst1)) (vl-sort-i dis1 '>))
    (list pt)
    (mapcar '(lambda (x) (nth x lst2)) (vl-sort-i dis2 '<))
  )
)

 楼主| 发表于 2009-8-17 20:55:00 | 显示全部楼层
太棒了!没想到几行就解决问题了!
我给想复杂了,幸亏到这里问了问!
非常感谢二位!真心的,必须了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-6 03:06 , Processed in 0.168317 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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