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

news2025/3/18 8:31:28

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 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)更换你自己的事件
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'}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2317108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于eNSP的IPV4和IPV6企业网络规划

基于eNSP的IPV4和IPV6企业网络规划 前言网络拓扑设计功能设计技术详解一、网络设备基础配置二、虚拟局域网(VLAN)与广播域划分三、冗余协议与链路故障检测四、IP地址自动分配与DHCP相关配置五、动态路由与安全认证六、广域网互联及VPN实现七、网络地址转…

C#特性和反射

1。特性概念理解? 特性(Attribute)是用于在【运行时】传递程序中各种元素(比如类、属性、方法、结构、枚举、组件等)行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所…

mysql5.x和mysql8.x查看和设置隔离级别

MySQL的隔离级别 级别标志值描述读未提交READ-UNCOMMITTED0存在脏读、不可重复读、幻读的问题读已提交READ-COMMITTED1解决脏读的问题,存在不可重复读、幻读的问题可重复读REPEATABLE-READ2mysql 默认级别,解决脏读、不可重复读的问题,存在幻…

3.17学习总结

写了两道题 刚开始用的之前做组合输出的方法&#xff0c;时间超限了&#xff0c;想不出怎么优化&#xff0c;后面看了题解&#xff0c;代码如下 #include <stdio.h> #include <stdlib.h> int n,min2e9; int a[11],b[11]; //搜索 void hly(int s,int x,int y) {//当…

Blender材质 - 层权重

层权重 混合着色器 可以让 面朝向的一面显示一种材质 另一面显示另一种材质 就能实现挺不错的材质效果 移动视角 材质会跟着变化 有点类似虚幻的视差节点BumpOffset

【JavaEE】Spring Boot 日志

目录 一、日志概述二、使用日志2.1 打印日志2.2 日志框架2.2.1 门面 / 外观 模式 2.3 日志级别2.3.1 六大分类2.3.2 使用 2.4 日志级别配置2.5 日志的持久化2.6 日志文件分割2.7 日志文件格式2.8 Slf4j 简单打印日志 一、日志概述 ⽇志主要是为了发现问题, 分析问题, 定位问题…

如何用solidworks画齿轮

