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
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) )
bv = v.bdry.parentCell
bvHash[bv] = bvindex
bdryF += "#{bvindex} #{nindex}\n"
bvindex += 1
end
nindex += 1
end
bdryF += "--- #{bvindex}\n"
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"
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
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
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