Project OOP refactorisation.
This commit is contained in:
98
model_gen/array_keyboard_3d.py
Normal file
98
model_gen/array_keyboard_3d.py
Normal file
@@ -0,0 +1,98 @@
|
||||
# -*- 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()
|
||||
Reference in New Issue
Block a user