齿轮还是很有技术含量的,专业名词太多看不懂, 只会画 (这个东西不能自己想当然画, 齿轮之间不啮合是很有问题的,会积累磨损) 步骤1 打开设计库里的toolbox 选择正齿轮,右键生成零件 需要改的有几个关键的地方,我是只知道内圆外圆所以,对我来说最重要的是标称轴直径 (即正中间…

详解布隆过滤器及其模拟实现

目录 布隆过滤器 引入 概念 工作原理 模拟实现布隆过滤器 哈希函数集 布隆过滤器基本框架 add函数&#xff08;添加到布隆过滤器中&#xff09; contains函数&#xff08;判断是否存在该值&#xff09; 完整代码 布隆过滤器的删除 布隆过滤器的误判率 布隆过滤器的…

element-plus中DatePicker 日期选择器组件的使用

1.选择某一天 代码&#xff1a; <el-date-pickerv-model"invoice_date"type"date"placeholder"请选择日期"style"width: 200px;"clearable /> 运行效果&#xff1a; 问题所在&#xff1a;这个数据的格式不是我们后端需要的那种&…

SvelteKit 最新中文文档教程(4)—— 表单 actions

前言 Svelte&#xff0c;一个语法简洁、入门容易&#xff0c;面向未来的前端框架。 从 Svelte 诞生之初&#xff0c;就备受开发者的喜爱&#xff0c;根据统计&#xff0c;从 2019 年到 2024 年&#xff0c;连续 6 年一直是开发者最感兴趣的前端框架 No.1&#xff1a; Svelte …

力扣hot100二刷——二叉树

第二次刷题不在idea写代码&#xff0c;而是直接在leetcode网站上写&#xff0c;“逼”自己掌握常用的函数。 标志掌握程度解释办法⭐Fully 完全掌握看到题目就有思路&#xff0c;编程也很流利⭐⭐Basically 基本掌握需要稍作思考&#xff0c;或者看到提示方法后能解答⭐⭐⭐Sl…

字符串哈希从入门到精通

一、基本概念 字符串哈希是将任意长度的字符串映射为固定长度的哈希值&#xff08;通常为整数&#xff09;的技术&#xff0c;核心目标是实现O(1)时间的子串快速比较和高效查询。其本质是通过数学运算将字符串转换为唯一性较高的数值&#xff0c;例如&#xff1a; ​​​​​​…

C语言:编程设计猜数游戏

先由计算机想一个数给用户猜&#xff0c;如果猜对了&#xff0c;提示“right&#xff01;”&#xff0c;猜错了&#xff0c;提示“wrong&#xff01;及大小” 思路&#xff1a;用随机函数rand&#xff08;&#xff09;取到计算机想的数 代码&#xff1a; #include <stdio.…

win10 c++ VsCode 配置PCL open3d并显示

win10 c VsCode配置PCL open3d并显示 一、效果图二、配置步骤2.1 安装vscode2.2 pcl-open3d配置2.3 vscode中设置 三、测试代码四、注意事项及后续 一、效果图 二、配置步骤 2.1 安装vscode vscode下载链接 下载中文插件、c相关插件 2.2 pcl-open3d配置 1&#xff09;下载…

Vala 开发环境搭建

介绍 Vala 是一种使用现代高级抽象的编程语言&#xff0c;与用 C 语言编写的应用程序和库相比&#xff0c;没有施加额外的运行时要求&#xff0c;也不需要使用不同的 ABI。 Vala 使用 GObject 类型系统&#xff0c;并具有额外的代码生成例程&#xff0c;使面向 GNOME 堆栈变得简…

【网页】自制流光卡片

概述 小红书有个博主自己搞的笔记排版工具叫“流光卡片”&#xff0c;类似的还有个Markdown排版工具叫MD2Card。 我这个版本类似&#xff0c;但是自己写的东西&#xff0c;控制性更好。 初期就写了个静态页面&#xff0c;后期结合Godot快速生成&#xff0c;并可能结合JS库&a…

CSP-J/S冲奖第18天:真题解析

解题步骤 读取输入&#xff1a;首先读取整数n&#xff0c;然后读取n个正整数并存储在一个数组或容器中。 排序数组&#xff1a;对数组进行排序&#xff0c;以便后续使用双指针法高效查找。 遍历数组&#xff1a;对于每个数target&#xff0c;检查是否存在另外两个不同的数a和…

【linux】虚拟机执行sudo yum isntall perl报错 could not retrieve mirrorlist htt:

项目场景&#xff1a; 提示&#xff1a;虚拟机安装拓展包&#xff0c;sudo yum install perl Virtualbox 在不安装增强功能扩展的情况下, 无法自适应分辨率和共享剪切板等操作 问题描述 原因分析&#xff1a; 提示&#xff1a;这里填写问题的分析&#xff1a; 出现这个错误是因…

旅游类小程序界面设计

产品概述 艾啦游是一款互联网旅游类小程序&#xff0c;致力于国内精品旅游&#xff0c;以及拥有自由行、专属热榜单、出行攻略等诸多功能&#xff0c;汇聚了许多国内的人气景点&#xff0c;与诸多城市的酒店也保持合作&#xff0c;打造一体式旅行服务&#xff0c;更有不断上新…

DQN 玩 2048 实战|第三期!优化网络,使用GPU、Env奖励优化

视频讲解&#xff1a; DQN 玩 2048 实战&#xff5c;第三期&#xff01;优化网络&#xff0c;使用GPU、Env奖励优化 1. 仅考虑局部合并奖励&#xff1a;目前的奖励只设置为合并方块时获得的分数&#xff0c;只关注了每一步的即时合并收益&#xff0c;而没有对最终达成 2048 这个…