一个可以让blender主动建模的脚本

打印 上一主题 下一主题

主题 1006|帖子 1006|积分 3018

一、形貌:

通过blender的脚本,接收socket哀求,将socket哀求的语句,形貌成blender的建模语句,通过exec()函数实行。
二、问题:

运行脚本后,blender界面无法操作。
比如步伐中每隔1S添加一个不同位置的棱角球。但是在现实运行过程中,一个小球都没有表现出来。当我想通过blender界面检察时,直接卡死在运行脚本前的界面。
办理方法其实也很简单,就是将脚本单开一个线程。 
  1. thread  = threading.Thread(target=create_server)
  2. thread.start()
复制代码
三、终极代码: 

  1. import bpy
  2. import socket
  3. import math
  4. import threading
  5. def create_server(host="127.0.0.1", port=55567):
  6.     # 创建一个 socket 对象
  7.     # AF_INET 表示使用 IPv4 地址
  8.     # SOCK_STREAM 表示使用 TCP 协议
  9.     server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  10.    
  11.     # 绑定到指定的地址和端口
  12.     server_socket.bind((host, port))
  13.    
  14.     # 开始监听客户端的连接请求
  15.     # 参数 5 表示最大连接数(队列长度)
  16.     server_socket.listen(1)
  17.     print(f"Server is listening on {host}:{port}...")
  18.     try:
  19.         while True:
  20.             # 等待客户端连接
  21.             client_socket, client_address = server_socket.accept()
  22.             print(f"Connection from {client_address}")
  23.             client_socket.sendall(b"Hello from server!")
  24.             client_socket.setblocking(False)
  25.             while True:
  26.                 try:
  27.                     # 接收客户端发送的数据
  28.                     data = client_socket.recv(1024)  # 每次接收最多 1024 字节
  29.                     if data:
  30.                         str = data.decode('utf-8')
  31.                         print(f"Received from client: {str}")
  32.                         # 向客户端发送响应
  33.                         exec(str)
  34.                         
  35.                     else:
  36.                         print("No data received from client.")
  37.                         break
  38.                 except BlockingIOError:
  39.                     #print("BlockingIOError")
  40.                     i = 0
  41.                
  42.             
  43.             # 关闭客户端连接
  44.             client_socket.close()
  45.             print(f"Connection with {client_address} closed.")
  46.     except KeyboardInterrupt:
  47.         print("Server is shutting down.")
  48.     finally:
  49.         # 关闭服务器 socket
  50.         server_socket.close()
  51.         print("Server socket closed.")
  52. if __name__ == "__main__":
  53.     thread  = threading.Thread(target=create_server)
  54.     thread.start()
  55.     #create_server()
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表