BlueRoseNote/06-DCC/Blender/Blender Python笔记.md

156 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 使用Pyside6以及非基础模块
安装Pyside6
```
pip install PySide6
```
默认情况下需要添加路径才能调用下载的库,执行以下代码即可:
```python
import sys
import pathlib
my_python_path = "C:\Python311\Lib\site-packages"
sys.path.insert(0, my_python_path)
```
## 其他模块
对于一些非基础模块比如PySide6.QtWebSockets需要执行以下命令进行安装
```bash
pip install PySide6-Addons
```
# WebSocketServer for Blender
https://github.com/KoltesDigital/websocket-server-for-blender
## Pyside6实现
TODO:添加多线程,防止退出。
```python
server = QWebSocketServer()
thread = QtCore.QThread()
server.moveTOThread(thread)
server.finished.connect(thread.quit)
thread.started.connect(model.func_to_run)
thread.finished.connect(fun_to_run_after_thread_finished)
thread.start()
thread.start()
```
```python
# blender --background test.blend --python mytest.py -- example args 123
import sys
import pathlib
# import pyside6
my_python_path = "C:\Python311\Lib\site-packages"
sys.path.insert(0, my_python_path)
import bpy
from PySide6.QtNetwork import QHostAddress
from PySide6.QtWebSockets import QWebSocket
from PySide6.QtWebSockets import QWebSocketServer
class QRetargetWebsocketServer(QWebSocketServer):
def __init__(self):
super(QRetargetWebsocketServer, self).__init__("RetargetWebsocketServer", QWebSocketServer.NonSecureMode)
self.closed.connect(self.onClosed)
self.newConnection.connect(self.onNewConnection)
def onClosed():
print('connect closed!')
def onNewConnection(self, context, event):
client: QWebSocket = self.nextPendingConnection()
client.textMessageReceived.connect(self.onTextReceived)
def onTextReceived(self, text: str):
client: QWebSocket = self.sender()
if text == "Retarget":
print("Retarget")
client.sendTextMessage("Retarget")
else:
print("text:", text)
# 提取输出的命
argv = sys.argv
print(argv)
# argv = argv[argv.index("--") + 1:] # get all args after "--"
# print(argv) # --> ['example', 'args', '123']
WebSocketServer = QRetargetWebsocketServer()
WebSocketServer.listen(QHostAddress.LocalHost,9091)
```
# Http Server
```python
bl_info = {
"name": "My Awesome Server",
"blender": (2, 80, 0),
"category": "Object",
}
from http.server import BaseHTTPRequestHandler, HTTPServer
import threading
import bpy
class MyServer(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/test':
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
message = "This is a test page2."
self.wfile.write(bytes(message, "utf8"))
else:
self.send_response(404)
self.send_header('Content-type','text/html')
self.end_headers()
message = "404 Not Found."
self.wfile.write(bytes(message, "utf8"))
return
httpd = None
thread = None
thread2 = None
def start_server():
global httpd
server_address = ('localhost', 8080)
# Server is not running, start it
httpd = HTTPServer(server_address, MyServer)
print("Server started")
httpd.serve_forever()
def stop_server():
global httpd
global thread
httpd.shutdown()
thread.join()
print("Server stopped")
def stop_server_thread():
global thread2
thread2 = threading.Thread(target=stop_server)
thread2.start()
def register():
global thread
print("Hello World")
# Start the server on a new thread
thread = threading.Thread(target=start_server)
thread.daemon = True
thread.start()
def unregister():
print("Goodbye World")
stop_server_thread()
global thread2
thread2.join()
```
# Blender CMD 启用插件
>./blender -b --addons animation_nodes,meshlint [file] --python [myscript.py]
这样就可以指定启用某某插件