99 lines
4.5 KiB
Python
99 lines
4.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Created on Thursday May 30 2024
|
|
@author: Edward Middleton-Smith
|
|
"""
|
|
|
|
# import argument_validation as av
|
|
# from translate_msg_2_braille import product, gen_braille_inputs_4_openscad
|
|
# from translate_braille_2_scad import scrabble_dimensions, export_colour_theme, input_colour_themes, gen_openscad_braille, gen_path_braille_scrabble, input_product_size
|
|
# from character_braille import Size_Character_Braille, Style_Character_Braille, Colour_Theme_Character_Braille
|
|
from keyboard_3d import Size_Character_Braille, Style_Character_Braille, Colour_Theme_Character_Braille, Enum_Justification_Text, Keyboard_3D
|
|
# import model_gen.utils_system
|
|
from translation_braille import Translation_Braille
|
|
|
|
import openpyscad as ops #, Assembly, Union
|
|
from typing import Optional, List
|
|
from pydantic import BaseModel, Field
|
|
from itertools import product
|
|
|
|
class Array_Keyboard_3D(BaseModel):
|
|
sizes_characters: List[Size_Character_Braille]
|
|
styles_characters: List[Style_Character_Braille]
|
|
colour_themes: List[Colour_Theme_Character_Braille]
|
|
justifications_text: List[Enum_Justification_Text]
|
|
path_dir: str
|
|
max_characters_per_rows: List[int]
|
|
translations: List[Translation_Braille]
|
|
fn: int = Field(ge=0)
|
|
|
|
keyboards: List[Keyboard_3D] = []
|
|
has_files_openscad: bool = False
|
|
has_files_stl: bool = False
|
|
has_files_png: bool = False
|
|
|
|
def __init__(self, **data):
|
|
super().__init__(**data)
|
|
if len(self.sizes_characters) == 0:
|
|
self.sizes_characters = Size_Character_Braille.get_defaults()
|
|
if len(self.styles_characters) == 0:
|
|
self.styles_characters = [Style_Character_Braille.get_default()]
|
|
if len(self.colour_themes) == 0:
|
|
self.colour_themes = Colour_Theme_Character_Braille.get_defaults()
|
|
if len(self.justifications_text) == 0:
|
|
self.justifications_text = [Enum_Justification_Text.get_default()]
|
|
self.make_combinations()
|
|
self.has_files_openscad = False
|
|
self.has_files_stl = False
|
|
self.has_files_png = False
|
|
|
|
def make_combinations(self):
|
|
configuration_keyboards = product(self.sizes_characters, self.styles_characters, self.colour_themes, self.justifications_text, self.max_characters_per_rows, self.translations)
|
|
self.keyboards = []
|
|
for configuration_keyboard in configuration_keyboards:
|
|
# self.keyboards.append(Keyboard_3D(*configuration_keyboard))
|
|
# Keyboard_3D(size_characters=size_default, style_characters=style_default,
|
|
# colour_theme=colour_default, justification_text=justification_default, path_dir=path_dir, max_characters_per_row=10, translation=translation_extended_alphabet, fn=25)
|
|
self.keyboards.append( Keyboard_3D(size_characters=configuration_keyboard[0], style_characters=configuration_keyboard[1], colour_theme=configuration_keyboard[2],
|
|
justification_text=configuration_keyboard[3], path_dir=self.path_dir, max_characters_per_row=configuration_keyboard[4], translation=configuration_keyboard[5], fn=self.fn))
|
|
|
|
def update_configurations_styles(self, sizes_characters, style_characters, colour_themes, justifications_text):
|
|
self.sizes_characters = sizes_characters
|
|
self.styles_characters = style_characters
|
|
self.colour_themes = colour_themes
|
|
self.justifications_text = justifications_text
|
|
self.make_combinations()
|
|
|
|
def make_combined_assembly(self, dx, dy, max_keyboards_per_row):
|
|
count_keyboards_in_row = 0
|
|
count_rows = 0
|
|
assembly = ops.Assembly()
|
|
for keyboard in self.keyboards:
|
|
assembly.add(keyboard.make_model_openpyscad().translate([dx * count_keyboards_in_row, dy * count_rows, 0]))
|
|
count_keyboards_in_row += 1
|
|
if count_keyboards_in_row >= max_keyboards_per_row:
|
|
count_keyboards_in_row = 0
|
|
count_rows += 1
|
|
return assembly
|
|
|
|
def make_files_openscad(self):
|
|
for keyboard in self.keyboards:
|
|
keyboard.make_file_openscad()
|
|
self.has_files_openscad = True
|
|
|
|
def make_files_stl(self):
|
|
for keyboard in self.keyboards:
|
|
keyboard.make_file_stl()
|
|
self.has_files_stl = True
|
|
|
|
def make_files_png(self):
|
|
for keyboard in self.keyboards:
|
|
keyboard.make_file_png()
|
|
self.has_files_png = True
|
|
|
|
def make_files(self):
|
|
for keyboard in self.keyboards:
|
|
keyboard.make_file_openscad()
|
|
keyboard.make_file_stl()
|
|
keyboard.make_file_png()
|