Added backend support for multi-color filaments
This commit is contained in:
@@ -11,7 +11,7 @@ from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.orm import contains_eager, joinedload
|
||||
|
||||
from spoolman.api.v1.models import EventType, Filament, FilamentEvent
|
||||
from spoolman.api.v1.models import EventType, Filament, FilamentEvent, MultiColorDirection
|
||||
from spoolman.database import models, vendor
|
||||
from spoolman.database.utils import (
|
||||
SortOrder,
|
||||
@@ -42,6 +42,8 @@ async def create(
|
||||
settings_extruder_temp: Optional[int] = None,
|
||||
settings_bed_temp: Optional[int] = None,
|
||||
color_hex: Optional[str] = None,
|
||||
multi_color_hexes: Optional[str] = None,
|
||||
multi_color_direction: Optional[MultiColorDirection] = None,
|
||||
external_id: Optional[str] = None,
|
||||
extra: Optional[dict[str, str]] = None,
|
||||
) -> models.Filament:
|
||||
@@ -68,6 +70,8 @@ async def create(
|
||||
settings_extruder_temp=settings_extruder_temp,
|
||||
settings_bed_temp=settings_bed_temp,
|
||||
color_hex=color_hex,
|
||||
multi_color_hexes=multi_color_hexes,
|
||||
multi_color_direction=multi_color_direction.value if multi_color_direction is not None else None,
|
||||
external_id=external_id,
|
||||
extra=[models.FilamentField(key=k, value=v) for k, v in (extra or {}).items()],
|
||||
)
|
||||
@@ -231,11 +235,18 @@ async def find_by_color(
|
||||
|
||||
found_filaments: list[models.Filament] = []
|
||||
for filament in filaments:
|
||||
if filament.color_hex is None:
|
||||
if filament.color_hex is not None:
|
||||
colors = [filament.color_hex]
|
||||
elif filament.multi_color_hexes is not None:
|
||||
colors = filament.multi_color_hexes.split(",")
|
||||
else:
|
||||
continue
|
||||
color_lab = rgb_to_lab(hex_to_rgb(filament.color_hex))
|
||||
if delta_e(color_query_lab, color_lab) <= similarity_threshold:
|
||||
found_filaments.append(filament)
|
||||
|
||||
for color in colors:
|
||||
color_lab = rgb_to_lab(hex_to_rgb(color))
|
||||
if delta_e(color_query_lab, color_lab) <= similarity_threshold:
|
||||
found_filaments.append(filament)
|
||||
break
|
||||
|
||||
return found_filaments
|
||||
|
||||
|
||||
Reference in New Issue
Block a user