获取键盘和鼠标输入

C4D API中有两种方法获取键盘和鼠标输入, GetInputStatus, GetInputEvent。 两者都是全局的(C++ c4d_gui, python c4d.gui),在GeDialog和GeUserArea类中,这些方法COFFEE中木有。

GetInputState拉取输入设备的当前状态(查看当前鼠标键是否按下,或者某个键当前被按下)

GetInputEvent 获取时间队列中的下一个事件。

在两种情况下,结果都是基于常量存在BaseContainer中,这些常量存在c++和python api中的event页面

例子

Python: 某个脚本执行时检测某个按键是否按下

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: 脚本执行时检测哪个修改器被按下

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 是一个bit掩码。掩码允许一个int中体现多个二进制状态,掩码中,每个二进制槽可以是开或者关,第一个槽中的值需要诚意1(2的0次方),第二个乘以2
2(2的1次方)以此类推。

检测某个槽是否为真,使用bit的AND操作符,python和c++中都是&操作符。针对int检测那个槽,这里使用QSHIFT, QCTRL, QALT表示。

推荐阅读更多精彩内容