big rewrite focusing on faster performance and selection improvements

This commit is contained in:
Yeicor
2024-03-10 15:34:39 +01:00
parent a9ce189c45
commit 719395863d
24 changed files with 663 additions and 1266 deletions

View File

@@ -1,14 +1,12 @@
import asyncio
import logging
import os
from typing import Tuple
from typing import Union, Dict
from build123d import *
ASSETS_DIR = os.getenv('ASSETS_DIR', os.path.join(os.path.dirname(__file__), '..', 'assets'))
def build_logo(text: bool = True) -> Tuple[Part, Location, str]:
def build_logo(text: bool = True) -> Dict[str, Union[Part, Location, str]]:
"""Builds the CAD part of the logo"""
with BuildPart(Plane.XY.offset(50)) as logo_obj:
Box(22, 40, 30)
@@ -25,34 +23,44 @@ def build_logo(text: bool = True) -> Tuple[Part, Location, str]:
logo_img_location.position = Vector(logo_img_location.position.X - 4e-2, logo_img_location.position.Y,
logo_img_location.position.Z)
logo_img_path = os.path.join(ASSETS_DIR, 'img.jpg')
return logo_obj.part, logo_img_location, logo_img_path
fox_glb_bytes = open(os.path.join(ASSETS_DIR, 'fox.glb'), 'rb').read()
return {'fox': fox_glb_bytes, 'logo': logo_obj, 'location': logo_img_location, 'img_path': logo_img_path}
def show_logo(parts: Dict[str, Union[Part, Location, str]]) -> None:
"""Shows the prebuilt logo parts"""
from yacv_server import show_image, show_object
for name, part in parts.items():
if isinstance(part, str):
show_image(source=part, center=parts['location'], height=18, auto_clear=False)
else:
show_object(part, name, auto_clear=False)
if __name__ == "__main__":
from yacv_server import export_all, remove
import logging
logging.basicConfig(level=logging.DEBUG)
# Start an offline server to export the CAD part of the logo in a way compatible with the frontend
# If this is not set, the server will auto-start on import and show_* calls will provide live updates
os.environ['YACV_DISABLE_SERVER'] = '1'
from yacv_server import show, show_image
testing_server = bool(os.getenv('TESTING_SERVER', 'False'))
if not testing_server:
# Start an offline server to export the CAD part of the logo in a way compatible with the frontend
# If this is not set, the server will auto-start on import and show_* calls will provide live updates
os.environ['YACV_DISABLE_SERVER'] = 'True'
# Build the CAD part of the logo
logo = build_logo()
# Add the CAD part of the logo to the server
logo, img_location, img_path = build_logo()
show(logo, 'base')
show(img_location, 'location')
show_image(img_path, img_location, 20)
show_logo(logo)
async def exporter():
# We need access to the actual server object for advanced features like exporting to file
from yacv_server import server
for name in server.shown_object_names():
print(f'Exporting {name} to GLB...')
with open(os.path.join(ASSETS_DIR, 'logo_build', f'{name}.glb'), 'wb') as f:
f.write(await server.export(name))
# Save the complete logo to multiple GLB files (async required)
asyncio.run(exporter())
print('Logo saved!')
if testing_server:
remove('location') # Test removing a part
else:
# Save the complete logo to multiple GLB files
export_all(os.path.join(ASSETS_DIR, 'logo_build'))
print('Logo saved!')