auot lisp 选择集处理_请教个选择集排序的问题 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
本帖最后由 vlisp2012 于 2013-10-9 16:27 編輯
通過ssget獲得的選擇集的排序,無法很好的控制,每次下面材的時候,都是通過fence,畫線選擇板塊,很繁瑣。
我想編輯一個程序,通過x坐標和y坐標來對面材(封閉多段線)排序后,進行板塊的編號,得到排序后的選擇集如下:
(((434613.0 -21571.4) ) ((441013.0 -21571.4) ) ((433388.0 -21571.4) ) ((441013.0 -19151.4) ) ((439413.0 -19151.4) ) ((436213.0 -19151.4) ) ((434613.0 -19151.4) ) ((433388.0 -19151.4) ) ((437813.0 -19151.4) ) ((441013.0 -16711.4) ) ((439413.0 -16711.4) ) ((437813.0 -16711.4) ) ((436213.0 -16711.4) ) ((434613.0 -16711.4) ) ((433388.0 -16711.4) ) ((433388.0 -14031.4) ) ((434613.0 -14031.4) ) ((436213.0 -14031.4) ) ((437813.0 -14031.4) ) ((439413.0 -14031.4) ) ((441013.0 -14031.4) ))
我想問大家的是,怎樣將上表中,為排序而采用的坐標刪掉呢?
我想要的表如下:
(() () () ( ) ( ) ( )…… )
程序如下:(defun c:tt ()
(command "undo" "be")
(princ "\n 選擇四邊形:")
(setq no (getint "\n起始編號<0>:"))
(if (null no) (setq no 0))
(setq no_ban (getstring "\n板塊編號<1B>:"))
(if (= no_ban "") (setq no_ban "1B"))
(princ "\n請選擇要排序的實體...")
(if (setq ss (ssget '((0??.??"LWPOLYLINE"))))
(progn
;; 1、獲取點位表
(setq lst '()
i? ?0
lst0 '()
)
(repeat (sslength ss)
(setq en??(ssname ss i))
;;;? ?? ???ent (entget en)
;;;? ?? ???pt??(cdr (assoc 10 ent))
(setq obj (vlax-ename->vla-object en))
;; 得到包圍框
(setq avc (vla-GetBoundingBox Obj 'minpt 'maxpt))
(setq minPt (vlax-safearray->list minPt)
maxPt (vlax-safearray->list maxPt)
PtCen (list (/ (+ (car minpt) (car maxpt)) 2)
(/ (+ (cadr minpt) (cadr maxpt)) 2)))
(setq lst0 (list PtCen en))
(setq? ? lst (cons lst0 lst)
i? ?(1+ i)
)
)
;; 2、排序
(setq
lst (vl-sort
lst
(function
(lambda (e1 e2)
(if (equal (cadr e1) (cadr e2) 50)
(< (caar e1) (caar e2))
(< (cadar e1) (cadar e2))
)
)
)
)
)
)
(bh lst no no_ban)
)
(princ)
)
請各位大俠幫忙!!!
總結
以上是生活随笔為你收集整理的auot lisp 选择集处理_请教个选择集排序的问题 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 计算圆的面积_java使用对象
- 下一篇: canvas转图片,print-js实现