init_code
This commit is contained in:
116
assets/garment_programs/tee.py
Normal file
116
assets/garment_programs/tee.py
Normal 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
|
||||
Reference in New Issue
Block a user