使用AWK将MDF转换为VTK
我是一个初学者,很抱歉,如果这已经被涵盖,但我似乎无法找到确切的我需要解决我的问题。 我正在尝试编写一个AWK“脚本”,它可以将MDF(网格定义文件)作为输入转换为(有效的)VTK文件作为输出 我有一个示例MDF文件,如下所示:使用AWK将MDF转换为VTK,awk,vtk,Awk,Vtk,我是一个初学者,很抱歉,如果这已经被涵盖,但我似乎无法找到确切的我需要解决我的问题。 我正在尝试编写一个AWK“脚本”,它可以将MDF(网格定义文件)作为输入转换为(有效的)VTK文件作为输出 我有一个示例MDF文件,如下所示: TITLE "1" NMESHPOINTS 4 NNODES 4 NELEMENTS_TRIANG1 2 TIMESTEP 0.00001 NINTERNAL_TIMESTEPS 1000 NEXTERNAL_TIMESTEPS 100 DAMPING_FACTOR
TITLE "1"
NMESHPOINTS 4
NNODES 4
NELEMENTS_TRIANG1 2
TIMESTEP 0.00001
NINTERNAL_TIMESTEPS 1000
NEXTERNAL_TIMESTEPS 100
DAMPING_FACTOR 0.01
MESHPOINT_COORDINATES
1 0.0 0.0 0.0
2 1.0 0.0 0.0
3 1.0 1.0 0.0
4 0.0 1.0 0.0
NODES_TRIANG1
1 1 2 3
2 1 3 4
我想从这个输入生成一个有效的VTK文件。
以下是输出的外观:
# vtk DataFile Version 1.0
2D Unstructured Grid
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 4 float
0.0 0.0 0.0
1.0 0.0 0.0
1.0 1.0 0.0
0.0 1.0 0.0
CELLS 2 8
3 0 1 2
3 0 2 3
CELL_TYPES 2
5
5
我试图画出映射是如何工作的,我希望它能解释其中的一些。
为了使这个特定的例子更简单一些,假设我们只想使用三角形。
遗憾的是,我没有与VTK和MDF相同的文件,我试图手动编写一个。
有没有办法用AWK做到这一点?
任何帮助都将不胜感激 显示输入->输出映射的优秀图表!这样写起来非常容易:
$ cat tst.awk
$1 ~ /^[[:alpha:]]/ { f[$1] = $2 }
!NF { block = "" }
$1 == "MESHPOINT_COORDINATES" {
block = $1
print "# vtk DataFile Version 1.0"
print "2D Unstructured Grid"
print "ASCII"
print ""
print "DATASET UNSTRUCTURED_GRID"
printf "POINTS %d float\n", f["NMESHPOINTS"]
next
}
block == "MESHPOINT_COORDINATES" {
$1 = ""
sub(/^[[:space:]]+/,"")
print
}
$1 == "NODES_TRIANG1" {
block = $1
printf "\nCELLS %d %d\n", f["NELEMENTS_TRIANG1"], f["NELEMENTS_TRIANG1"] * 4
next
}
block == "NODES_TRIANG1" {
printf "%s", 3
for (i=2; i<=NF; i++) {
printf " %s", $i - 1
}
print ""
nlines++
}
END {
printf "\nCELL_TYPES %d\n", nlines
for (i=1; i<=nlines; i++) {
print 5
}
}
通常,我们只回答海报试图首先自己解决的问题,但您在创建示例和描述映射方面付出了足够的努力,您应该得到解决方案方面的帮助,因此-请参见上文,尝试自己了解其工作原理(添加“打印”,检查手册页等)然后,如果你有任何具体的问题,就发布一个新的问题
$ awk -f tst.awk file.mdf
# vtk DataFile Version 1.0
2D Unstructured Grid
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 4 float
0.0 0.0 0.0
1.0 0.0 0.0
1.0 1.0 0.0
0.0 1.0 0.0
CELLS 2 8
3 0 1 2
3 0 2 3
CELL_TYPES 2
5
5