Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@walter-laptop.(none)>2010-01-23 17:52:26 (GMT)
committer Walter Bender <walter@walter-laptop.(none)>2010-01-23 17:52:26 (GMT)
commit1810fad1eda74a710f3e14d05309191adddb7acc (patch)
treec04b749d521ed313a3f6ecd3e295a78bbfc556c3
parent0acf47e34e80ed244f67960aeca8c709e9cd3094 (diff)
autogeneration of dock details
-rw-r--r--block.py102
-rwxr-xr-xsprite_factory.py45
2 files changed, 102 insertions, 45 deletions
diff --git a/block.py b/block.py
index 0255659..3133479 100644
--- a/block.py
+++ b/block.py
@@ -119,43 +119,56 @@ class Block:
if name in BASIC_STYLE:
svg.expand(40,0)
self._make_basic_block(sprite_list, svg, x, y)
- self.docks = (('flow',True,0,2),('flow',False,0,self.height-yoff))
+ self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
+ ('flow', False,svg.docks[1][0], svg.docks[1][1]))
elif name in BASIC_STYLE_HEAD:
svg.expand(40,0)
svg.set_slot(False)
+ svg.set_cap(True)
self._make_basic_block(sprite_list, svg, x, y)
- self.docks = (('start',True,0,2),('flow',False,0,self.height-yoff))
+ self.docks = (('start', True, svg.docks[0][0], svg.docks[0][1]),
+ ('flow', False, svg.docks[1][0], svg.docks[1][1]))
elif name in BASIC_STYLE_HEAD_1ARG:
svg.expand(40,0)
svg.set_innie([True])
svg.set_slot(False)
+ svg.set_cap(True)
self._make_basic_block(sprite_list, svg, x, y)
- self.docks = (('start',True,0,0), ('string',False,self.width,12),
- ('flow',False,0,self.height-yoff))
+ self.docks = (('start', True, svg.docks[0][0], svg.docks[0][1]),
+ ('string', False, svg.docks[1][0], svg.docks[1][1]),
+ ('flow', False, svg.docks[2][0], svg.docks[2][1]))
elif name in BASIC_STYLE_TAIL:
svg.expand(40,0)
svg.set_tab(False)
self._make_basic_block(sprite_list, svg, x, y)
- self.docks = (('flow',True,0,2),('unavailable',False,0,0))
+ self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
+ ('unavailable', False, 0, 0))
elif name in BASIC_STYLE_1ARG:
svg.expand(25,0)
svg.set_innie([True])
self._make_basic_block(sprite_list, svg, x, y)
- self.docks = (('flow',True,0,2),
- ('number',False,self.width-xoff,12),
- ('flow',False,0,self.height-yoff))
+ self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
+ ('number', False, svg.docks[1][0], svg.docks[1][1]),
+ ('flow', False, svg.docks[2][0], svg.docks[2][1]))
elif name in BASIC_STYLE_2ARG:
svg.expand(25,0)
svg.set_innie([True,True])
self._make_basic_block(sprite_list, svg, x, y)
- self.docks = (('flow',True,0,2),
- ('number',False,self.width-xoff,12),
- ('number',False,self.width-xoff,54),
- ('flow',False,0,self.height-yoff))
+ self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
+ ('number', False, svg.docks[1][0], svg.docks[1][1]),
+ ('number', False, svg.docks[2][0], svg.docks[2][1]),
+ ('flow', False, svg.docks[3][0], svg.docks[3][1]))
elif name in BOX_STYLE:
svg.expand(60,0)
self._make_basic_box(sprite_list, svg, x, y)
- self.docks = (('number',True,0,12),('unavailable',False,0,12))
+ self.docks = (('number', True, svg.docks[0][0], svg.docks[0][1]),
+ ('unavailable', False, 0, 0))
+ elif name in BOX_STYLE_1ARG:
+ svg.expand(60,0)
+ svg.set_innie([True])
+ self._make_basic_box(sprite_list, svg, x, y)
+ self.docks = (('number', True, svg.docks[0][0], svg.docks[0][1]),
+ ('string', False, svg.docks[1][0], svg.docks[1][1]))
elif name in NUMBER_STYLE:
svg.expand(25,0)
svg.set_innie([True,True])
@@ -163,9 +176,14 @@ class Block:
svg.set_tab(False)
svg.set_slot(False)
self._make_basic_block(sprite_list, svg, x, y)
- self.docks = (('number',True,0,12),
- ('number',False,self.width-xoff,12),
- ('number',False,self.width-xoff,54))
+ """
+ NOTE:
+ The "outie" is added last, so the dock order in the NUMBER_STYLE
+ needs to be modified.
+ """
+ self.docks = (('number', True, svg.docks[2][0], svg.docks[2][1]),
+ ('number', False, svg.docks[0][0], svg.docks[0][1]),
+ ('number', False, svg.docks[1][0], svg.docks[1][1]))
elif name in NUMBER_STYLE_1ARG:
svg.expand(25,0)
svg.set_innie([True])
@@ -173,8 +191,8 @@ class Block:
svg.set_tab(False)
svg.set_slot(False)
self._make_basic_block(sprite_list, svg, x, y)
- self.docks = (('number',True,0,12),
- ('number',False,self.width-xoff,12))
+ self.docks = (('number', True, svg.docks[1][0], svg.docks[1][1]),
+ ('number', False, svg.docks[0][0], svg.docks[0][1]))
elif name in NUMBER_STYLE_PORCH:
svg.expand(25,0)
svg.set_innie([True,True])
@@ -184,57 +202,61 @@ class Block:
svg.set_porch(True)
self._make_basic_block(sprite_list, svg, x, y)
xoff += svg._porch
- self.docks = (('number',True,0,12),
- ('number',False,self.width-xoff-xoff,12),
- ('number',False,self.width-xoff,64))
+ self.docks = (('number', True, svg.docks[2][0], svg.docks[2][1]),
+ ('number', False, svg.docks[0][0], svg.docks[0][1]),
+ ('number', False, svg.docks[1][0], svg.docks[1][1]))
elif name in COMPARE_STYLE:
self._make_boolean_compare(sprite_list, svg, x, y)
- self.docks = (('bool',True,0,self.height-12),
- ('number',False,self.width-xoff,12),
- ('number',False,self.width-xoff,54))
+ self.docks = (('bool', True, svg.docks[0][0], svg.docks[0][1]),
+ ('number', False, svg.docks[1][0], svg.docks[1][1]),
+ ('number', False, svg.docks[2][0], svg.docks[2][1]))
elif name in BOOLEAN_STYLE:
svg.expand(15,0)
self._make_boolean_and_or(sprite_list, svg, x, y)
- self.docks = (('bool',True,0,self.height-12),
- ('bool',False,self.width-xoff,12),
- ('bool',False,self.width-xoff,54))
+ self.docks = (('bool', True, svg.docks[0][0], svg.docks[0][1]),
+ ('bool', False, svg.docks[1][0], svg.docks[1][1]),
+ ('bool', False, svg.docks[2][0], svg.docks[2][1]))
elif name in NOT_STYLE:
svg.expand(15,0)
self._make_boolean_not(sprite_list, svg, x, y)
- self.docks = (('bool',True,0,self.height-12),
- ('bool',False,self.width-xoff,12))
+ self.docks = (('bool', True, svg.docks[0][0], svg.docks[0][1]),
+ ('bool', False, svg.docks[1][0], svg.docks[1][1]))
elif name in FLOW_STYLE:
svg.expand(25,0)
svg.set_slot(True)
self._make_basic_flow(sprite_list, svg, x, y)
- self.docks = (('flow',True,0,2),
- ('flow',False,self.width/2, self.height-yoff))
+ self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
+ ('flow', False, svg.docks[0][0], svg.docks[0][1]))
elif name in FLOW_STYLE_1ARG:
svg.expand(25,0)
svg.set_slot(True)
svg.set_tab(True)
svg.set_innie([True])
self._make_basic_flow(sprite_list, svg, x, y)
- self.docks = (('flow',True,0,2),
- ('number',False,self.width-xoff,12),
- ('flow',False, 0, self.height-yoff),
- ('flow',False,self.width/2, self.height-yoff))
+ self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
+ ('number', False, svg.docks[1][0], svg.docks[1][1]),
+ ('flow', False, svg.docks[2][0], svg.docks[2][1]),
+ ('flow', False, svg.docks[3][0], svg.docks[3][1]))
elif name in FLOW_STYLE_BOOLEAN:
svg.expand(25,0)
svg.set_slot(True)
svg.set_tab(True)
svg.set_boolean(True)
self._make_basic_flow(sprite_list, svg, x, y)
- self.docks = (('flow',True,0,2),
- ('bool',False,self.width-xoff,12),
- ('flow',False, 0, self.height-yoff)
- ('flow',False,self.width/2, self.height-yoff))
+ self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
+ ('bool', False, svg.docks[1][0], svg.docks[1][1]),
+ ('flow', False, svg.docks[2][0], svg.docks[2][1]),
+ ('flow', False, svg.docks[3][0], svg.docks[3][1]))
else:
svg.expand(40,0)
self._make_basic_block(sprite_list, svg, x, y)
- self.docks = (('flow',True,0,2),('flow',False,0,self.height-yoff))
+ self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
+ ('flow', False,svg.docks[1][0], svg.docks[1][1]))
print "don't know how to create a block for %s" % (name)
+ print self.docks
+ print "w %s h %s" % (svg._width, svg._height)
+
# NEED TO PROCESS DEFAULTS
if len(labels) > 0:
if BLOCK_NAMES.has_key(name):
diff --git a/sprite_factory.py b/sprite_factory.py
index 46132a3..8d168f4 100755
--- a/sprite_factory.py
+++ b/sprite_factory.py
@@ -37,6 +37,7 @@ class SVG:
self._max_y = 0
self._width = 0
self._height = 0
+ self.docks = []
self._scale = 1
self._orientation = 0
self._radius = 8
@@ -49,6 +50,7 @@ class SVG:
self._innie_y2 = (INNIE-self._stroke_width)/2
self._innie_spacer = SPACER
self._slot = True
+ self._cap = False
self._tab = True
self._bool = False
self._slot_x = 10
@@ -67,6 +69,7 @@ class SVG:
svg = self._new_path(x, y)
svg += self._rarc_to(1, -1)
svg += self._do_slot()
+ svg += self._do_cap()
svg += self._rline_to(self._expand_x, 0)
xx = self._x
svg += self._rarc_to(1, 1)
@@ -156,12 +159,14 @@ class SVG:
self._innie_spacer-self._stroke_width)
svg += self._rarc_to(1, -1)
svg += self._rline_to(self._radius/2.0+self._expand_x, 0)
+ xx = self._x
svg += self._rline_to(0,self._radius/2.0)
svg += self._do_boolean()
svg += self._rline_to(0,self._radius*1.5+self._innie_y2+\
self._innie_spacer)
svg += self._do_boolean()
svg += self._rline_to(0,self._radius/2.0)
+ svg += self._line_to(xx, self._y)
svg += self._end_boolean()
return self._header() + svg
@@ -171,9 +176,11 @@ class SVG:
svg += self._rline_to(0,-self._stroke_width)
svg += self._rarc_to(1, -1)
svg += self._rline_to(self._radius/2.0+self._expand_x, 0)
+ xx = self._x
svg += self._rline_to(0,self._radius/2.0)
svg += self._do_boolean()
svg += self._rline_to(0,self._radius/2.0)
+ svg += self._line_to(xx, self._y)
svg += self._end_boolean()
return self._header() + svg
@@ -283,6 +290,13 @@ class SVG:
def set_slot(self, flag=True):
self._slot = flag
+ if self._slot is True:
+ self._cap = False
+
+ def set_cap(self, flag=False):
+ self._cap = flag
+ if self._cap is True:
+ self._slot = False
def set_tab(self, flag=True):
self._tab = flag
@@ -450,6 +464,8 @@ class SVG:
def _do_slot(self):
if self._slot is True:
+ self.docks.append((int(self._x*self._scale),
+ int(self._y*self._scale)))
return "%s%s%s" % (
self._rline_to(0, self._slot_y),
self._rline_to(self._slot_x, 0),
@@ -457,18 +473,31 @@ class SVG:
else:
return self._rline_to(self._slot_x, 0)
+ def _do_cap(self):
+ if self._cap is True:
+ return "%s%s" % (
+ self._rline_to(self._slot_x/2.0, -self._slot_y*2.0),
+ self._rline_to(self._slot_x/2.0, self._slot_y*2.0))
+ else:
+ return ""
+
def _do_tab(self):
if self._tab is True:
- return "%s%s%s%s%s" % (
+ s = "%s%s%s%s%s" % (
self._rline_to(-self._stroke_width, 0),
self._rline_to(0, self._slot_y),
self._rline_to(-self._slot_x+2*self._stroke_width, 0),
self._rline_to(0, -self._slot_y),
self._rline_to(-self._stroke_width, 0))
+ self.docks.append((int(self._x*self._scale),
+ int(self._y*self._scale)))
+ return s
else:
return self._rline_to(-self._slot_x, 0)
def _do_innie(self):
+ self.docks.append((int(self._x*self._scale),
+ int((self._y+self._innie_y2)*self._scale)))
return "%s%s%s%s%s%s%s" % (
self._rline_to(-self._innie_x1, 0),
self._rline_to(0, -self._innie_y1),
@@ -481,6 +510,7 @@ class SVG:
def _do_outie(self):
if self._outie is not True:
return self._rline_to(0, -self._innie_y2)
+ self.docks.append((int(self._x*self._scale), int(self._y*self._scale)))
return "%s%s%s%s%s%s%s%s%s" % (
self._rline_to(0, -self._stroke_width),
self._rline_to(-self._innie_x1-2*self._stroke_width, 0),
@@ -502,11 +532,14 @@ class SVG:
def _start_boolean(self, xoffset, yoffset):
svg = self._new_path(xoffset, yoffset)
self._radius -= self._stroke_width
+ self.docks.append((int(self._x*self._scale), int(self._y*self._scale)))
svg += self._rarc_to(1, -1)
self._radius += self._stroke_width
return svg + self._rline_to(self._stroke_width, 0)
def _do_boolean(self):
+ self.docks.append((int((self._x-self._radius)*self._scale),
+ int((self._y+self._radius)*self._scale)))
return self._rarc_to(-1, 1, 90, 0, 0) + self._rarc_to(1, 1, 90, 0, 0)
def _end_boolean(self):
@@ -528,11 +561,13 @@ class SVG:
self._scale
def _calculate_x_y(self):
+ x = self._stroke_width/2.0
+ y = self._stroke_width/2.0+self._radius
if self._outie is True:
- return(self._stroke_width/2.0+self._innie_x1+self._innie_x2,
- self._radius+self._stroke_width/2.0)
- else:
- return(self._stroke_width/2.0, self._radius+self._stroke_width/2.0)
+ x += self._innie_x1+self._innie_x2
+ if self._cap is True:
+ y += self._slot_y*2.0
+ return(x, y)
#
# Command-line tools for testing