C4D API中有兩種方法獲取鍵盤和鼠標(biāo)輸入, GetInputStatus, GetInputEvent。 兩者都是全局的(C++ c4d_gui, python c4d.gui),在GeDialog和GeUserArea類中,這些方法COFFEE中木有。
GetInputState拉取輸入設(shè)備的當(dāng)前狀態(tài)(查看當(dāng)前鼠標(biāo)鍵是否按下,或者某個(gè)鍵當(dāng)前被按下)
GetInputEvent 獲取時(shí)間隊(duì)列中的下一個(gè)事件。
在兩種情況下,結(jié)果都是基于常量存在BaseContainer中,這些常量存在c++和python api中的event頁面
例子
Python: 某個(gè)腳本執(zhí)行時(shí)檢測某個(gè)按鍵是否按下
import c4d
def main():
# Check any one key
bc =c4d.BaseContainer()
if c4d.gui.GetInputState(c4d.BFM_INPUT_KEYBOARD, c4d.KEY_F10,bc):
if bc[c4d.BFM_INPUT_VALUE] ==1:
print "F10 PRESSED"
else:
print "F10 NOT PRESSED"
Python: 腳本執(zhí)行時(shí)檢測哪個(gè)修改器被按下
import c4d
def main():
# Check all keys
bc =c4d.BaseContainer()
if c4d.gui.GetInputState(c4d.BFM_INPUT_KEYBOARD,c4d.BFM_INPUT_CHANNEL,bc):
print "Qualifier Bitwise:",bc[c4d.BFM_INPUT_QUALIFIER]
if bc[c4d.BFM_INPUT_QUALIFIER] & c4d.QSHIFT:
print "SHIFT PRESSED"
if bc[c4d.BFM_INPUT_QUALIFIER] & c4d.QCTRL:
print "CONTROL PRESSED"
if bc[c4d.BFM_INPUT_QUALIFIER] & c4d.QALT:
print "ALT PRESSED"
注意此例中,BFM_INPUT_QUALIFIER 是一個(gè)bit掩碼。掩碼允許一個(gè)int中體現(xiàn)多個(gè)二進(jìn)制狀態(tài),掩碼中,每個(gè)二進(jìn)制槽可以是開或者關(guān),第一個(gè)槽中的值需要誠意1(2的0次方),第二個(gè)乘以2
2(2的1次方)以此類推。
檢測某個(gè)槽是否為真,使用bit的AND操作符,python和c++中都是&操作符。針對(duì)int檢測那個(gè)槽,這里使用QSHIFT, QCTRL, QALT表示。