small adjustments in polyhedra

This commit is contained in:
Mario Voigt 2021-12-19 23:24:39 +01:00
parent 5778c1c9ee
commit 89128a94ef
2 changed files with 32 additions and 26 deletions

View File

@ -52,6 +52,8 @@
<option value="2">Single Tabs</option>
<option value="3">None</option>
</param>
<param name="material_thickness" type="float" min="0.01" max="1000.0" gui-text="material thickness">1.0</param>
<label>Hint: Stroke widths within the generated output may differ. Please adjust manually (reason: scale transforms)</label>
<effect>
<object-type>all</object-type>
<effects-menu>

View File

@ -34,32 +34,13 @@ def points_to_svgd(p):
svgd += 'L%.3f,%.3f' % x
return svgd
# these are designed to be 100px wide - they have to be scaled
no_tab = { 'cut' : ['m 0,0 100,0'], 'perf' : []}
notab = {0 : no_tab}
simpletab = {0: {'cut': ['m 0,0 20,19 60,0 l 20,-19'], 'perf' : ['m 0,0 100,0']}}
# tab array - 0 = slot/tab, 1 = two tabs, 2 = single tab (alternate tab and nothing), 3 = none
tabStyle = [{ \
50 : {'cut': ['m 0,0 35,0 0,2 -6,0 c 0,0 1,8 6,12 8,6 22,6 30,0 5,-4 6,-12 6,-12 l -6,0 0,-2 35,0'], 'perf' : ['M 42,0 58,0']}, \
24 : {'cut': ['m 0,0 55,0 0,2 -6,0 c 0,0 1,3 6,6 8,3 19,6 27,8 5,-4 9,-14 9,-14 l -6,0 0,-2 15,0'], 'perf' : ['M 62,0 78,0']}, \
18 : {'cut' : ['m 0,0 65,0 0,2 -6,0 c 0,0 1,3 6,6 8,2 11,2 19,3 5,-4 9,-10 7,-9 l -6,0 0,-2 15,0'], 'perf' : ['m 72,0 6,0']}, \
6 : {'cut': ['m 0,0 70,0 2,7 10,1 5,-6 -2,0 0,-2 15,0'], 'perf' : ['m 74,0 7,0']},
0 : { 'cut' : ['m 0,0 100,0'], 'perf' : []}}, simpletab, simpletab, notab]
slotStyle = [{\
50: {'cut': ['m 0,0 20,19 60,0 l 20,-19','m 28,-3 4,5 36,0 4,-5'], 'perf' : ['M 0,0 28,0','M 100,0 72,0']}, \
24 : {'cut': ['M 100,0 90,18 30,11 20,0 0,0', 'm 92,-3 -4,5 -36,0 -4,-5'], 'perf' : ['M 100,0 92,0', 'M 20,0 48,0']}, \
18 : {'cut' : ['M 100,0 90,16 40,9 35,0 0,0', 'm 92,-3 -4,5 -26,0 -4,-5'], 'perf' : ['M 100,0 92,0', 'M 35,0 58,0']}, \
6 : {'cut' : ['M 100,0 98,10 88,9 84,2 86,2 86,0 0,0'], 'perf' : ['m 96,0 -6,0']},
0 : { 'cut' : ['m 0,0 100,0'], 'perf' : [] }}, simpletab, notab, notab]
class Polyhedra(inkex.EffectExtension):
def add_arguments(self, pars):
pars.add_argument("-p", "--poly", default='Cube', help="Polygon net to render")
pars.add_argument("-p", "--poly", default="Cube", help="Polygon net to render")
pars.add_argument("-s", "--size", type=float, default=100.0, help="Size of first edge")
pars.add_argument("-u", "--unit", default= 'mm', help="Units")
pars.add_argument("-u", "--unit", default="mm", help="Units")
pars.add_argument("-m", "--material_thickness", type=float, default=1.0, help="Material thickness")
pars.add_argument("-t", "--tabs", type=int, default=0, help="Tab style")
def get_tab(self, limitAngle):
@ -68,6 +49,28 @@ class Polyhedra(inkex.EffectExtension):
def get_slot(self, limitAngle):
return(self.get_connector('slot', limitAngle))
def get_slot_tab_style(self):
# these are designed to be 100px wide - they have to be scaled
no_tab = { 'cut' : ['m 0,0 100,0'], 'perf' : []}
notab = {0 : no_tab}
simpletab = {0: {'cut': ['m 0,0 20,19 60,0 l 20,-19'], 'perf' : ['m 0,0 100,0']}}
# tab array - 0 = slot/tab, 1 = two tabs, 2 = single tab (alternate tab and nothing), 3 = none
mt = self.options.material_thickness
tabStyle = [{ \
50 : {'cut': ['m 0,0 35,0 0,{} -6,0 c 0,0 1,8 6,12 8,6 22,6 30,0 5,-4 6,-12 6,-12 l -6,0 0,{} 35,0'.format(mt,-mt)], 'perf' : ['M 42,0 58,0']}, \
24 : {'cut': ['m 0,0 55,0 0,{} -6,0 c 0,0 1,3 6,6 8,3 19,6 27,8 5,-4 9,-14 9,-14 l -6,0 0,{} 15,0'.format(mt,-mt)], 'perf' : ['M 62,0 78,0']}, \
18 : {'cut': ['m 0,0 65,0 0,{} -6,0 c 0,0 1,3 6,6 8,2 11,2 19,3 5,-4 9,-10 7,-9 l -6,0 0,{} 15,0'.format(mt,-mt)], 'perf' : ['m 72,0 6,0']}, \
6 : {'cut': ['m 0,0 70,0 {},7 10,1 5,-6 -2,0 0,{} 15,0'.format(mt,-mt)], 'perf' : ['m 74,0 7,0']},
0 : {'cut': ['m 0,0 100,0'], 'perf' : []}}, simpletab, simpletab, notab]
slotStyle = [{\
50 : {'cut': ['m 0,0 20,19 60,0 l 20,-19', 'm 28,{} 4,{} 36,0 4,{}'.format(-mt, mt, -(mt))], 'perf' : ['M 0,0 28,0','M 100,0 72,0']}, \
24 : {'cut': ['M 100,0 90,18 30,11 20,0 0,0', 'm 92,{} -4,{} -36,0 -4,{}'.format(-mt, mt, -(mt))], 'perf' : ['M 100,0 92,0', 'M 20,0 48,0']}, \
18 : {'cut': ['M 100,0 90,16 40,9 35,0 0,0', 'm 92,{} -4,{} -26,0 -4,{}'.format(-mt, mt, -(mt))], 'perf' : ['M 100,0 92,0', 'M 35,0 58,0']}, \
6 : {'cut': ['M 100,0 98,10 88,9 84,2 86,2 86,0 0,0'], 'perf' : ['m 96,0 -6,0']},
0 : {'cut': ['m 0,0 100,0'], 'perf' : [] }}, simpletab, notab, notab]
return [tabStyle, slotStyle]
def get_connector(self, type, limitAngle):
if(self.options.tabs == 1): # two tabs
return(self.gen_tab(limitAngle/2))
@ -84,9 +87,9 @@ class Polyhedra(inkex.EffectExtension):
# otherwise, get stuff from the array of specially modified tab/slots
if(type == 'tab'):
source = tabStyle
source = self.get_slot_tab_style()[0]
else:
source = slotStyle
source = self.get_slot_tab_style()[1]
cuttable = source[self.options.tabs].keys()
sorted(cuttable) # sorts in-place. Ugh.
@ -132,6 +135,7 @@ class Polyhedra(inkex.EffectExtension):
return({'cut' : [points_to_svgd(tab_cut)], 'perf' : [points_to_svgd(tab_perf)]})
def effect(self):
poly = self.options.poly
size = self.svg.unittouu(str(self.options.size) + self.options.unit)
@ -151,8 +155,8 @@ class Polyhedra(inkex.EffectExtension):
gsub = etree.SubElement(g, 'g', gsub_attribs)
# Create SVG Path
cutStyle = { 'stroke': '#0000FF', 'stroke-width': '1px', 'fill': 'none' }
perfStyle = { 'stroke': '#FF0000', 'stroke-width': '1px', 'fill': 'none' }
cutStyle = { 'stroke': '#0000FF', 'stroke-width': self.svg.unittouu("1px"), 'fill': 'none' }
perfStyle = { 'stroke': '#FF0000', 'stroke-width': self.svg.unittouu("1px"), 'fill': 'none' }
textStyle = {
'font-size': str( size/4 ),
'font-family': 'arial',