init_code

This commit is contained in:
sky
2025-07-03 17:03:00 +08:00
parent a710c87a2b
commit 89766fe3d1
220 changed files with 479903 additions and 77 deletions

View File

@@ -0,0 +1,116 @@
""" Panels for a straight upper garment (T-shirt)
Note that the code is very similar to Bodice.
"""
import numpy as np
import pygarment as pyg
from assets.garment_programs.base_classes import BaseBodicePanel
class TorsoFrontHalfPanel(BaseBodicePanel):
"""Half of a simple non-fitted upper garment (e.g. T-Shirt)
Fits to the bust size
"""
def __init__(self, name, body, design) -> None:
""" Front = True, provides the adjustments necessary for the front panel
"""
super().__init__(name, body, design)
design = design['shirt']
# width
m_width = design['width']['v'] * body['bust']
b_width = design['flare']['v'] * m_width
# sizes
body_width = (body['bust'] - body['back_width']) / 2
frac = body_width / body['bust']
self.width = frac * m_width
b_width = frac * b_width
sh_tan = np.tan(np.deg2rad(body['_shoulder_incl']))
shoulder_incl = sh_tan * self.width
length = design['length']['v'] * body['waist_line']
# length in the front panel is adjusted due to shoulder inclination
# for the correct sleeve fitting
fb_diff = (frac - (0.5 - frac)) * body['bust']
length = length - sh_tan * fb_diff
self.edges = pyg.EdgeSeqFactory.from_verts(
[0, 0],
[-b_width, 0],
[-self.width, length],
[0, length + shoulder_incl],
loop=True
)
# Interfaces
self.interfaces = {
'outside': pyg.Interface(self, self.edges[1]),
'inside': pyg.Interface(self, self.edges[-1]),
'shoulder': pyg.Interface(self, self.edges[-2]),
'bottom': pyg.Interface(self, self.edges[0], ruffle=self.width / ((body['waist'] - body['waist_back_width']) / 2)),
# Reference to the corner for sleeve and collar projections
'shoulder_corner': pyg.Interface(self, [self.edges[-3], self.edges[-2]]),
'collar_corner': pyg.Interface(self, [self.edges[-2], self.edges[-1]])
}
# default placement
self.translate_by([0, body['height'] - body['head_l'] - length - shoulder_incl, 0])
def get_width(self, level):
return super().get_width(level) + self.width - self.body['shoulder_w'] / 2
class TorsoBackHalfPanel(BaseBodicePanel):
"""Half of a simple non-fitted upper garment (e.g. T-Shirt)
Fits to the bust size
"""
def __init__(self, name, body, design) -> None:
""" Front = True, provides the adjustments necessary for the front panel
"""
super().__init__(name, body, design)
design = design['shirt']
# account for ease in basic measurements
m_width = design['width']['v'] * body['bust']
b_width = design['flare']['v'] * m_width
# sizes
body_width = body['back_width'] / 2
frac = body_width / body['bust']
self.width = frac * m_width
b_width = frac * b_width
shoulder_incl = (np.tan(np.deg2rad(body['_shoulder_incl']))) * self.width
length = design['length']['v'] * body['waist_line']
self.edges = pyg.EdgeSeqFactory.from_verts(
[0, 0],
[-b_width, 0],
[-self.width, length],
[0, length + shoulder_incl],
loop=True
)
# Interfaces
self.interfaces = {
'outside': pyg.Interface(self, self.edges[1]),
'inside': pyg.Interface(self, self.edges[-1]),
'shoulder': pyg.Interface(self, self.edges[-2]),
'bottom': pyg.Interface(self, self.edges[0], ruffle=self.width / (body['waist_back_width'] / 2)),
# Reference to the corner for sleeve and collar projections
'shoulder_corner': pyg.Interface(self, [self.edges[-3], self.edges[-2]]),
'collar_corner': pyg.Interface(self, [self.edges[-2], self.edges[-1]])
}
# default placement
self.translate_by([0, body['height'] - body['head_l'] - length - shoulder_incl, 0])
def get_width(self, level):
return super().get_width(level) + self.width - self.body['shoulder_w'] / 2