ai blender流水线制作mod第一步,画个立方体

不就是类似blender-mcp的东西吗

ai blender流水线制作mod第一步,画个立方体_哔哩哔哩_bilibili

blender 开放exec接口的插件 连接ide vscode-CSDN博客

ai流水线式调用命令-CSDN博客

复制代码
{
  "tools": [
    {
      "name": "get_all_objects",
      "path": "blender_cline/blender_api_tool.py",
      "description": "获取Blender当前场景中的所有物体",
      "parameters": [],
      "examples": [
        "[TOOL:get_all_objects]"
      ]
    },
    {
      "name": "delete_all_objects",
      "path": "blender_cline/blender_api_tool.py",
      "description": "删除Blender当前场景中的所有物体",
      "parameters": [],
      "examples": [
        "[TOOL:delete_all_objects]"
      ]
    },
    {
      "name": "create_cube",
      "path": "blender_cline/blender_api_tool.py",
      "description": "在Blender场景中创建一个立方体",
      "parameters": [],
      "examples": [
        "[TOOL:create_cube]"
      ]
    },
    {
      "name": "activate_blender",
      "path": "blender_cline/blender_api_tool.py",
      "description": "激活Blender窗口,将Blender应用带到前台",
      "parameters": [],
      "examples": [
        "[TOOL:activate_blender]"
      ]
    }
  ]
}
python 复制代码
import sys
import os
import requests
import json
import subprocess
import platform


def call_blender_api(endpoint, code):
    """
    调用Blender API执行代码
    """
    url = f"http://localhost:8080{endpoint}"
    
    payload = {
        "code": code
    }
    
    try:
        response = requests.post(url, json=payload)
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"请求错误: {e}")
        return None


def activate_blender_window():
    """
    激活Blender窗口(精确匹配窗口标题)
    """
    try:
        import pygetwindow as gw
    except ImportError:
        print("pygetwindow未安装,请运行: pip install pygetwindow")
        return False
    
    try:
        # 获取所有窗口
        all_windows = gw.getAllWindows()
        blender_window = None
        
        for window in all_windows:
            window_title = window.title.strip()
            
            # 多种可能的Blender标题格式
            if (window_title == 'Blender' or  # 基础标题
                window_title.startswith('Blender') and 
                not any(exclude in window_title.lower() for exclude in ['vscode', 'visual studio', 'code'])):
                
                # 额外检查确保不是VSCode或其他编辑器
                if ' - ' not in window_title or 'blender.exe' in window_title.lower():
                    blender_window = window
                    break
        
        if blender_window:
            print(f"激活窗口: {blender_window.title}")
            
            try:
                import win32gui
                import win32con
                
                hwnd = blender_window._hWnd
                win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
                win32gui.SetForegroundWindow(hwnd)
                
                print(f"窗口已放到最前端: {blender_window.title}")
                return True
            except ImportError:
                print("pywin32未安装,请运行: pip install pywin32")
                if blender_window.isMinimized:
                    blender_window.restore()
                blender_window.activate()
                print("Blender窗口已激活(使用pygetwindow方法)")
                return True
        else:
            print("未找到Blender窗口")
            # 显示所有窗口标题用于调试
            all_titles = gw.getAllTitles()
            print("所有窗口标题(前10个):")
            for i, title in enumerate(all_titles[:10]):
                if title.strip():
                    print(f"  {i+1}. {title}")
            return False

    except Exception as e:
        print(f"激活Blender窗口时出错: {e}")
        return False


def main():
    if len(sys.argv) < 2:
       
        print("错误: 缺少工具名称参数")
        return
    
    tool_name = sys.argv[1]
    
    if tool_name == "get_all_objects":
        code = '''
import bpy

# 获取当前场景中的所有物体
all_objects = bpy.context.scene.objects

# 打印每个物体的名称
result = []
for obj in all_objects:
    obj_info = f"obj: {obj.name}"
    result.append(obj_info)
    print(obj_info)

result
'''
        response = call_blender_api('/api/exec', code)
        
    elif tool_name == "delete_all_objects":
        code = '''
import bpy

# 选择所有对象
bpy.ops.object.select_all(action='SELECT')

# 删除选中的对象
bpy.ops.object.delete()
"所有物体已删除"
'''
        response = call_blender_api('/api/exec', code)
        
    elif tool_name == "create_cube":
        code = '''
import bpy

# 添加一个立方体
bpy.ops.mesh.primitive_cube_add(
    location=(0, 0, 0)  # 设置立方体的位置
)

# 获取新创建的立方体对象
cube = bpy.context.active_object
cube.name = "MyCube"  # 重命名立方体

f"立方体已创建,名称: {cube.name}"
'''
        response = call_blender_api('/api/exec', code)
    
    elif tool_name == "activate_blender":
        activate_blender_window()
        return
    
    else:
        print(f"错误: 未知的Blender工具 '{tool_name}'")
        return
    
    if response:
        if response['status'] == 'success':
            print(f"{tool_name} 执行成功!")
            print(f"返回结果: {response['result']}")
        else:
            print(f"{tool_name} 执行失败: {response['message']}")
    else:
        print("无法连接到Blender服务器")


if __name__ == "__main__":
    main()
相关推荐
AI英德西牛仔6 分钟前
手机怎么把AI对话导出
人工智能·ai·智能手机·豆包·deepseek·ds随心转
Old Uncle Tom8 分钟前
Claude Code 记忆系统架构分析
人工智能·ai·系统架构·agent
俊哥V29 分钟前
每日 AI 研究简报 · 2026-04-12
人工智能·ai
程序员老邢35 分钟前
【产品底稿 04】商助慧 V1.1 里程碑:爬虫入库 + MySQL + Milvus 全链路打通
java·爬虫·mysql·ai·springboot·milvus
FIT2CLOUD飞致云42 分钟前
新增工作流类型工具,对话时可选择模型与知识库,MaxKB开源企业级智能体平台v2.8.0版本发布
人工智能·ai·开源·智能体·maxkb
xixixi777771 小时前
通信产业的“全维度加速”:从5G-A商用、6G冲刺到卫星互联网密集组网
大数据·网络·人工智能·ai·多模型
ofoxcoding1 小时前
OpenClaw Nanobot 架构拆解:从源码学会 AI Agent 的骨架设计(2026)
人工智能·ai·架构
岳小哥AI1 小时前
WorkBuddy:从“我是谁”到“帮我干活”
ai·openclaw·workbuddy
阿杰学AI2 小时前
AI核心知识116—大语言模型之 目标驱动的可控架构 (简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·aigc·机械学习·目标驱动的可控架构
小年糕是糕手4 小时前
【Blender】超全 Blender 新手教程:从软件下载到做出第一个作品(下)
blender