如何在meshlabserver .mlx脚本

时间:2017-04-18 19:20:11

标签: meshlab

我想将Uniform Mesh Resampling过滤器自动应用于一组网格,每个网格具有不同的几何形状。我通过保存Filters:Show current filter script的输出获得了.mlx脚本。但是,脚本中的参数似乎是为我使用的网格的特定几何设置的:

<filter name="Uniform Mesh Resampling">
  <Param type="RichAbsPerc" value="1.1632" min="0" name="CellSize" max="232.648"/>
  <Param type="RichAbsPerc" value="0.93059" min="-46.5296" name="Offset" max="46.5296"/>
  <Param type="RichBool" value="true" name="mergeCloseVert"/>
  <Param type="RichBool" value="false" name="discretize"/>
  <Param type="RichBool" value="true" name="multisample"/>
  <Param type="RichBool" value="true" name="absDist"/>
 </filter>

我想要的是将Cell大小设置为0.5%,将Offset设置为51%,并使Meshlab从我处理的每个网格的几何图形中得出min和max。我怎么能这样做?

提前致谢!

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案: 首先,我使用我编写的命令行 - meshgeometry - 来获取网格的大小(网格几何在https://github.com/r03ert0/meshgeometry处可用)。然后,我使用bash生成meshlabserver脚本,如下所示:

diag=$(meshgeometry -i $holes_surf -size|cut -d' ' -f 2|awk -F, '{print sqrt($1**2+$2**2+$3**2)}')
diag5=$(echo $diag|awk '{print $1/5}');
precision=$(echo $diag|awk '{print $1*0.005}');
offset=$(echo $diag|awk '{print $1/5*2*0.01}');

cat>"script.mlx"<<EOF
<!DOCTYPE FilterScript>
<FilterScript>
 <filter name="Uniform Mesh Resampling">
  <Param type="RichAbsPerc" value="$precision" min="0" name="CellSize" max="$diag"/>
  <Param type="RichAbsPerc" value="$offset" min="-$diag5" name="Offset" max="$diag5"/>
  <Param type="RichBool" value="false" name="mergeCloseVert"/>
  <Param type="RichBool" value="false" name="discretize"/>
  <Param type="RichBool" value="true" name="multisample"/>
  <Param type="RichBool" value="true" name="absDist"/>
 </filter>

</FilterScript>
EOF

之后,我可以使用我的meshlabserver文件拨打script.mlx,如下所示:

meshlabserver -i source-mesh.ply -o dest-mesh.ply -s "script.mlx"