主要参考这位大佬的文章改写的。
物体名称显示可以在属性栏那里,物体属性->视图显示->勾选“名称”,就可以显示名称,但是名称显示太小看不清楚,颜色也是黑的,于是瞎折腾就有了以下这些操作。
作为新手先多说下blender配置,不然,没法调出来执行,熟悉的可以跳过
界面配置
以本人blender 2.92为例,先打开配置窗口,菜单“编辑”->“偏好设置”。
-
勾选“开发选项”,不然没法找到自己写的脚本插件
勾选“python工具提示”,对写脚本很方便,鼠标放那,就会提示对应调用的API
-
安装一个view3d插件,不然调用bpy_extras.view3d_utils会报错,没有这个模块
-
调出文本编辑界面
先多拉出来一个界面,在左上角下拉选中“文本编辑器”图标切换到文本编辑界面
显示物体名称
参考大佬的代码,主要是先获取将物体的location从3D坐标转化为viewport显示界面的2d坐标,用bpy_extras.view3d_utils.location_3d_to_region_2d函数。再调用bpy.types.SpaceView3D.draw_handler_add画出来。
具体代码如下:
import bpy
import bgl
import blf
import bpy_extras
from bpy_extras import view3d_utils
class show_name_tool(bpy.types.Operator):
bl_idname = "show.largername"
bl_label = "larger name"
bl_description = "display additional information in the 3D viewport"
bl_options = {"REGISTER", "UNDO"}
def show_name(self, context):
rgb_label = (1, 1.0, 1.0, 1.0)
font_size = 16
font_id = 0
list_obj = bpy.data.objects
for ob in list_obj:
if ob.show_name:
#ob = context.object
v = self.gl_pts(context, ob.location)
bgl.glClearColor(*rgb_label)
if v:
blf.color(font_id, rgb_label[0], rgb_label[1], rgb_label[2], rgb_label[3])
blf.size(font_id, font_size, 72)
blf.position(font_id, v[0], v[1], 0)
blf.draw(font_id, ob.name)
def gl_pts(self, context, v):
return bpy_extras.view3d_utils.location_3d_to_region_2d(context.region, context.space_data.region_3d, v)
def execute(self, context):
bpy.types.SpaceView3D.draw_handler_add(self.show_name, (context,), 'WINDOW', 'POST_PIXEL')
return {'FINISHED'}
def register():
bpy.utils.register_class(show_name_tool)
def unregister():
bpy.utils.unregister_class(show_name_tool)
if __name__ == '__main__':
register()
手动运行
- 点击
文本编辑这个图标,快捷键alt+p,安装这个自己写的插件。再空格调出搜索界面
或者在菜单栏,“编辑”->“操作搜索”或“菜单搜索”也可以调出这个界面。然后搜索bl_label 对应的值,这里是larger name。就可以运行插件了。 - 查看运行结果是否正常,可以在菜单栏,“窗口”->“切换系统控制台”,查看运行结果
- 代码添加了条件,需要显示的物体,勾选显示物体名称,才会显示改变改变样式的名称
自己可以把相关代码删除。 - 鼠标选择下物体,才会切换显示效果。应该还可以优化下,不用点击的呀!
具体显示的效果:
脚本新手可以查看官方教程,网上大多贴的也是官方的教程
官方脚本简介
官方脚本API
引用的大佬文章