 
       # finally, if it's a 1, we've got an interpolate
       else if op is '1'
+        # throw if tool isn't traceable
+        if not @trace.region and not @tools[@currentTool].stroke
+          throw new Error "tool #{@currentTool} is not a strokeable tool"
         # if there's no path yet, we need to move to the current point
         unless @trace.path
           @trace.path = "M#{start.x} #{start.y}"

        # linear interpolation adds an absolute line to the path
        if @mode is 'i'
          # add the segment to the path
          @trace.path += "L#{end.x} #{end.y}"
          # add the segment to the bbox
          if @trace.region
            @addBbox {

            @addBbox @tools[@currentTool].bbox end.x, end.y
        # are interpolation adds an eliptical (circular) arc to the path
        else if @mode is 'cw' or @mode is 'ccw'
          # throw if tool isn't a circle
          unless @tools[@currentTool].stroke['stroke-linecap'] is 'round'
            throw new Error "tool #{@currentTool} is not circular and cannot
                             stroke arcs"
          r = Math.sqrt end.i**2 + end.j**2
          sweep = if @mode is 'cw' then 0 else 1
          large = 0
