AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~
AutoCAD顧問
Would you like to react to this message? Create an account in a few clicks or log in to continue.
[討論]lisp--vl-sort與lambda這2個函數的用法 Io15010 [討論]lisp--vl-sort與lambda這2個函數的用法 Easase10 [討論]lisp--vl-sort與lambda這2個函數的用法 Oiu15010 [討論]lisp--vl-sort與lambda這2個函數的用法 2020-211 [討論]lisp--vl-sort與lambda這2個函數的用法 Oo-2-110 [討論]lisp--vl-sort與lambda這2個函數的用法 BPl3tjj

[討論]lisp--vl-sort與lambda這2個函數的用法

向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 蔣秉澔 于 2014-10-23, 10:12

(setq a1 '(0 0)
     a2 '(630 0)
     a3 '(1260 0)
     a4 '(1890 0)
     a5 '(2520 0)
     a6 '(3150 0)
     a7 '(0 500)
     a8 '(630 500)
     a9 '(1260 500)
     a10 '(1890 500)
     a11 '(2520 500)
     a12 '(3150 500)
     a13 '(0 1000)
     a14 '(630 1000)
     a15 '(1260 1000)
     a16 '(1890 1000)
     a17 '(2520 1000)
     a18 '(3150 1000)
     )
(setq aa(list a10 a14 a7 a8 a3 a13 a2 a18 a6 a12 a1 a16 a4 a15 a9 a11 a5 a17))
(setq aa(vl-sort aa
(function (lambda (e1 e2)
    (< (car e1) (car e2)))))
     )

如上面所示,我把18個坐標分成6x3排列,如果它是某圖塊的插入點坐標,我將它加入一個屬性標籤,並利用程式要幫它們先左→右,再上↓下的編碼,要如何寫呢?
蔣秉澔
蔣秉澔
初級會員
初級會員

文章總數 : 211
年齡 : 43
來自 : 嘉義市
職業 : 大電力系統設計、製程、檢測
愛好 : 電腦相關,出遊踏青
個性 : 待人隨和,對事執著
使用年資 : 8年
使用版本 : 2011 Electrical,2014
積分 : 4
經驗值 : 3772
威望值 : 162
注冊日期 : 2013-08-31
顧問外掛程式 藍鵲661號
男 金牛座 蛇

