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

[討論]AUTOLISP是否有位元碼查詢/判斷的函數?

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

[討論]AUTOLISP是否有位元碼查詢/判斷的函數?

發表 由 RyanGuo 于 2013-07-12, 05:01

AUTOCAD有蠻多用位元碼來判斷設定類型的地方,
EX:AutoCAD 2010 - Advantage Pack中的SELECTSIMILARMODE系統變數.
不知道AUTOLISP中是否有位元碼查詢/判斷的函數?
可能像是把變數和要判斷的位元值(EX:1,2,4,8,...)丟進去函數中傳回T或nil之類的函數...@@?

[追加目前有查到的用法]
logAnd->[官方英文說明]
(logAnd [int int ...])
所有int做位元式And運算,
如果其中一個int用的是位元控制值(ex:1,2,4,8,...),
那麼只有在全都具有位元控制值的時候,才會有值傳回,
所以可以用
代碼:
(if (/= (logAnd int int ...) 0)...
或是用
代碼:
(if (zerop (logAnd int int ...)...
之類的方式,來獲得T或是nil,
來控制程式執行的流程.
以上,
是目前查到的最速方法,
如果把它寫成副程式來方便呼叫的話,會是...
代碼:
(defun bw_ton (int1 bit_code)
 (/= (logAnd int1 bit_code) 0)
)
有載入這個小程式的情況下可以輸入下面指令來測試它,
(bw_ton 5 2)回傳nil
(bw_ton 5 4)回傳T

以上回答,
算是自己想出了一個符合一開始我想要的函數,
比起我一開始預訂使用的函數-使用減法慢慢逐層減去位元值,
現在這個真的是簡單上許多;P
但還是希望AutoCAD本身就有這樣的函數啊=0=
avatar
RyanGuo
初級會員
初級會員

文章總數 : 206
年齡 : 34
來自 : 屏東
職業 : 機械繪圖
愛好 : 玩遊戲
個性 : 嗚嗚男
使用年資 : 1年多
使用版本 : 2011
積分 : 3
經驗值 : 2957
威望值 : 303
注冊日期 : 2013-04-18
男 射手座 狗

回頂端 向下

回復: [討論]AUTOLISP是否有位元碼查詢/判斷的函數?

發表 由 leoneriol 于 2013-07-25, 10:07

不是很懂您想討論的"位元碼查詢/判斷"的意思

lisp中取得系統變數的設定值可以使用getvar

比如說要取得物件鎖點的系統變數設定
代碼:
(getvar "osmode")
將取得的變數儲存
代碼:
(setq osold (getvar "osmode"))
而用lisp控制系統變數的方式則是使用 setvar
代碼:
(setvar "osmode" 0)
(setvar "osmode" osold)
比照您的舉例....似乎用不到zerop 跟 logAnd,還是我會錯意了呢?
avatar
leoneriol
榮譽顧問
榮譽顧問

文章總數 : 816
年齡 : 33
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 6578
威望值 : 938
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
經典問與答讀者 藍鵲34號
2009聚會勳章 2014聚會勳章 男 雙魚座 鼠

回頂端 向下

回復: [討論]AUTOLISP是否有位元碼查詢/判斷的函數?

發表 由 RyanGuo 于 2013-07-26, 06:50

你會錯意了,
我的意思是在自己的程式中用數值方式記錄設定值.

EX:
0:執行拉伸
1:執行移動
2:執行拉伸+紀錄選取
3:執行移動+紀錄選取
所以就是第一個位元決定要執行的動作,
第二個位元決定是否要記錄選取.

但是用這方法的話就需要用到位元碼查詢或判斷,
而我後面追加的方法就是位元碼判斷的方法.
avatar
RyanGuo
初級會員
初級會員

文章總數 : 206
年齡 : 34
來自 : 屏東
職業 : 機械繪圖
愛好 : 玩遊戲
個性 : 嗚嗚男
使用年資 : 1年多
使用版本 : 2011
積分 : 3
經驗值 : 2957
威望值 : 303
注冊日期 : 2013-04-18
男 射手座 狗

回頂端 向下

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


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