[已解決]lisp 圖層框選凍結問題
4 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
[已解決]lisp 圖層框選凍結問題
各路高手請問我利用chprop指令執行圖層凍結
我使用(setq en (entsel "\n 選取"))來搭配物件資料選取是可以凍結物件的...
可是當我使用ssget的方式如下來框選物件確發生了問題,我想我應該是缺少某一些要素,可是我想不出來,可是當我單純執行chprop確可以使用框選的方法來凍結圖層........
(setq en (ssget))
(command "-layer" "F" en "")
請問要怎麼解決這一個問題呢?
我使用(setq en (entsel "\n 選取"))來搭配物件資料選取是可以凍結物件的...
可是當我使用ssget的方式如下來框選物件確發生了問題,我想我應該是缺少某一些要素,可是我想不出來,可是當我單純執行chprop確可以使用框選的方法來凍結圖層........
(setq en (ssget))
(command "-layer" "F" en "")
請問要怎麼解決這一個問題呢?
Tiger&蘋果爸 在 周一 18 7月 - 12:28 作了第 2 次修改
adslwang- 高級會員
- 文章總數 : 376
年齡 : 46
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 7211
威望值 : 356
回帖精華 : 1
注冊日期 : 2008-10-02
回復: [已解決]lisp 圖層框選凍結問題
(setq en (ssget))
(command "-layer" "F" en "")
無法正常執行應該是AutoCAD本身的問題!!
山不轉路轉, 建議你用下列方法:
(setq en (ssget))
;;從en中取得所有物件的圖層名稱作成清單, 例如 "0,圖層1,圖層2,圖層3"
(setq i 0)
(repeat (sslength en)
(setq layName (cdr (assoc 8 (entget (ssname sl i)))))
...
(setq i (1+ i))
)
(command "-layer" "f" 圖層清單 "")
另外你必須注意, 關閉或凍結目前層時AutoCAD會詢問「是否確定?」,
在程式中也必須把這個考慮進去才行!!
(command "-layer" "F" en "")
無法正常執行應該是AutoCAD本身的問題!!
山不轉路轉, 建議你用下列方法:
(setq en (ssget))
;;從en中取得所有物件的圖層名稱作成清單, 例如 "0,圖層1,圖層2,圖層3"
(setq i 0)
(repeat (sslength en)
(setq layName (cdr (assoc 8 (entget (ssname sl i)))))
...
(setq i (1+ i))
)
(command "-layer" "f" 圖層清單 "")
另外你必須注意, 關閉或凍結目前層時AutoCAD會詢問「是否確定?」,
在程式中也必須把這個考慮進去才行!!
Tiger&蘋果爸 寫到: 謝謝熱心回覆~< 積分 +1>
[公告]關於團隊成員的回文及貢獻
Tiger&蘋果爸 在 周五 15 7月 - 16:16 作了第 1 次修改 (原因 : 非常專業喔~)
回復: [已解決]lisp 圖層框選凍結問題
前輩,我試一下再上來報告,我只怕我功力還沒有到那邊....
謝謝指導.....
謝謝指導.....
adslwang- 高級會員
- 文章總數 : 376
年齡 : 46
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 7211
威望值 : 356
回帖精華 : 1
注冊日期 : 2008-10-02
回復: [已解決]lisp 圖層框選凍結問題
還是超過我的能力範圍,畢竟我還是新手,我只能用前輩的東西改,還是解決不了,目前的狀況是可以框選到物件,且只能選到第一個物件能做凍,之後的就不能作凍,另外也嘗試使用ssadd代入可是也是失敗,是否可以請前輩再指點......
(defun c:ppoo()
(setq en (ssget)) (setq i 0) (repeat (sslength en)
(setq layName (cdr (assoc 8 (entget (ssname en i)))))
(setq i (1+ i)))
(command "-layer" "f" layname "") (princ))
以下是我參考其它例子再加入一些東西供參考目前我也只能做到這樣.....
當不再凍結圖層時只要按下sec便可。
(defun c:AFk()
(SETVAR "CMDECHO" 0)
(while t
(setq en (entsel "\n 選取凍結圖層"))
(cond((= en nil)(alert (strcat "\n 沒有選中物件,再選一次"))(prin1))
(t(setq endata (entget (car en)))
(setq dd (assoc 8 endata))(setq dd2 (cdr dd))(command "-layer" "F" dd2 "")
(princ "\n 凍結單一圖層,這一個圖層名是[ ") (princ dd2) (princ " ]"))
(prin1))))
我在練基本功,希望可以找到真正的解答......我有點睏了
(defun c:ppoo()
(setq en (ssget)) (setq i 0) (repeat (sslength en)
(setq layName (cdr (assoc 8 (entget (ssname en i)))))
(setq i (1+ i)))
(command "-layer" "f" layname "") (princ))
以下是我參考其它例子再加入一些東西供參考目前我也只能做到這樣.....
當不再凍結圖層時只要按下sec便可。
(defun c:AFk()
(SETVAR "CMDECHO" 0)
(while t
(setq en (entsel "\n 選取凍結圖層"))
(cond((= en nil)(alert (strcat "\n 沒有選中物件,再選一次"))(prin1))
(t(setq endata (entget (car en)))
(setq dd (assoc 8 endata))(setq dd2 (cdr dd))(command "-layer" "F" dd2 "")
(princ "\n 凍結單一圖層,這一個圖層名是[ ") (princ dd2) (princ " ]"))
(prin1))))
我在練基本功,希望可以找到真正的解答......我有點睏了
adslwang- 高級會員
- 文章總數 : 376
年齡 : 46
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 7211
威望值 : 356
回帖精華 : 1
注冊日期 : 2008-10-02
回復: [已解決]lisp 圖層框選凍結問題
雖然你的程式有點小瑕疵,但基本上程式已可以運作,我將你的程式稍作修改如下:
(defun c:AFk()
(SETVAR "CMDECHO" 0)
(while t
(setq en (entsel "\n 選取凍結圖層"))
(cond
((= en nil)
(alert (strcat "\n 沒有選中物件,再選一次"))
)
(t
(setq endata (entget (car en)))
(setq dd (assoc 8 endata))
(setq dd2 (cdr dd))
(command "-layer" "F" dd2 "")
(princ "\n 凍結單一圖層,這一個圖層名是[ ") (princ dd2) (princ " ]")
)
)
)
(prin1)
)
這裏要提醒你一點,如果要讓使用者按下鍵才能結束程式的運作,則最好要做「錯誤處置(*error)」,細節請參考AutoLISP說明文件。
(defun c:AFk()
(SETVAR "CMDECHO" 0)
(while t
(setq en (entsel "\n 選取凍結圖層"))
(cond
((= en nil)
(alert (strcat "\n 沒有選中物件,再選一次"))
)
(t
(setq endata (entget (car en)))
(setq dd (assoc 8 endata))
(setq dd2 (cdr dd))
(command "-layer" "F" dd2 "")
(princ "\n 凍結單一圖層,這一個圖層名是[ ") (princ dd2) (princ " ]")
)
)
)
(prin1)
)
這裏要提醒你一點,如果要讓使用者按下
回復: [已解決]lisp 圖層框選凍結問題
前輩,我可以再問你一下嗎
http://autocad.bestoforum.net/t6619-topic
(while (/= (getvar "ERRNO") 52)
(command "_dimlinear" pause pause pause)
)
while 後面 那一排紅色的東西指的是什麼 我有去查它的變數 可是變數沒有值 52? 而且 /=的關系我稿不太懂,可以指點一下嘛
http://autocad.bestoforum.net/t6619-topic
(while (/= (getvar "ERRNO") 52)
(command "_dimlinear" pause pause pause)
)
while 後面 那一排紅色的東西指的是什麼 我有去查它的變數 可是變數沒有值 52? 而且 /=的關系我稿不太懂,可以指點一下嘛
adslwang- 高級會員
- 文章總數 : 376
年齡 : 46
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 7211
威望值 : 356
回帖精華 : 1
注冊日期 : 2008-10-02
回復: [已解決]lisp 圖層框選凍結問題
ERROR CODE=52 表沒有選到物件(Entity selection: null response)
這 (/= (getvar "ERRNO") 52) 表有選到物件
不過個人覺得程式這樣寫並不是很妥當
>>>
(while (/= (getvar "ERRNO") 52)
(command "_dimlinear" pause pause pause)
)
因為ERRNO有可能是其它值, 不一定是52
Value
Meaning
這 (/= (getvar "ERRNO") 52) 表有選到物件
不過個人覺得程式這樣寫並不是很妥當
>>>
(while (/= (getvar "ERRNO") 52)
(command "_dimlinear" pause pause pause)
)
因為ERRNO有可能是其它值, 不一定是52
Value
Meaning
- 代碼:
0
No error
1
Invalid symbol table name
2
Invalid entity or selection set name
3
Exceeded maximum number of selection sets
4
Invalid selection set
5
Improper use of block definition
6
Improper use of xref
7
Object selection: pick failed
8
End of entity file
9
End of block definition file
10
Failed to find last entity
11
Illegal attempt to delete viewport object
12
Operation not allowed during PLINE
13
Invalid handle
14
Handles not enabled
15
Invalid arguments in coordinate transform request
16
Invalid space in coordinate transform request
17
Invalid use of deleted entity
18
Invalid table name
19
Invalid table function argument
20
Attempt to set a read-only variable
21
Zero value not allowed
22
Value out of range
23
Complex REGEN in progress
24
Attempt to change entity type
25
Bad layer name
26
Bad linetype name
27
Bad color name
28
Bad text style name
29
Bad shape name
30
Bad field for entity type
31
Attempt to modify deleted entity
32
Attempt to modify seqend subentity
33
Attempt to change handle
34
Attempt to modify viewport visibility
35
Entity on locked layer
36
Bad entity type
37
Bad polyline entity
38
Incomplete complex entity in block
39
Invalid block name field
40
Duplicate block flag fields
41
Duplicate block name fields
42
Bad normal vector
43
Missing block name
44
Missing block flags
45
Invalid anonymous block
46
Invalid block definition
47
Mandatory field missing
48
Unrecognized extended data (XDATA) type
49
Improper nesting of list in XDATA
50
Improper location of APPID field
51
Exceeded maximum XDATA size
52
Entity selection: null response
53
Duplicate APPID
54
Attempt to make or modify viewport entity
55
Attempt to make or modify an xref, xdef, or xdep
56
ssget filter: unexpected end of list
57
ssget filter: missing test operand
58
ssget filter: invalid opcode (-4) string
59
ssget filter: improper nesting or empty conditional clause
60
ssget filter: mismatched begin and end of conditional clause
61
ssget filter: wrong number of arguments in conditional clause (for NOT or XOR)
62
ssget filter: exceeded maximum nesting limit
63
ssget filter: invalid group code
64
ssget filter: invalid string test
65
ssget filter: invalid vector test
66
ssget filter: invalid real test
67
ssget filter: invalid integer test
68
Digitizer is not a tablet
69
Tablet is not calibrated
70
Invalid tablet arguments
71
ADS error: Unable to allocate new result buffer
72
ADS error: Null pointer detected
73
Cannot open executable file
74
Application is already loaded
75
Maximum number of applications already loaded
76
Unable to execute application
77
Incompatible version number
78
Unable to unload nested application
79
Application refused to unload
80
Application is not currently loaded
81
Not enough memory to load application
82
ADS error: Invalid transformation matrix
83
ADS error: Invalid symbol name
84
ADS error: Invalid symbol value
85
AutoLISP/ADS operation prohibited while a dialog box was displayed
pizg 在 周六 16 7月 - 21:55 作了第 1 次修改
回復: [已解決]lisp 圖層框選凍結問題
學習了~pizg 寫到:ERROR CODE=52 表沒有選到物件(Entity selection: null response)
這 (/= (getvar "ERRNO") 52) 表有選到物件
- Spoiler(用來隱藏帖子內容):
Value
Meaning
0
No error
1
Invalid symbol table name
2
Invalid entity or selection set name
3
Exceeded maximum number of selection sets
4
Invalid selection set
5
Improper use of block definition
6
Improper use of xref
7
Object selection: pick failed
8
End of entity file
9
End of block definition file
10
Failed to find last entity
11
Illegal attempt to delete viewport object
12
Operation not allowed during PLINE
13
Invalid handle
14
Handles not enabled
15
Invalid arguments in coordinate transform request
16
Invalid space in coordinate transform request
17
Invalid use of deleted entity
18
Invalid table name
19
Invalid table function argument
20
Attempt to set a read-only variable
21
Zero value not allowed
22
Value out of range
23
Complex REGEN in progress
24
Attempt to change entity type
25
Bad layer name
26
Bad linetype name
27
Bad color name
28
Bad text style name
29
Bad shape name
30
Bad field for entity type
31
Attempt to modify deleted entity
32
Attempt to modify seqend subentity
33
Attempt to change handle
34
Attempt to modify viewport visibility
35
Entity on locked layer
36
Bad entity type
37
Bad polyline entity
38
Incomplete complex entity in block
39
Invalid block name field
40
Duplicate block flag fields
41
Duplicate block name fields
42
Bad normal vector
43
Missing block name
44
Missing block flags
45
Invalid anonymous block
46
Invalid block definition
47
Mandatory field missing
48
Unrecognized extended data (XDATA) type
49
Improper nesting of list in XDATA
50
Improper location of APPID field
51
Exceeded maximum XDATA size
52
Entity selection: null response
53
Duplicate APPID
54
Attempt to make or modify viewport entity
55
Attempt to make or modify an xref, xdef, or xdep
56
ssget filter: unexpected end of list
57
ssget filter: missing test operand
58
ssget filter: invalid opcode (-4) string
59
ssget filter: improper nesting or empty conditional clause
60
ssget filter: mismatched begin and end of conditional clause
61
ssget filter: wrong number of arguments in conditional clause (for NOT or XOR)
62
ssget filter: exceeded maximum nesting limit
63
ssget filter: invalid group code
64
ssget filter: invalid string test
65
ssget filter: invalid vector test
66
ssget filter: invalid real test
67
ssget filter: invalid integer test
68
Digitizer is not a tablet
69
Tablet is not calibrated
70
Invalid tablet arguments
71
ADS error: Unable to allocate new result buffer
72
ADS error: Null pointer detected
73
Cannot open executable file
74
Application is already loaded
75
Maximum number of applications already loaded
76
Unable to execute application
77
Incompatible version number
78
Unable to unload nested application
79
Application refused to unload
80
Application is not currently loaded
81
Not enough memory to load application
82
ADS error: Invalid transformation matrix
83
ADS error: Invalid symbol name
84
ADS error: Invalid symbol value
85
AutoLISP/ADS operation prohibited while a dialog box was displayed
真的是獲益良多~
感謝pizg分享說明!
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
回復: [已解決]lisp 圖層框選凍結問題
前輩,謝謝您的幫忙
真是受益良多,這一些我在我的書本上找不到的可貴知識.....
真是受益良多,這一些我在我的書本上找不到的可貴知識.....
adslwang- 高級會員
- 文章總數 : 376
年齡 : 46
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 7211
威望值 : 356
回帖精華 : 1
注冊日期 : 2008-10-02
回復: [已解決]lisp 圖層框選凍結問題
我也是,從這個問題中也學到了前輩很多可貴的經驗,感恩!
ginse0727- 高級會員
- 文章總數 : 256
年齡 : 50
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 6829
威望值 : 500
發帖精華 : 1
注冊日期 : 2010-07-13
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章