blender瞎玩8: 制作maya工具架的思路
利用blen中gpu模块,制作状似shelf的互动窗口
(1)
说实话,研究了一周,我发现我搞不懂这个课题,所以本文只做抛砖引玉用
主要思路来源于油管的Jayanam
Jayanam的视频教程: https://www.youtube.com/watch?v=XekNz6kqz_g
Jayanam的github程序: https://github.com/jayanam/bl_ui_widgets
blender官方文档gpu模块: https://docs.blender.org/api/current/gpu.html
代码利用了其中的“2D Rectangle”思路
我简单修改了一下Jayanam的代码,但是对原理一知半解,有探究精神的同志们请自行浏览以上网址研究
(2)
Jayanam的程序也是一个试验性程序,效果如下图,

其中有按钮变色,滑块,箭头,文本,勾选框等几种功能,甚至还可以拖拽窗口
Jayanam的程序需要按shift+ctrl+f打开,但是我的mac系统打不开,所以我改成了边栏的一个按钮,如下图,

我只保留了按钮一种功能,毕竟要做工具架嘛,效果如下图,

虽然是个极其简陋的shelf,不过嘛,能用就行
加入了三个maya常用功能
冻结变换(应用全部变换),居中枢轴(设置原点到几何中心),统一法线(法向-重新计算外侧)
Jayanam的程序打开以后需要按esc关闭,我发现这里有一个bug,如果不关闭,切换场景时会报错,

两次报错终端会显示以下信息,

至于原因,下文有可能的解释,
不过我不是很懂
既然不知道咋改,那干脆无视了hh
(3)
如果你像我一样只想用一用shelf功能,那可以按照以下方法修改代码,
[1]
打开drag_panel_op.py文件,
在“class DP_OT_draw_operator(BL_UI_OT_draw_operator):”类中,
“def __init__(self):”方法中,加入以下代码,
如下图,原代码只有两个按钮“Scale”和“Rotate”,

这两个按钮的代码我就改了两处,
名字self.button1.text,和位置BL_UI_Button(20,20,30,30),如下图,

模仿同样的格式增加一段代码button3,位置为BL_UI_Button(100,20,30,30),
向右增加了40个单位,如下图,

[2]
在“def on_invoke(self, context, event):”方法中,
“widegts_panel”的组里,加入一段代码self.button3

[3]
在最后加入新方法def button3_press(self,widget)

这3个方法是按钮的功能,比如
bpy.ops.object.transform_apply(location=True, rotation=True,scale=True)
这个命令是应用全部变换,
如果你想换成“创建一个盒子”命令,
那就删掉def button1_press(self,widget)里的所有命令,改成
bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(0, 0, 0))
对了,#代表单行注释,"""*"""或'''*'''为多行注释
(4)
修改完后,压缩整个文件夹,如下

然后在blen设置里点插件安装,选择刚才的压缩包安装插件,如下

如果你进行多次修改多次安装,记得移除之前的插件
(5)
附上我修改过的代码,仅供参考
对了,我上篇文章的创建骨架的坐标果然还是又弄错了,躯干关节的坐标还是没有居中
修改后的代码同样附上














































































