Files
braille_translator/model_gen/array_keyboard_3d.py
2024-06-11 08:02:41 +01:00

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()