Blender-MCP服务源码4-初始化项目解读

Blender-MCP服务源码4-初始化项目解读

上篇文章针对Blender开发框架完成了一个基础模板的搭建,并在Blender中成功进行了运行,那这个初始化项目中是如何进行页面效果呈现的,尝试手动进行功能精简来拆解项目代码


1-核心知识点

  • 1)如何绘制Blender的插件UI->如何编写自己的UI界面
  • 2)了解如何快速使用Blender的开发框架->知道在哪里添加自己的核心业务

2-思路整理

  • 1)Blender开发框架-如何快速的搭建项目
    • 1)main.py修改项目配置
    • 2)create.py创建项目
    • 3)test.py进行blender调试
  • 2)只需要在AddonPanels.py修改业务逻辑即可
    • 1)因为当前项目依赖test.py进行调试->框架中使用了国际化不能随便移除
    • 2)尝试了多次,如果是尝试核心业务就不要删除代码的逻辑和目录结构
    • 3)代码的调试和发布都是编排好的脚本->不要乱动

3-参考网址


4-上手实操

1-定位代码
  • 右侧:示例插件
  • 左侧:示例功能
  • 文字定位

定义在一个字典中,针对左右的英文再进行代码定位

  • 代码定位

貌似核心的代码都在这个文件中[AddonPanels.py](Blender-MCP在进行插件安装时候-也只有一个blender插件addon.py)-> 貌似我们已经快要接触到代码的本质了

python 复制代码
import bpy

from ..config import __addon_name__  # 导入插件名称常量
from ..operators.AddonOperators import ExampleOperator  # 导入自定义操作符类
from ....common.i18n.i18n import i18n  # 导入国际化函数
from ....common.types.framework import reg_order  # 导入注册顺序装饰器


# 基础面板类
class BasePanel(object):
    bl_space_type = "VIEW_3D"  # 面板所在的空间类型为 3D 视图
    bl_region_type = "UI"  # 面板所在的区域类型为 UI 区域
    bl_category = "ExampleAddon"  # 面板的分类名称

    @classmethod
    def poll(cls, context: bpy.types.Context):
        return True  # 始终显示面板


# 使用注册顺序装饰器,值为 0,优先级较高
@reg_order(0)
class ExampleAddonPanel(BasePanel, bpy.types.Panel):
    bl_label = "Example Addon Side Bar Panel"  # 面板标签名称
    bl_idname = "SCENE_PT_sample"  # 面板的唯一标识符

    def draw(self, context: bpy.types.Context):
        addon_prefs = context.preferences.addons[__addon_name__].preferences  # 获取插件偏好设置

        layout = self.layout  # 获取布局对象

        # 显示国际化文本和偏好设置中的数字
        layout.label(text=i18n("Example Functions") + ": " + str(addon_prefs.number))
        # 显示并允许编辑文件路径属性
        layout.prop(addon_prefs, "filepath")
        layout.separator()  # 添加分隔线

        row = layout.row()  # 创建一行布局
        # 在同一行显示并允许编辑数字和布尔属性
        row.prop(addon_prefs, "number")
        row.prop(addon_prefs, "boolean")

        # 添加操作符按钮
        layout.operator(ExampleOperator.bl_idname)

    @classmethod
    def poll(cls, context: bpy.types.Context):
        return True  # 始终显示面板


# 这个面板将在 ExampleAddonPanel 之后绘制,因为其注册顺序值更高
@reg_order(1)
class ExampleAddonPanel2(BasePanel, bpy.types.Panel):
    bl_label = "Example Addon Side Bar Panel"  # 面板标签名称
    bl_idname = "SCENE_PT_sample2"  # 面板的唯一标识符

    def draw(self, context: bpy.types.Context):
        layout = self.layout  # 获取布局对象
        layout.label(text="Second Panel")  # 显示标签文本
        layout.operator(ExampleOperator.bl_idname)  # 添加操作符按钮

2-待完善

通过对上面代码的阅读,去除代码中高阶的国际化等功能,我们只保留一个【按钮】点击之后将窗口的物体放大2倍!
后续会尝试在Blender中部署一个socket和MCP本地的服务器进行通讯

  • 1)文字定义,否则页面展示不出来
  • 2)定义的操作

比如页面上要定义的点击事件,示例:点击按钮让图形缩小0.8倍(3步骤)

  • 1)先定义Operator->直接拷贝示例后修改
  • 2)再配置你的Operator->在国际化配置中配置
  • 3)更换你自己的事件
python 复制代码
import bpy

from ..config import __addon_name__
from ..preference.AddonPreferences import ExampleAddonPreferences

# 自己定义的Operator
class BlenderMCPServer(bpy.types.Operator):
    '''ExampleAddon'''
    bl_idname = "object.blender_mcp_server"
    bl_label = "BlenderMCPServer"

    # 确保在操作之前备份数据,用户撤销操作时可以恢复
    bl_options = {'REGISTER', 'UNDO'}

    @classmethod
    def poll(cls, context: bpy.types.Context):
        return context.active_object is not None

    def execute(self, context: bpy.types.Context):
        addon_prefs = bpy.context.preferences.addons[__addon_name__].preferences
        assert isinstance(addon_prefs, ExampleAddonPreferences)

        # manipulate the scale directly
        context.active_object.scale *= 0.8
        return {'FINISHED'}



相关推荐
九河_2 天前
【blender】使用bpy对一个obj的不同mesh进行不同的材质贴图(涉及对bmesh的操作)
blender·材质·贴图·bpy
渲染101专业云渲染16 天前
云端算力革命:川翔云电脑如何重新定义创作自由
云计算·电脑·blender·maya·houdini
3D虚拟工厂18 天前
3D虚拟工厂
3d·vue3·blender·数字孪生·three.js
Tipriest_19 天前
介绍常见的图像和视频存储格式以及其优劣势
音视频·blender·视频格式·图像格式
有过~21 天前
Blender 4.4.3三维动画建模和渲染软件Win/Mac双端资源下载
blender
技术小甜甜21 天前
[Blender] 高质量材质推荐第四弹:25-30号精选纹理资源详解
blender·游戏开发·材质·建模·资源
下次见咯!22 天前
Blender基础知识-操作模式、基本操作、渲染、灯光、材质、粒子系统、动画
blender
AllBlue23 天前
fbx导入blender结构错乱,但在threejs中加载正常
blender·threejs
灵境引路人1 个月前
【Blender】Blender 基础:导入&导出
blender
技术小甜甜1 个月前
【Blender Texture】【游戏开发】高质感 Blender 4K 材质资源推荐合集 —— 提升场景真实感与美术表现力
blender·游戏开发·材质·texture