AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~

[已解決]lisp 圖層框選凍結問題

上一篇主題 下一篇主題 向下

[已解決]lisp 圖層框選凍結問題

發表 由 adslwang 于 2011-07-13, 14:38

各路高手請問我利用chprop指令執行圖層凍結
我使用(setq en (entsel "\n 選取"))來搭配物件資料選取是可以凍結物件的...
可是當我使用ssget的方式如下來框選物件確發生了問題,我想我應該是缺少某一些要素,可是我想不出來,可是當我單純執行chprop確可以使用框選的方法來凍結圖層........
(setq en (ssget))
(command "-layer" "F" en "")

請問要怎麼解決這一個問題呢?


Tiger&蘋果爸 在 2011-07-18, 05:28 作了第 2 次修改
avatar
adslwang
高級會員
高級會員

文章總數 : 372
年齡 : 39
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 4660
威望值 : 355
回帖精華 : 1
注冊日期 : 2008-10-02
藍鵲88號
男 處女座 馬

回頂端 向下

回復: [已解決]lisp 圖層框選凍結問題

發表 由 pizg 于 2011-07-14, 06:33

(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會詢問「是否確定?」,
在程式中也必須把這個考慮進去才行!!

Tiger&蘋果爸 寫到:讚啦!! 謝謝熱心回覆~< 積分 +1>
[公告]關於團隊成員的回文及貢獻


Tiger&蘋果爸 在 2011-07-15, 09:16 作了第 1 次修改 (原因 : 非常專業喔~)
avatar
pizg
高級會員
高級會員

文章總數 : 253
年齡 : 52
來自 : 桃園縣
職業 : 建築設計;程式設計
愛好 : 音樂;攝影;繪畫;棋奕;電腦
個性 : 隨和
使用年資 : 20↑
使用版本 : 2010
積分 : 10
經驗值 : 4144
威望值 : 320
發帖精華 : 1
注冊日期 : 2010-04-16
串連貼紙成功 男 摩羯座 龍

回頂端 向下

回復: [已解決]lisp 圖層框選凍結問題

發表 由 adslwang 于 2011-07-14, 16:23

前輩,我試一下再上來報告,我只怕我功力還沒有到那邊....
謝謝指導.....

感謝啦
avatar
adslwang
高級會員
高級會員

文章總數 : 372
年齡 : 39
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 4660
威望值 : 355
回帖精華 : 1
注冊日期 : 2008-10-02
藍鵲88號
男 處女座 馬

回頂端 向下

回復: [已解決]lisp 圖層框選凍結問題

發表 由 adslwang 于 2011-07-15, 14:33

還是超過我的能力範圍,畢竟我還是新手,我只能用前輩的東西改,還是解決不了,目前的狀況是可以框選到物件,且只能選到第一個物件能做凍,之後的就不能作凍,另外也嘗試使用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))))

我在練基本功,希望可以找到真正的解答......我有點睏了 悶啊
avatar
adslwang
高級會員
高級會員

文章總數 : 372
年齡 : 39
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 4660
威望值 : 355
回帖精華 : 1
注冊日期 : 2008-10-02
藍鵲88號
男 處女座 馬

回頂端 向下

回復: [已解決]lisp 圖層框選凍結問題

發表 由 pizg 于 2011-07-16, 01:38

雖然你的程式有點小瑕疵,但基本上程式已可以運作,我將你的程式稍作修改如下:
(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說明文件。

avatar
pizg
高級會員
高級會員

文章總數 : 253
年齡 : 52
來自 : 桃園縣
職業 : 建築設計;程式設計
愛好 : 音樂;攝影;繪畫;棋奕;電腦
個性 : 隨和
使用年資 : 20↑
使用版本 : 2010
積分 : 10
經驗值 : 4144
威望值 : 320
發帖精華 : 1
注冊日期 : 2010-04-16
串連貼紙成功 男 摩羯座 龍

回頂端 向下

回復: [已解決]lisp 圖層框選凍結問題

發表 由 adslwang 于 2011-07-16, 01:54

前輩,我可以再問你一下嗎
http://www.autocad-tw.com/t6619-topic

(while (/= (getvar "ERRNO") 52)
(command "_dimlinear" pause pause pause)
)
while 後面 那一排紅色的東西指的是什麼 我有去查它的變數 可是變數沒有值 52? 而且 /=的關系我稿不太懂,可以指點一下嘛
avatar
adslwang
高級會員
高級會員

文章總數 : 372
年齡 : 39
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 4660
威望值 : 355
回帖精華 : 1
注冊日期 : 2008-10-02
藍鵲88號
男 處女座 馬

回頂端 向下

回復: [已解決]lisp 圖層框選凍結問題

發表 由 pizg 于 2011-07-16, 02:03

ERROR CODE=52 表沒有選到物件(Entity selection: null response)
這 (/= (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 在 2011-07-16, 14:55 作了第 1 次修改
avatar
pizg
高級會員
高級會員

文章總數 : 253
年齡 : 52
來自 : 桃園縣
職業 : 建築設計;程式設計
愛好 : 音樂;攝影;繪畫;棋奕;電腦
個性 : 隨和
使用年資 : 20↑
使用版本 : 2010
積分 : 10
經驗值 : 4144
威望值 : 320
發帖精華 : 1
注冊日期 : 2010-04-16
串連貼紙成功 男 摩羯座 龍

回頂端 向下

回復: [已解決]lisp 圖層框選凍結問題

發表 由 Tiger&蘋果爸 于 2011-07-16, 04:51

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分享說明!
竊喜

____________________________________________________________________________________
avatar
Tiger&蘋果爸
系統管理員
系統管理員

文章總數 : 17328
年齡 : 41
來自 : 台北市文山區
職業 : AutoCAD顧問
愛好 : 蹓狗/戶外活動/拍照
個性 : 幽默/樂觀/善良
使用年資 : 15↑
使用版本 : AutoCAD 2016
經驗值 : 65336
威望值 : 12868
注冊日期 : 2008-04-23
2D基礎函授 2D進階函授 3D基礎函授 https://i11.servimg.com/u/f11/19/71/67/71/2d3d10.png2D+3D線上 顧問外掛程式 經典問與答讀者 藍鵲1號
2009聚會勳章 2010聚會勳章 2011聚會勳章 2012聚會勳章 2013勳章-2D基礎 2014聚會勳章 2015聚會勳章 2016聚會勳章 串連貼紙成功 男 水瓶座 兔

http://mypaper.pchome.com.tw/kv1012tiger

回頂端 向下

回復: [已解決]lisp 圖層框選凍結問題

發表 由 adslwang 于 2011-07-16, 07:22

前輩,謝謝您的幫忙
真是受益良多,這一些我在我的書本上找不到的可貴知識.....
我轉
avatar
adslwang
高級會員
高級會員

文章總數 : 372
年齡 : 39
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 4660
威望值 : 355
回帖精華 : 1
注冊日期 : 2008-10-02
藍鵲88號
男 處女座 馬

回頂端 向下

回復: [已解決]lisp 圖層框選凍結問題

發表 由 ginse0727 于 2011-07-16, 11:16

我也是,從這個問題中也學到了前輩很多可貴的經驗,感恩!竊喜
avatar
ginse0727
高級會員
高級會員

文章總數 : 256
年齡 : 43
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 4289
威望值 : 492
發帖精華 : 1
注冊日期 : 2010-07-12
經典問與答讀者 藍鵲61號
2011聚會勳章 男 獅子座 虎

回頂端 向下

上一篇主題 下一篇主題 回頂端


 
這個論壇的權限:
無法 在這個版面回復文章