news 2026/2/28 19:21:14

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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]" ] } ] }
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()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/26 16:50:46

停车场管理系统改进:HunyuanOCR识别入场券二维码及文字

停车场管理系统改进&#xff1a;HunyuanOCR识别入场券二维码及文字 在城市交通枢纽、大型商超或机场周边的停车场里&#xff0c;一个看似简单的问题常常让运营方头疼不已&#xff1a;一张皱巴巴、反光严重甚至被手指遮挡了一角的纸质入场券&#xff0c;能否被系统准确“读懂”&…

作者头像 李华
网站建设 2026/2/26 21:54:35

司法公开透明:判决书PDF OCR识别上线裁判文书网

司法公开透明&#xff1a;判决书PDF OCR识别上线裁判文书网 在数字政府建设不断提速的今天&#xff0c;公众对司法公开的期待早已不止于“能看”&#xff0c;而是要求“可搜、可查、可分析”。然而长期以来&#xff0c;大量历史判决书以扫描图像形式封存在档案库中——它们清晰…

作者头像 李华
网站建设 2026/2/27 18:06:01

知识产权维权:盗版书籍封面OCR识别发起侵权诉讼

知识产权维权&#xff1a;盗版书籍封面OCR识别发起侵权诉讼 在电商平台和社交网络上&#xff0c;一本售价39元的《高等数学》教材月销过万&#xff0c;价格不到正版一半&#xff1b;封面看似正规&#xff0c;出版社名称却错印成“清化大学”——这已不是简单的印刷瑕疵&#xf…

作者头像 李华
网站建设 2026/2/18 4:10:54

揭秘C#中的不安全类型:如何高效操作内存并避免常见陷阱

第一章&#xff1a;揭秘C#不安全类型的本质与应用场景C#作为一门以类型安全和内存管理著称的语言&#xff0c;通常通过托管代码和垃圾回收机制保障程序的稳定性。然而&#xff0c;在某些对性能或底层操作有严苛要求的场景中&#xff0c;C#也提供了“不安全代码”&#xff08;un…

作者头像 李华
网站建设 2026/2/28 10:51:33

6G和7G是什么

6G和7G是什么 6G和7G是未来两代移动通信技术&#xff0c;两者都处于预研或设想阶段&#xff0c;远未到大规模基础设施建设时期。目前全球的焦点和投资正处在5G向5G-A&#xff08;5.5G&#xff09;演进的关键窗口期。特性6G7G代际第六代移动通信第七代移动通信&#xff08;理论概…

作者头像 李华
网站建设 2026/2/27 19:49:04

8000端口被占用怎么办?HunyuanOCR API服务端口修改方法

8000端口被占用怎么办&#xff1f;HunyuanOCR API服务端口修改方法 在本地部署AI模型时&#xff0c;你有没有遇到过这样的情况&#xff1a;刚准备好运行HunyuanOCR的API服务&#xff0c;执行启动脚本后却卡在了第一步——“OSError: [Errno 98] Address already in use”&…

作者头像 李华