Skip to content

Instantly share code, notes, and snippets.

@unwave
unwave / create_blood_flow_path.py
Created April 24, 2024 02:01
traverse bmesh and decide on places and orientations to put physics forces
import bpy
import bmesh
from blend_converter import bl_utils
BASE_LENGTH = 2
MAX_LENGTH = 1.5 * BASE_LENGTH
TRAVERSE_SELECT = False
bl_utils.select(bpy.data.objects['level'])
bpy.ops.object.duplicate(linked=False)
@unwave
unwave / ensure_site_packages.py
Last active January 9, 2024 09:24
pip install dependencies into .\_deps
import importlib
import importlib.util
import os
import sys
import typing
import bpy
ROOT_DIR = os.path.dirname(os.path.realpath(__file__))
# test blender property default retrieval
def ensure_site_packages(packages: list, directory: str):
"""
`packages`: list of tuples (<import name>, <pip name>)
`directory`: a folder for site packages, will be created if does not exist and added to `sys.path`
"""
if not packages:
return
# test blender socket custom properties
def get_script(func, *args, **kwargs):
import textwrap
import inspect
import json
return '\n'.join([
textwrap.dedent(inspect.getsource(func)),
"import json",
f"{func.__name__}(*json.loads(r'{json.dumps(args)}'), **json.loads(r'{json.dumps(kwargs)}'))"
@unwave
unwave / auto_BulletConvexHullShape.py
Created October 30, 2022 01:40
Generate panda3d.bullet.BulletConvexHullShape via the Blender's Geometry Nodes Convex Hull node.
""" Generate panda3d.bullet.BulletConvexHullShape via the Blender's Geometry Nodes Convex Hull node. """
from __future__ import annotations
import os
import sys
import tempfile
import typing
import random
import bpy
import re
re_name = re.compile('plane(\.\d{3})?', flags = re.IGNORECASE)
planes = []
for object in bpy.data.objects:
if object.data and object.data.__class__.__name__ == 'Mesh':
if re_name.match(object.name) or len(object.data.vertices) == 4:
planes.append(object)
import unreal # type: ignore
import os
import json
import datetime
def get_desktop():
try:
import winreg
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders") as key:
return winreg.QueryValueEx(key, "Desktop")[0]
import bpy
#import os
#os.system('cls')
class Position_Material_Override:
def __init__(self, objects):
self.objects = objects
def __enter__(self):
import tkinter as tk
import tkinter.messagebox
import inspect
import sys
import os
from blender_asset_tracer import blendfile
import inspect
import pathlib
from dataclasses import dataclass, field