回頂端 向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty 回復: [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 judyyai 于 2014-10-28, 07:38

會寫程式真的很厲害~頂出來~讓其他人可以幫你~我是不懂...

____________________________________________________________________________________
[討論]lisp--vl-sort與lambda這2個函數的用法 Eai-1a11 [討論]lisp--vl-sort與lambda這2個函數的用法 Ia15010 [討論]lisp--vl-sort與lambda這2個函數的用法 Ziao110 [討論]lisp--vl-sort與lambda這2個函數的用法 BPl3tjj
judyyai
judyyai
管理顧問
管理顧問

文章總數 : 7732
年齡 : 43
來自 : 台南
職業 : 機械製圖
愛好 : 電腦相關
個性 : think too much...
使用年資 : 10↑
使用版本 : AC2019(開始於2019年底末月)
AutoCAD基礎篇等級 : 10星級
積分 : 393
最佳解答 : 1
經驗值 : 28602
威望值 : 3533
發帖精華 : 2
回帖精華 : 4
注冊日期 : 2008-11-19
2D基礎函授 3D基礎函授 顧問外掛程式 經典問與答讀者 藍鵲2號
2009聚會勳章 串連貼紙成功 女 巨蟹座 蛇

回頂端 向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty 回復: [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 蔣秉澔 于 2014-10-28, 09:50

judyyai姐,我也還是在學習階段,很多都不會
蔣秉澔
蔣秉澔
初級會員
初級會員

文章總數 : 211
年齡 : 43
來自 : 嘉義市
職業 : 大電力系統設計、製程、檢測
愛好 : 電腦相關,出遊踏青
個性 : 待人隨和,對事執著
使用年資 : 8年
使用版本 : 2011 Electrical,2014
積分 : 4
經驗值 : 3772
威望值 : 162
注冊日期 : 2013-08-31
顧問外掛程式 藍鵲661號
男 金牛座 蛇

回頂端 向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty 回復: [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 Atsai 于 2014-10-28, 21:58

先排x、再排y

(setq aa(vl-sort aa
(function (lambda (e1 e2)
    (< (car e1) (car e2)))))
);X座標排序,由小->大(左->右)

(setq aa(vl-sort aa
(function (lambda (e1 e2)
    (> (cadr e1) (cadr e2)))))
);Y座標排序,由大->小(上->下)

Atsai
Atsai
中級會員
中級會員

文章總數 : 137
年齡 : 45
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 4092
威望值 : 421
注冊日期 : 2012-04-06
男 金牛座 兔

回頂端 向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty 回復: [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 蔣秉澔 于 2014-10-29, 10:28

Atsai哥,謝謝你的解說,我發現,有時候是一件簡單的事,我都把它想得複雜了
蔣秉澔
蔣秉澔
初級會員
初級會員

文章總數 : 211
年齡 : 43
來自 : 嘉義市
職業 : 大電力系統設計、製程、檢測
愛好 : 電腦相關,出遊踏青
個性 : 待人隨和,對事執著
使用年資 : 8年
使用版本 : 2011 Electrical,2014
積分 : 4
經驗值 : 3772
威望值 : 162
注冊日期 : 2013-08-31
顧問外掛程式 藍鵲661號
男 金牛座 蛇

回頂端 向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty 回復: [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 蔣秉澔 于 2014-12-03, 11:35

好久沒關心這篇了~
自從Atsai哥解說後,我就立馬套進主程式使用,結果發現,如果抓的是圖元,雖然坐標有排好,但回饋給圖元,它又照圖元的號碼去排了
飯粒:
(setq sl nil
         ii 0
         ENTS(ssget '((0 . "TEXT"))))
   (Repeat (sslength ENTS)
     (setq sl (cons(ssname ENTS ii)sl)
           ii(1+ ii)))
     (setq sl (vl-sort sl
           (function (lambda(a b)(<
           (car(cdr(assoc 10(entget a))))
           (car(cdr(assoc 10(entget b))))
           ))))) ;X座標排序,由小->大(左->右)
     (setq sl (vl-sort sl
           (function (lambda(a b)(>
           (cadr(cdr(assoc 10(entget a))))
           (cadr(cdr(assoc 10(entget b))))
           ))))) ;Y座標排序,由大->小(上->下)
蔣秉澔
蔣秉澔
初級會員
初級會員

文章總數 : 211
年齡 : 43
來自 : 嘉義市
職業 : 大電力系統設計、製程、檢測
愛好 : 電腦相關,出遊踏青
個性 : 待人隨和,對事執著
使用年資 : 8年
使用版本 : 2011 Electrical,2014
積分 : 4
經驗值 : 3772
威望值 : 162
注冊日期 : 2013-08-31
顧問外掛程式 藍鵲661號
男 金牛座 蛇

回頂端 向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty 回復: [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 shenhung 于 2014-12-06, 11:15

請問你是 希望座標排序好之後..再跟據座標.依序取得排好序的圖元.來做編輯嗎~?
shenhung
shenhung
高級會員
高級會員

文章總數 : 248
年齡 : 53
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 6124
威望值 : 991
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty 回復: [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 蔣秉澔 于 2014-12-06, 13:00

shenhung哥,對ㄚ,我就是想這樣,我該如何做呢?
蔣秉澔
蔣秉澔
初級會員
初級會員

文章總數 : 211
年齡 : 43
來自 : 嘉義市
職業 : 大電力系統設計、製程、檢測
愛好 : 電腦相關,出遊踏青
個性 : 待人隨和,對事執著
使用年資 : 8年
使用版本 : 2011 Electrical,2014
積分 : 4
經驗值 : 3772
威望值 : 162
注冊日期 : 2013-08-31
顧問外掛程式 藍鵲661號
男 金牛座 蛇

回頂端 向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty 回復: [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 shenhung 于 2014-12-07, 15:09

取得圓心之後.在圓心依排序寫出序號.. 此處.利用 點對  (座標點 . 圖元碼) 做榜定排序
代碼:

(defun c:tt ()
   (setq ss nil pt_list '() i 0)
   (setq ss (ssget '((0 . "CIRCLE"))))
   (repeat (sslength ss)
      (setq en (ssname ss i))
      (setq en_10 (cdr (assoc 10 (entget en))))
      (setq en_5 (cdr (assoc 5  (entget en)))) ;圖元HANDENT 碼
      (setq en_list (cons en_10 en_5))         ; 建立點對  (點 . 圖元碼)
      (setq pt_list (cons en_list pt_list))    ;  點對加入 pt_list 串列
      (setq i (1+ i))
   )
   (setq pt_list_sort (sort_y pt_list))    ; 先對y排序
   (setq pt_list_sort (sort_x pt_list_SORT)) ;再對x排序
   (write-text)
)


(defun sort_x (lst) ;由小排到大
   ;此處改寫為 (nth 0 e1) 是 將點對 (點  . 圖元碼) 中的座標點.取出來排序.
  (setq lst (vl-sort lst (function (lambda (e1 e2) (< (car (nth 0 e1))  (car (nth 0 e2)))))))
)
(defun sort_y (lst) ;由大排到小
  ;此處改寫為 (nth 0 e1) 是 將點對 (點  . 圖元碼) 中的座標點.取出來排序.
  (setq lst (vl-sort lst (function (lambda (e1 e2) (> (cadr (nth 0 e1)) (cadr (nth 0 e2)))))));此處改寫為 (nth 0 e1) 是 將點對 (點  . 圖元碼) 中的座標點.取出來排序.
)  

;;; write-text 在圓心寫序號)

(defun write-text()
  (setq w 0 )
  (setvar "cmdecho" 0)
  (repeat (length pt_list_sort)
    (setq en_inx (nth w pt_list_sort)) ; 取出點對.
    (setq en_nth_0 (car en_inx)) ;取出點對中座標點 ;.(其實以這個圓心點寫字就可以)
    (setq en_nth_1 (cdr en_inx)) ;取出點對中圖元碼
    (setq en_handent (handent en_nth_1))  ; 以圖元碼重新取得圖元ent
    (setq en_handent_10 (cdr (assoc 10 (entget en_handent)))) ; 取得圓心, (會跟en_nth_0 一樣)
    (command "text" "J" "M"  en_handent_10 "3.5" "0" (1+ w) )
    (setq w (1+ w))
 )
  (setvar "cmdecho" 1)
  (princ)
)


 ;刪除寫出的文字
(defun c:ee()
(setq ss (ssget '((0 . "TEXT"))))
(command "erase" ss "")
(princ)  
)
  
(princ)

[討論]lisp--vl-sort與lambda這2個函數的用法 N15RP3Yf

測試cad檔和 LISP檔.下載
載點1: https://db.tt/kuwBLEXn
載點2: https://app.box.com/s/71w05dd51tf9zqn84zke
shenhung
shenhung
高級會員
高級會員

文章總數 : 248
年齡 : 53
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 6124
威望值 : 991
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty 回復: [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 蔣秉澔 于 2014-12-08, 09:42

shenhung哥,謝謝你,看來我又要好好消化一番了,然後看能不能套用到我寫的其他程式內
我是正在改良圖框內的頁碼跟檔號排序(之前寫好後是利用離選去順序跑)
蔣秉澔
蔣秉澔
初級會員
初級會員

文章總數 : 211
年齡 : 43
來自 : 嘉義市
職業 : 大電力系統設計、製程、檢測
愛好 : 電腦相關,出遊踏青
個性 : 待人隨和,對事執著
使用年資 : 8年
使用版本 : 2011 Electrical,2014
積分 : 4
經驗值 : 3772
威望值 : 162
注冊日期 : 2013-08-31
顧問外掛程式 藍鵲661號
男 金牛座 蛇

回頂端 向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty 回復: [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 Atsai 于 2014-12-23, 06:46

如果樓主的想法是為了圖框的圖號順序的話,我是建立一個帶屬性(編號)的圖框,利用功能變數將編號指定到"CTAB"也就是配置名稱。如此一來圖框的屬性(編號)就會跟著配置名稱跑。進階的方式則是再搭配圖紙集,則圖名,圖目錄也會像word一樣可關連,連動。圖紙集的 路份可以參者蘋果爸的教學。
Atsai
Atsai
中級會員
中級會員

文章總數 : 137
年齡 : 45
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 4092
威望值 : 421
注冊日期 : 2012-04-06
男 金牛座 兔

回頂端 向下

[討論]lisp--vl-sort與lambda這2個函數的用法 Empty 回復: [討論]lisp--vl-sort與lambda這2個函數的用法

發表 由 CHR 于 2014-12-29, 14:43

不好意思!剛好在這裡看到順便請教,(setq a1 '(0,0).........,a1後的 ' 所代表的意思是什麼?謝謝!!
CHR
CHR
一般會員
一般會員

文章總數 : 15
年齡 : 33
來自 : 台北
職業 : 室內設計
愛好 : 古典音樂
個性 : 溫吞慢郎
使用年資 : 10
使用版本 : 2010
經驗值 : 2257
威望值 : 0
注冊日期 : 2014-07-11
男 巨蟹座 兔

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章
[討論]lisp--vl-sort與lambda這2個函數的用法 Uos15010 [討論]lisp--vl-sort與lambda這2個函數的用法 BPl3tjj [討論]lisp--vl-sort與lambda這2個函數的用法 Ziao1510 [討論]lisp--vl-sort與lambda這2個函數的用法 Oo-2-110 [討論]lisp--vl-sort與lambda這2個函數的用法 Oooo-110 [討論]lisp--vl-sort與lambda這2個函數的用法 2020-211