Changes

1,337 bytes added ,  15:55, 26 February 2010
Line 553: Line 553:  
To use the customized block, select the "view source" block from the Extras palette.
 
To use the customized block, select the "view source" block from the Extras palette.
   −
[[Image:TAMyblock.svg]]
+
Examples:
   −
Examples:
+
def myblock(lc, x):
 +
    ###########################################################################
 +
    #
 +
    # Set rgb color
 +
    #
 +
    ###########################################################################
 +
 
 +
    r = int(x[0])
 +
    while r < 0:
 +
        r += 256
 +
    while r > 255:
 +
        r -= 256
 +
    g = int(x[1])
 +
    while g < 0:
 +
        g += 256
 +
    while g > 255:
 +
        g -= 256
 +
    b = int(x[0])
 +
    while b < 0:
 +
        b += 256
 +
    while b > 255:
 +
        b -= 256
 +
    rgb = "#%02x%02x%02x" % (r,g,b)
 +
    lc.tw.fgcolor = lc.tw.cm.alloc_color(rgb)
 +
    return
 +
 
 +
def myblock(lc, x):
 +
    ###########################################################################
 +
    #
 +
    # Draw a dotted line of length x.
 +
    #
 +
    ###########################################################################
   −
  def myblock(lc,x):
+
    try: # make sure x is a number
    # draw a dotted line of length x
+
      x = float(x)
    # make sure x is a number
+
    except ValueError:
    if type(x) != int and type(x) != float:
   
         return
 
         return
    dist = 0
+
 
     # save current turtle pen state
+
     if lc.tw.canvas.pendown:
    pen = lc.tw.turtle.pendown
+
        dist = 0
    # repeat drawing dots
+
        while dist+lc.tw.canvas.pensize < x:   # repeat drawing dots
    while dist+lc.tw.turtle.pensize < x:
+
            lc.tw.canvas.setpen(True)
        setpen(lc.tw.turtle, True)
+
            lc.tw.canvas.forward(1)
        forward(lc.tw.turtle, 1)
+
            lc.tw.canvas.setpen(False)
        setpen(lc.tw.turtle, False)
+
            lc.tw.canvas.forward((lc.tw.canvas.pensize*2)-1)
        forward(lc.tw.turtle, (lc.tw.turtle.pensize*2)-1)
+
            dist += (lc.tw.canvas.pensize*2)
        dist += (lc.tw.turtle.pensize*2)
+
        lc.tw.canvas.forward(x-dist)          # make sure we have moved exactly x
    # make sure we have moved exactly x
+
        lc.tw.canvas.setpen(True)
    forward(lc.tw.turtle, x-dist)
+
     else:
     # restore pen state
+
        lc.tw.canvas.forward(x)
    setpen(lc.tw.turtle, pen)
+
    return
return
      
[[Image:TA-dotted-line.png]]
 
[[Image:TA-dotted-line.png]]
   −
  def myblock(lc,x):
+
  def myblock(lc, x):
     # push an uppercase version of a string onto the heap
+
     ###########################################################################
 +
    #
 +
    # Push an uppercase version of a string onto the heap.
 +
    # Use a 'pop' block to use the new string.
 +
    #
 +
    ###########################################################################
 +
 
 
     if type(x) != str:
 
     if type(x) != str:
 
         X = str(x).upper()
 
         X = str(x).upper()
 
     else:
 
     else:
 
         X = x.upper()
 
         X = x.upper()
    # push result onto heap (use the pop block to use the new string)
   
     lc.heap.append(X)
 
     lc.heap.append(X)
  return
+
    return
 +
 
 +
  def myblock(lc, x):
 +
    ###########################################################################
 +
    #
 +
    # Push hours, minutes, seconds onto the FILO.
 +
    # Use three 'pop' blocks to retrieve these values.
 +
    # Note: because we use a FILO (first in, last out heap),
 +
    # the first value you will pop will be seconds.
 +
    #
 +
    ###########################################################################
   −
def myblock(lc,x):
  −
    # push hours, minutes, seconds onto the heap
  −
    # use three pop blocks to retrieve the values
  −
    # remember: the heap is a FILO (first in, last out)
  −
    # the first value you will pop will be seconds
   
     lc.heap.append(localtime().tm_hour)
 
     lc.heap.append(localtime().tm_hour)
 
     lc.heap.append(localtime().tm_min)
 
     lc.heap.append(localtime().tm_min)
 
     lc.heap.append(localtime().tm_sec)
 
     lc.heap.append(localtime().tm_sec)
  return
+
    return
 +
 
 +
  def myblock(lc, x):
 +
    ###########################################################################
 +
    #
 +
    # Add a third dimension (gray) to the color model.
 +
    #
 +
    ###########################################################################
   −
def myblock(lc,x):
  −
    # add a third dimension (gray) to the color model
  −
    # calculate the value (brightness) of the current color
   
     val = 0.3 * lc.tw.rgb[0] + 0.6 * lc.tw.rgb[1] + 0.1 * lc.tw.rgb[2]
 
     val = 0.3 * lc.tw.rgb[0] + 0.6 * lc.tw.rgb[1] + 0.1 * lc.tw.rgb[2]
    # make sure gray is in range from 0 to 100
   
     if x != 100:
 
     if x != 100:
 
         x = int(x)%100
 
         x = int(x)%100
    # mix in gray
   
     r = int((val*(100-x) + lc.tw.rgb[0]*x)/100)
 
     r = int((val*(100-x) + lc.tw.rgb[0]*x)/100)
 
     g = int((val*(100-x) + lc.tw.rgb[1]*x)/100)
 
     g = int((val*(100-x) + lc.tw.rgb[1]*x)/100)
 
     b = int((val*(100-x) + lc.tw.rgb[2]*x)/100)
 
     b = int((val*(100-x) + lc.tw.rgb[2]*x)/100)
 
     # reallocate current color
 
     # reallocate current color
     lc.tw.fgcolor = lc.tw.cm.alloc_color(r<<8,g<<8,b<<8)
+
    rgb = "#%02x%02x%02x" % (r,g,b)
return
+
     lc.tw.fgcolor = lc.tw.cm.alloc_color(rgb)
 +
    return
 +
 
 +
def myblock(lc, x):
 +
    ###########################################################################
 +
    #
 +
    # Save an image named x to the Sugar Journal.
 +
    #
 +
    ###########################################################################
   −
def myblock(lc,x)
+
     lc.tw.save_as_image(str(x))
    # save a screenshot in the journal
+
    return
     lc.tw.activity._do_saveimage_cb(lc.tw.activity)
  −
return
      
===From the field===
 
===From the field===