* feat: Add Bioxel asset catalog and layer management functionality - Introduced a new asset catalog definition file for Blender to manage Bioxel assets. - Implemented layer caching and snapshot functionality in `layer.py`, allowing for VDB file generation and low-resolution snapshots. - Created node management functions in `node.py` for handling Bioxel nodes within Blender's Geometry Node Editor. - Added an operator to extract mesh data from selected nodes in `structure.py`. - Developed UI panels in `panels.py` for layer management, including import options and layer library display. * Add unit tests for bioxel module and documentation - Created README.md for test instructions and categories. - Implemented comprehensive unit tests for the Data, Layer, and utility functions in the bioxel module. - Added tests for reading NRRD and DICOM formats, data properties, and edge cases. - Included tests for real data files to ensure functionality with actual datasets. * feat: Update .gitattributes and .gitignore for improved asset management and ignore patterns chore: Add app.json and omoolab.css for Obsidian integration refactor: Clean up AGENTS.md and remove outdated test files * feat: Update .gitignore to include scipy_ndimage directory * feat: Update release workflow and manifest for improved dependency management and layer handling * feat: Update .gitignore and add binary files for scipy_ndimage across multiple platforms * feat: Add OPSX commands for archiving, exploring, and proposing changes * feat: Refactor asset library management and update manifest for improved organization * feat: Downgrade h5py version to 3.14.0 in requirements and manifest * feat: Update Help operator and panel labels to use English terminology * Translate documentation to Chinese, add support format details, and enhance styling with new fonts. Update mkdocs configuration for multilingual support and improve package dependencies. * feat: Remove default version setting from extra configuration in mkdocs.yml * fix: Update documentation links to point to the correct URLs for Chinese and English versions * Add documentation for basic usage, supported formats, and performance tips - Created English and Chinese documentation for basic usage of the add-on, including data download, import, extraction, and rendering steps. - Added support format documentation listing compatible file types for the add-on. - Included links to open databases for volumetric data. - Provided performance improvement tips for voxel reconstruction and rendering, including settings for low-resolution previews and balanced rendering configurations. * Add OpenSpec skills for change management and exploration - Implement openspec-apply-change skill for applying tasks from OpenSpec changes. - Create openspec-archive-change skill for archiving completed changes. - Introduce openspec-explore skill for exploring ideas and clarifying requirements. - Add openspec-propose skill for proposing new changes with generated artifacts. - Migrate source command skills: source-command-opsx-apply, source-command-opsx-archive, source-command-opsx-explore, and source-command-opsx-propose for improved command handling. * feat: Update version to 2.0.1, refactor asset library handling, and enhance layer import process * fix: downgrade scipy version to 1.16.3 in build.py and pyproject.toml * Remove deprecated modules and functions from bioxel package - Deleted _ni_support.py, _utils.py, and dtype.py as they contained unused or redundant functions. - Removed the resize function and related utilities from _warps.py to streamline image processing. - Cleaned up the skimage module by removing unnecessary imports and functions. * feat: Add SKIP_MODULE_NAMES to exclude specific modules during import and refactor io_worker import logic * refactor: Remove known limitations section from documentation for EEVEE NEXT support
93 lines
2.7 KiB
Python
93 lines
2.7 KiB
Python
from pathlib import Path
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
from dataclasses import dataclass
|
|
import tomlkit
|
|
|
|
|
|
@dataclass
|
|
class Platform:
|
|
pypi_suffix: str
|
|
blender_tag: str
|
|
|
|
|
|
required_packages = ["SimpleITK==2.5.5",
|
|
"pyometiff==1.0.0",
|
|
"mrcfile==1.5.1",
|
|
"h5py==3.14.0",
|
|
"transforms3d==0.4.2",
|
|
"tifffile==2024.7.24",
|
|
"matplotlib==3.10.7",
|
|
"pillow==11.2.1",
|
|
"scipy==1.16.3"]
|
|
|
|
|
|
platforms = {"windows-x64": Platform(pypi_suffix="win_amd64",
|
|
blender_tag="windows-x64"),
|
|
"linux-x64": Platform(pypi_suffix="manylinux2014_x86_64",
|
|
blender_tag="linux-x64"),
|
|
"macos-arm64": Platform(pypi_suffix="macosx_12_0_arm64",
|
|
blender_tag="macos-arm64"),
|
|
"macos-x64": Platform(pypi_suffix="macosx_10_16_x86_64",
|
|
blender_tag="macos-x64")}
|
|
|
|
packages_to_remove = {
|
|
"imagecodecs",
|
|
"numpy",
|
|
"packaging"
|
|
}
|
|
|
|
|
|
def run_python(args: str):
|
|
python = Path(sys.executable).resolve()
|
|
subprocess.run([python] + args.split(" "))
|
|
|
|
|
|
def build_extension(platform: Platform, python_version: str) -> None:
|
|
wheel_dirpath = Path("./src/bioxelnodes/wheels")
|
|
toml_filepath = Path("./src/bioxelnodes/blender_manifest.toml")
|
|
|
|
# download required_packages
|
|
run_python(
|
|
f"-m pip download {' '.join(required_packages)} --dest {wheel_dirpath.as_posix()} --only-binary=:all: --python-version={python_version} --platform={platform.pypi_suffix}"
|
|
)
|
|
|
|
for f in wheel_dirpath.glob("*.whl"):
|
|
if any([package in f.name for package in packages_to_remove]):
|
|
f.unlink(missing_ok=True)
|
|
|
|
elif (
|
|
platform.blender_tag == "macos-arm64"
|
|
and "lxml" in f.name
|
|
and "universal2" in f.name
|
|
):
|
|
f.rename(Path(f.parent, f.name.replace("universal2", "arm64")))
|
|
|
|
# Load the TOML file
|
|
with toml_filepath.open("r") as file:
|
|
manifest = tomlkit.parse(file.read())
|
|
|
|
manifest["platforms"] = [platform.blender_tag]
|
|
manifest["wheels"] = [
|
|
f"./wheels/{f.name}" for f in wheel_dirpath.glob("*.whl")]
|
|
|
|
# build.append('generated', generated)
|
|
# manifest.append('build', build)
|
|
|
|
# Write the updated TOML file
|
|
with toml_filepath.open("w") as file:
|
|
text = tomlkit.dumps(manifest)
|
|
file.write(text)
|
|
|
|
|
|
def main():
|
|
platform_name = sys.argv[1]
|
|
python_version = sys.argv[2] or "3.11"
|
|
platform = platforms[platform_name]
|
|
build_extension(platform, python_version)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|