blender瞎玩1_自制(?)Maya热盒的笨方法(一)
通过修改官方插件pie menu实现maya热盒
(1)
一些抱怨:
身为maya用户,信仰虽然是有的,但是是可忍孰不可忍呐!近年来maya越来越臃肿,启动的越来越慢,每次开机打开maya,我甚至可以拿起手机看一章小说,再看电脑,还是启动界面!你说慢点也不是完全不能忍,结果两周前我和往常一样打开maya,然后。。。就没然后了,它打不开了!
于是我们来说说blen,总体来说blen是个好软件,我只玩建模,maya的建模功能blen也能胜任不少,最重要的是,
Blen能秒开!ψ(`∇´)ψ
不过有个问题,告别了maya的甩鼠标操作,我表示我浑身难受,再看blen,
为什么挤出要分整体挤出/沿法线挤出/各个面挤出/内插面!
为什么挤出倒角都要点一下再拖动才能启动!
为什么knife不能ctrl环切也不能在物体外拖动切分!
(2)
进入正题:
先说了,本人不会编程
本来想求助于网友,用了用老外的“Blender设置Maya操作习惯和快捷键”,感觉不好使,有用的功能太少。又找到看起来很好使的Pie Menu Editor,一看,16刀!算了,顺便说一句,maya里自带类似的玩意
不会编程就不能创作新的脚本,然后我突然想起来,blen是个开源的啊,我不会做新脚本,我可以改老脚本啊
(3)
我们要下手的就是大家常用的自带脚本
Interface:3D Viewport Pie Menus

它的路径在插件界面有显示,我的mac路径是
/应用程序/Blender.app/contents/resources/2.81/scripts/addons/space_view3d_pie_menus/
如果是window系统,大概在appdata或者program files里
打开这个文件夹,里面有所有的子插件,随便选哪个都可以,虽然blen用户觉得很好用,但是我这个maya用户觉得这几个子插件没一个有用的,

我决定改pie_modes_menu.py这个文件,即blen的切换模式的菜单,既然我们的目的是做出类似maya的右键热盒菜单,那这个菜单比较类似,更容易改。(其实我觉得pie_save_open_menu.py这个插件最没用:-D)。对了,记得【改之前备份】
打开一看,卧槽天书啊!没事,我们可以xj8改嘛,不行了就把备份文件覆盖一下。

(4)
经过我的xj8猜想,大概class是组的意思,(Operator)组会调用blen内部指令,(Menu)组就是最终表现出的菜单
举个(Operator)组的例子,功能是切换到点模式,
class PIE_OT_ClassVertex(Operator):
bl_idname = "class.vertex"
bl_label = "Class Vertex"
bl_description = "Vert Select Mode"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
if context.object.mode != "EDIT":
bpy.ops.object.mode_set(mode="EDIT")
bpy.ops.mesh.select_mode(use_extend=False, use_expand=False, type='VERT')
if bpy.ops.mesh.select_mode != "EDGE, FACE":
bpy.ops.mesh.select_mode(use_extend=False, use_expand=False, type='VERT')
return {'FINISHED'}
上面5行是本组特征,大概分别是是组名,索引名,显示名,描述,(不知道是啥),这几个。
下面9行就是组内容,当当前模式不是“编辑模式”时,进入“编辑模式”,然后进入“点选择模式”,当当前模式不是“边选择/面选择模式”时,也进入“点选择模式”。
这个组里我们只要记住索引名class.vertex就行了
(5)
再举个(Menu)组的例子,因为这个组太长了就放一小段吧
找到class PIE_MT_ObjectEditMode(Menu):这一行
(别忘了善用ctrl+f搜索)
elif ob and ob.type == 'MESH' and ob.mode in {'OBJECT', 'SCULPT', 'VERTEX_PAINT',
'WEIGHT_PAINT', 'TEXTURE_PAINT',
'PARTICLE_EDIT', 'GPENCIL_EDIT'}:
pie = layout.menu_pie()
# 4 - LEFT
pie.operator("class.pieweightpaint", text="Weight Paint", icon='WPAINT_HLT')
# 6 - RIGHT
pie.operator("class.pietexturepaint", text="Texture Paint", icon='TPAINT_HLT')
# 2 - BOTTOM
pie.menu("MENU_MT_objecteditmodeothermodes", text="Edit Modes", icon='EDITMODE_HLT')
# 8 - TOP
pie.operator("class.object", text="Object/Edit Toggle", icon='OBJECT_DATAMODE')
# 7 - TOP - LEFT
pie.operator("sculpt.sculptmode_toggle", text="Sculpt", icon='SCULPTMODE_HLT')
# 9 - TOP - RIGHT
pie.operator("class.pievertexpaint", text="Vertex Paint", icon='VPAINT_HLT')
# 1 - BOTTOM - LEFT
pie.separator()
# 3 - BOTTOM - RIGHT
if context.object.particle_systems:
pie.operator("class.pieparticleedit", text="Particle Edit", icon='PARTICLEMODE')
else:
pie.separator()
这个组就是pie menu的8个方向对应功能,从上到下分别是,左/右/上/下/左上/右上/左下/右下,我不知道官方注释的数字是个啥意思,不过不管他也行。
如果我想改“左边”的功能,就改下面这行
# 4 - LEFT
pie.operator("class.pieweightpaint", text="Weight Paint", icon='WPAINT_HLT')
把pie.operator()括号里的内容改掉就行,"class.pieweightpaint”即上面定义过的组的索引名,text="Weight Paint”是在菜单上显示的文字,icon='WPAINT_HLT’是图标。
比如说我想把“左边”功能改成和Maya一样的点选择模式,就改成
pie.operator("class.vertex", text="Vertex Mode”, icon='VERTEXSEL')
(6)
我总结了一下有用的信息
功能/组名/图标名
点模式 class.vertex VERTEXSEL
边模式 class.edge EDGESEL
面模式 class.face FACESEL
物体模式 class.object OBJECT_DATAMODE
顶点绘制 class.pievertexpaint VPAINT_HLT
权重绘制 class.pieweightpaint WPAINT_HLT
贴图绘制 class.pietexturepaint TPAINT_HLT
粒子 class.pieparticleedit PARTICLEMODE
雕刻 sculpt.sculptmode_toggle SCULPTMODE_HLT
其中雕刻似乎直接调用了内部指令
以下是我改的代码:
# 4 - LEFT
pie.operator("class.vertex", text="Vert Select Mode", icon='VERTEXSEL')
# 6 - RIGHT
pie.operator("sculpt.sculptmode_toggle", text="Sculpt", icon='SCULPTMODE_HLT')
# 2 - BOTTOM
pie.operator("class.face", text="Face Select Mode", icon='FACESEL')
# 8 - TOP
pie.operator("class.edge", text="Edge Select Mode", icon='EDGESEL')
# 7 - TOP - LEFT
pie.separator()
# 9 - TOP - RIGHT
pie.operator("class.object", text="Object Mode", icon='OBJECT_DATAMODE')
# 1 - BOTTOM - LEFT
pie.separator()
# 3 - BOTTOM - RIGHT
pie.separator()
只用了点/线/面/物体/雕刻这5个,其中pie.separator()是空图标的意思。改完这个就可以ctrl+s保存了,
重启blen,保证这个插件是打开状态,打开按键映射,在搜索按键绑定状态搜索所有right mouse,把所有冲突按键前面的勾关掉,然后在搜索名称状态搜索pie或者mode switch(ctrl tab),反正你知道你改的是哪个就好,

把快捷键改成鼠标右键,完事。
(老实说,其实我改的是鼠标中键,因为我在用maya的时候也是中键右键互换的,而且blen的右键菜单还有点用)

【注意】如果你打开blen发现pie menu这个插件不管用,那很大可能是你刚才改完的代码有bug,也许是你改代码的时候用了中文输入法?也许是首行缩进没对准?那我就不知道了
















































































