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

news/2025/3/17 22:57:32/

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-参考网址

  • Blender-MCP-Github地址:https://github.com/ahujasid/blender-mcp
  • B站大佬开源Blender开发框架:https://github.com/xzhuah/BlenderAddonPackageTool
  • B站大佬开源Blender开发框架教程

4-上手实操

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

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

  • 代码定位

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

import bpyfrom ..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"  # 面板的分类名称@classmethoddef 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)@classmethoddef 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)更换你自己的事件
import bpyfrom ..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'}@classmethoddef poll(cls, context: bpy.types.Context):return context.active_object is not Nonedef execute(self, context: bpy.types.Context):addon_prefs = bpy.context.preferences.addons[__addon_name__].preferencesassert isinstance(addon_prefs, ExampleAddonPreferences)# manipulate the scale directlycontext.active_object.scale *= 0.8return {'FINISHED'}




http://www.ppmy.cn/news/1579934.html

相关文章

kotlin中的界面组件

我们学习Android第一节应该都是界面的布局,下列我将讲述jet pack中常用的界面组件如下 UI 构建(Compose)、列表展示(RecyclerView)、 导航管理(Navigation)和滑动交互(ViewPager2&…

【NLP 36、CRF条件随机场 —— 源码解读】

目录 一、CRF —— 条件随机场: 1.CRF - 转移矩阵 2.发射矩阵 3.结合发射矩阵和转移矩阵 4.CRF —— Loss定义 二、CRF —— 源码解读 1.初始化CRF模块 2.随机初始化CRF参数 3.前向计算 4.维特比算法解码 5.验证输入张量 6.计算分数 7.计算归一化因子 8.解码标签序…

网络运维学习笔记(DeepSeek优化版) 017 HCIA-Datacom综合实验02

文章目录 综合实验2sw3sw4gwcore1(sw1)core2(sw2)ISP 综合实验2 sw3 vlan 2 stp mode stp int e0/0/1 port link-type trunk port trunk allow-pass vlan 2 int e0/0/2 port link-type trunk port trunk allow-pass vlan 2 int e…

Apache Pol (excel)

是一个处理微软各种文件格式的开源项目,一般情况下,POI都是用来操作EXCEL文件的 读和写操作 test测试 /* 使用POI操作Excel文件 */ public class POITest { /* 通过POI创建Excel文件并写入文件内容 */ public static void write() throws Exception{ /…

vue 识别word表格中的图片

但是识别不出 .emf .tif tif是不显示 emf这是不识别 <template><div class"container"><h2>提取 Word 表格中的图片</h2><input type"file" change"handleFileUpload" accept".docx"><div v-if"…

某大厂自动化工程师面试题

一些大厂的自动化工程师面试题汇总: 基础知识类 请解释什么是PLC(可编程逻辑控制器)?什么是PID控制?它在自动化系统中的作用是什么?请描述一下工业4.0的基本概念。编程与控制系统类 你熟悉哪些PLC编程语言?请举例说明。如何在SCADA系统中实现数据采集和监控?请解释一下…

获取pytdx行情服务器ip和port

之前一直用的api.connect(124.71.187.122, 7709)突然不能用了&#xff0c;调查了一下&#xff0c;给出如下解决方案 打开通达信客户端&#xff0c;选项->通讯设置。 勾掉"登录时查找最快的主站"&#xff0c;手动选择"行情主站"&#xff0c;点确定。 点…

【SpringMVC】入门版

1.基本概念 1.1三层架构 三层架构也就是我们常说的b/s架构中的表现层&#xff0c;业务层和持久层,每层都各司其职&#xff0c;下面来分别讲解这三层的作用。 表现层&#xff1a; 也就是我们常说的web层。它负责接收客户端的请求&#xff0c;向客户端响应结果&#xff0c;通…