 	draw: ->
 		@_clear()
 		@track._sections.forEach (section) =>
-			section.draw @
+			start = section.transform
+			section._pieces.forEach (piece) =>
+				piece.draw @, start
+				start = start.compound(piece.exitTransform()).compound(@track._gapTransform)			
 		if @showCodes
 			@track.connections().forEach (code) =>
 				@drawCode @track._transform(code).compound(@track._gapTransform), code

				start = start.compound(@_pieces[pieceIndex].exitTransform()).compound(@track._gapTransform)
			start.compound(@_pieces[n].connections[connection].transform())

		draw: (painter) ->
			start = @transform()
			@_pieces.forEach (piece) =>
				piece.draw painter, start
				start = start.compound(piece.exitTransform()).compound(@track._gapTransform)

# Abstract class for defining a painter see:
# - woodentrack.raphael.coffee
# - woodentrack.d3.coffee

			result = result.concat section._pieces
		result

	# Add piece to track.
	# Use start transform to specify position/orientation of piece.
	# If no start provided, the cursor connection will be used.
	# If no pieces in track, the default transform is used.
	# TODO: check piece connections for collisions and bail if there are any
	add: (piece, where) ->
		if where?
