# File io/MeshIO.rb, line 27
  def MeshIO.dumpMesh(baseFile,mesh,bmesh)
    nodeFile = File.new("#{baseFile}.node","w")
    eleFile = File.new("#{baseFile}.ele","w")
    edgeFile = File.new("#{baseFile}.edge","w")
    bdryFile = File.new("#{baseFile}.bdry","w")

    nodeF = ""
    eleF = ""
    edgeF = ""
    bdryF = ""

    nodeHash = Hash.new
    edgeHash = Hash.new
    bsbHash = Hash.new
    bvHash = Hash.new
    bfHash = Hash.new
    bfindex = 0
    nindex = 0
    eindex = 0
    bsbindex = 0
    bvindex = 0
    eleIndex = 0
    
    # Dump d0 vertices to .bdry
    # and dump all vertices to .node
    mesh.iterate(0) do |v|
      nodeHash[v] = nindex
      nodeF += "#{nindex} #{v.controlPoint[0]} #{v.controlPoint[1]} "
      nodeF += "#{v.data.to_a.join(" ")}\n"
      
      if (v.bdry.is_a?(VertexBoundary) && v.bdry.parentCell.is_a?(BezierVertex) )
        ## d0 vertex
        bv = v.bdry.parentCell
        bvHash[bv] = bvindex
        bdryF += "#{bvindex} #{nindex}\n"
        
        bvindex += 1
      end
      nindex += 1
    end
    
    bdryF += "--- #{bvindex}\n"
    
    # Dump splines to .bdry
    bmesh.iterate(1) do |bsb|
      bsbHash[bsb] = bsbindex
      v0 = bmesh.down(bsb)[0]
      closed = nil
      v1 = nil
      if (bsb.spline.closed)
        closed = 1
        v1 = v0
        puts "Error on closed w/2 verts" if bmesh.down(bsb).length > 1
      else
        closed = 0
        v1 = bmesh.down(bsb)[1]
      end

      puts "Error in dump mesh" if closed==nil || v1==nil

      bdryF += "#{bsbindex} #{bvHash[v0]} #{bvHash[v1]} #{closed} "
      bdryF += "#{bsb.fixed} #{bsb.color} #{bsb.rest}\n"

      (bsb.spline.d).each do |dbp|
        bdryF += "#{dbp[0]} #{dbp[1]} "
      end
      bdryF += "\n"
      bsb.spline.k.each do |kt|
        bdryF += "#{kt} "
      end
      bdryF += "\n"
      
      bsbindex += 1
    end
    bdryF += "=== #{bsbindex}\n"
    
    #dump boundary regions to .bdry
    bmesh.iterate(2) do |bf|
      bfHash[bf] = bfindex
      bsbs = bmesh.down(bf)
      bsbs.collect! {|bsb| bsbHash[bsb]}
      bdryF += "#{bfindex} #{bf.data.minAngle} #{bf.data.color} #{bsbs.join(" ")}\n"
      
      bfindex += 1
    end


    #dump edge midpoints to .node
    # and dump edges to .edge
    eindex = 0
    mesh.iterate(1) do |e|
      nodeHash[e] = nindex
      nodeF += "#{nindex} #{e.controlPoints[1][0]} #{e.controlPoints[1][1]} "
      nodeF += "#{e.dataPoints[1].to_a.join(" ")}\n"

      edgeHash[e] = eindex
      
      edgeF += "#{eindex} #{nodeHash[(mesh.down(e)[0])]} "
      edgeF += "#{nodeHash[e]} #{nodeHash[(mesh.down(e)[1])]} "
      if (e.bdry.is_a? EdgeBoundary)
        edgeF += "#{bsbHash[e.bdry.parentCell]} #{e.bdry.u0} #{e.bdry.u1}\n"
      else
        edgeF += "-1\n"
      end
      nindex += 1
      eindex += 1
    end

    #dump triangles to .ele
    mesh.iterate(2) do |t|
      edges = mesh.down(t)
      edgeNums = edges.collect! {|e| edgeHash[e]}
      inverted = (mesh.inverted[t]) ? "1" : "0"

      if (t.bdry == nil)
        puts "Nil Bounding Face in Dump Mesh."
      end
      eleF += "#{eleIndex} #{edgeNums.join(" ")} #{inverted} #{bfHash[t.bdry]}\n"
      eleIndex += 1
    end

    nodeFile.puts nodeF
    eleFile.puts eleF
    edgeFile.puts edgeF
    bdryFile.puts bdryF

    bdryFile.close()
    edgeFile.close()
    nodeFile.close()
    eleFile.close()
  end