明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1911|回复: 2

对直线的起始点重新排序

[复制链接]
发表于 2012-11-4 19:06 | 显示全部楼层 |阅读模式
对直线的起始点重新排序,子程序摘自本论坛,(忘记是哪位老大的了,见谅!)
因为画图时无序,导致用图纸下料或导参数时无序,特此整理一下。
请各位老大指点!
(defun c:tt ()
    (princ "\n请选择要排序的直线...")
    (if        (setq ss (ssget '((0 . "LINE"))))
        (progn
            ;; 1、获取点位表
            (setq lst '()
                  i   0 )
            (repeat (sslength ss)
                (setq en  (ssname ss i)
                      ent (entget en)
                      pt  (cdr (assoc 10 ent))
                      pt_1  (cdr (assoc 11 ent))
                      lst (list pt pt_1))                     
            ;; 2、排序          
           (setq aa (paixu_zZyYxX lst))
            ;; 3、重新画线
          (command "line" (car aa) (cadr aa) "")
          (setq i  (1+ i))
                );repeat
          )
);if
            ;; 4、删除原来的线
  (command "._erase" ss "")
    )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 1. 判断z,z大在前,如果z相等,判断y   
;;; 2. 判断y,y大在前,如果y相等,判断x
;;; 3. 判断x,x大在前,如果x相等,删除重复点。
(defun paixu_ZzYyXx (xyz);;;
(vl-sort (listxx lst)
             (function (lambda (e1 e2)
                          (cond ((/= (caddr e1) (caddr e2))(> (caddr e1) (caddr e2)))
                                ((/= (cadr e1) (cadr e2))(> (cadr e1) (cadr e2)) )
                                ((> (car e1) (car e2)) )
                                ) ))
          ))
-----------------------------------------------------
;;; 1. 判断z,z小在前,如果z相等,判断y   
;;; 2. 判断y,y小在前,如果y相等,判断x
;;; 3. 判断x,x小在前,如果x相等,删除重复点。
(defun paixu_zZyYxX (xyz)
(vl-sort (listxx lst)
             (function (lambda (e1 e2)
                          (cond ((/= (caddr e1) (caddr e2))(< (caddr e1) (caddr e2)))
                                ((/= (cadr e1) (cadr e2))(< (cadr e1) (cadr e2)) )
                                ((< (car e1) (car e2)) )
                                ) ))
          ))
------------------------------------------------------
(defun listxx ( a / b) ;删除表中重复元素1
(foreach x a (if(not(member x b))(setq b(append b(list x)))))
)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-11-5 08:14 | 显示全部楼层
感谢vlisp2012分享程序!
发表于 2015-10-24 12:09 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 06:44 , Processed in 0.297221 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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