jexC4D模型
如果你的电脑安装了不止一个版本的c4d,在不同的版本使用中,用惯了一套快捷键,想切换到另外c4d版本上面,还需要手动设置一遍,但是你如果使用ShortcutTool就可以轻松实现不同版本间的快捷键切换设置。
jexC4D模型
实现这个插件的逻辑比较简单。读取C盘的MAXON文件夹内的prefs文件即可。里面存放了你在电脑上安装的C4D所有版本的缓存信息,其中就包含了快捷键的存储。
jexC4D模型
jexC4D模型
获取各版本的快捷键信息 jexC4D模型
快捷键信息一般存储为res格式,里面包含了大约400多项快捷键配置。我们通过搜索这个res格式,并保存它的文件名和路径。
jexC4D模型
创建一个GUI类继承gui.GeDialog并初始化两个属性用于存储信息。
jexC4D模型
jexC4D模型
class ShortcutTool(gui.GeDialog):
jexC4D模型
ID_STATIC_TEXT1 = 10000
jexC4D模型
ID_COMBOBOX1 = 10001
jexC4D模型
ID_SAVE = 20000
jexC4D模型
ID_INPUT = 30000
jexC4D模型
jexC4D模型
def __init__(self):
jexC4D模型
self.dict = self.init_value() if self.init_value() else {}
jexC4D模型
self.list = []
jexC4D模型
jexC4D模型
遍历文件夹寻找res,这里没有粗暴的walk所有文件,因为在MAXON内还有其他文件也是res格式。为了避免把无关的信息过滤,把路径更明确之后再walk。
jexC4D模型
jexC4D模型
def init_value(self):
jexC4D模型
dct = {}
jexC4D模型
file = c4d.storage.GetUserSiteSpecificPath()
jexC4D模型
if file.split('\\')[5].upper() == "MAXON":
jexC4D模型
fn = os.path.join(*file.split('\\')[:6])
jexC4D模型
fn_dirs = os.listdir(fn)
jexC4D模型
for fn_dir in fn_dirs:
jexC4D模型
if os.path.isdir(os.path.join(fn, fn_dir)) and 'Cinema 4D' in fn_dir:
jexC4D模型
sub_files = os.listdir(os.path.join(fn, fn_dir))
jexC4D模型
for sub_file in sub_files:
jexC4D模型
sub_fn = os.path.join(fn, fn_dir, sub_file)
jexC4D模型
if 'prefs' in sub_file and os.path.isdir(sub_fn):
jexC4D模型
key_name = fn_dir.split('_')[0]
jexC4D模型
if key_name not in dct.keys():
jexC4D模型
dct[key_name] = []
jexC4D模型
for dirpath, dirnames, filenames in os.walk(sub_fn):
jexC4D模型
for filename in filenames:
jexC4D模型
if '.res' in filename or 'shortcuttable' in filename:
jexC4D模型
dct[key_name].append([filename, os.path.join(dirpath, filename)])
jexC4D模型
for dirname in dirnames:
jexC4D模型
if 'shortcuts' in dirname:
jexC4D模型
files = os.listdir(os.path.join(dirpath, dirname))
jexC4D模型
for file in files:
jexC4D模型
if '.res' in file or 'shortcuttable' in file:
jexC4D模型
dct[key_name].append([file, os.path.join(dirpath, dirname, file)])
jexC4D模型
return dct
jexC4D模型
else:
jexC4D模型
return False
jexC4D模型
jexC4D模型
创建GUI jexC4D模型
根据得到的res文件数量,创建GUI和下拉框。为GUI设置菜单和ComboBox。
jexC4D模型
读取self.dict添加combobox的选项。
jexC4D模型
jexC4D模型
def CreateLayout(self):
jexC4D模型
self.SetTitle("ShortcutTool")
jexC4D模型
self.MenuSubBegin('File')
jexC4D模型
self.MenuAddString(self.ID_SAVE,'Save As')
jexC4D模型
self.MenuAddString(self.ID_INPUT, 'Load new project..')
jexC4D模型
self.MenuFinished()
jexC4D模型
if self.GroupBegin(0,c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT,cols=1, rows=3):
jexC4D模型
self.GroupBorderSpace(5,5,5,5)
jexC4D模型
self.AddStaticText(self.ID_STATIC_TEXT1, c4d.BFH_LEFT, name="Load Project:")
jexC4D模型
self.AddComboBox(self.ID_COMBOBOX1, c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT)
jexC4D模型
n = 1
jexC4D模型
if self.dict:
jexC4D模型
for i,(key,values) in enumerate(self.dict.items()):
jexC4D模型
for j,value in enumerate(values):
jexC4D模型
self.AddChild(self.ID_COMBOBOX1, n, key + " :: " + value[0])
jexC4D模型
self.list.append(value[1])
jexC4D模型
n += 1
jexC4D模型
self.AddDlgGroup(c4d.DLG_OK | c4d.DLG_CANCEL)
jexC4D模型
self.GroupEnd()
jexC4D模型
return True
jexC4D模型
jexC4D模型
绑定事件响应 jexC4D模型
为按钮设置响应函数。当点击确定按钮,导入快捷键方案。并提示安装完成,关闭GUI窗口。当点击取消按钮,关闭GUI窗口。
jexC4D模型
jexC4D模型
def Command(self, m_id, msg):
jexC4D模型
if m_id == c4d.DLG_OK:
jexC4D模型
n_id = self.GetInt32(self.ID_COMBOBOX1)
jexC4D模型
path = self.list[n_id-1]
jexC4D模型
if c4d.gui.LoadShortcutSet(path, False):
jexC4D模型
c4d.gui.MessageDialog("Load successfully!")
jexC4D模型
self.Close()
jexC4D模型
else:
jexC4D模型
c4d.gui.MessageDialog("Fail to load!",type=c4d.GEMB_ICONSTOP)
jexC4D模型
jexC4D模型
if m_id == c4d.DLG_CANCEL:
jexC4D模型
self.Close()
jexC4D模型
jexC4D模型
考虑到可能有其他的快捷键配置方案没有被收集,设置了自定义导入。
jexC4D模型
jexC4D模型
def Command(self, m_id, msg):
jexC4D模型
jexC4D模型
if m_id == self.ID_SAVE:
jexC4D模型
file = c4d.storage.GetUserSiteSpecificPath()
jexC4D模型
fn = os.path.join(*file.split('\\')[:7])
jexC4D模型
new_fn = os.path.join(fn,'prefs','shortcuts')
jexC4D模型
try:
jexC4D模型
path = c4d.storage.SaveDialog(type=c4d.FILESELECTTYPE_ANYTHING, title='Save Shortcut Project', force_suffix='res', def_path=new_fn)
jexC4D模型
if c4d.gui.SaveShortcutSet(path):
jexC4D模型
c4d.gui.MessageDialog("Save successfully!")
jexC4D模型
else:
jexC4D模型
c4d.gui.MessageDialog("Fail to load!", type=c4d.GEMB_ICONSTOP)
jexC4D模型
except TypeError:
jexC4D模型
c4d.gui.MessageDialog("Fail to load!", type=c4d.GEMB_ICONSTOP)
jexC4D模型
jexC4D模型
if m_id == self.ID_INPUT:
jexC4D模型
file = c4d.storage.GetUserSiteSpecificPath()
jexC4D模型
fn = os.path.join(*file.split('\\')[:7])
jexC4D模型
new_fn = os.path.join(fn, 'prefs')
jexC4D模型
path = c4d.storage.LoadDialog(type=c4d.FILESELECTTYPE_ANYTHING, title='Load Shortcut Project', flags=c4d.FILESELECT_LOAD, force_suffix='', def_path=new_fn)
jexC4D模型
if c4d.gui.LoadShortcutSet(path,False):
jexC4D模型
c4d.gui.MessageDialog("Load successfully!")
jexC4D模型
self.Close()
jexC4D模型
else:
jexC4D模型
c4d.gui.MessageDialog("Fail to load!", type=c4d.GEMB_ICONSTOP)
jexC4D模型
return True
jexC4D模型
jexC4D模型
以上,就是本次实现快捷方式切换的插件。
jexC4D模型
【脚本安装】 jexC4D模型
1.将ShortcutTool文件夹拷贝C4D安装目录D:\ProgramFiles\MaxonCinema4DR26\plugins下,重新启动C4D(请根据个人安装位置放置
jexC4D模型
2.重新打开C4D之后,shift+F12打开【命令管理器】,在搜索框中 输入ShortcutTool。同时设置快捷键。
jexC4D模型
3.将ShortcutTool拖入C4D的窗口合适的位置,保存窗口布局方便使用。
jexC4D模型
jexC4D模型
【使用步骤】 jexC4D模型
1.点击插件按钮启动。
jexC4D模型
2.在下拉菜单中选择要切换的快捷键方案。
jexC4D模型
3.如果下拉菜单中没有对应的快捷键方案,可以点击file指定路径加载。
jexC4D模型
jexC4D模型
【版本信息】C4DR18及以上。
jexC4D模型
【作者信息】西技大神
C4D插件:C4D不同版本之间切换快捷键设置插件ShortcutTool 1.0(快捷键,切换快捷键,设置快捷键,版本切换,C4D插件,ShortcutTool,plugin),版本为ShortcutTool 1.0/c4d r18+,分类属于常规辅助,软件语言为中文,支持PC(Windows) , MAC(Mac OS)系统平台,安装好的插件会出现在CINEMA 4D软件的插件(扩展)菜单下拉位置,附件大小约298.57 KB,下载方式为本地下载。更多不错常规辅助下载,尽在C4D模型-C4D.COM。
[使用声明]:《C4D不同版本之间切换快捷键设置插件ShortcutTool 1.0》插件仅供个人或学生测试试用,商业用途请前往插件官网购买正版。该插件严禁商用、传播或转载,请在下载后24小时内予以删除。常规辅助插件来源于网络,如果侵犯了你的权利,请提供作品书面证明,请联系网站客服:2427120@qq.com删除下架处理。