如何在 meshlabserver .mlx 脚本中设置均匀网格重采样的参数
How to set the parameters for Uniform Mesh Resampling in a meshlabserver .mlx script
我想将统一网格重采样过滤器自动应用于一组网格,每个网格都有不同的几何形状。我通过保存 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>
我想要的是将像元大小设置为 0.5%,将偏移设置为 51%,然后让 Meshlab 从我正在处理的每个网格的几何形状中计算出最小值和最大值。我该怎么做?
提前致谢!
我找到了一个解决方案:
首先,我使用我编写的命令行 -- meshgeometry -- 来获取网格的大小(meshgeometry 可在 https://github.com/r03ert0/meshgeometry 获得)。然后,我使用 bash 生成 meshlabserver
脚本,如下所示:
diag=$(meshgeometry -i $holes_surf -size|cut -d' ' -f 2|awk -F, '{print sqrt(**2+**2+**2)}')
diag5=$(echo $diag|awk '{print /5}');
precision=$(echo $diag|awk '{print *0.005}');
offset=$(echo $diag|awk '{print /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
之后,我可以像这样用我的 script.mlx
文件调用 meshlabserver
:
meshlabserver -i source-mesh.ply -o dest-mesh.ply -s "script.mlx"
我想将统一网格重采样过滤器自动应用于一组网格,每个网格都有不同的几何形状。我通过保存 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>
我想要的是将像元大小设置为 0.5%,将偏移设置为 51%,然后让 Meshlab 从我正在处理的每个网格的几何形状中计算出最小值和最大值。我该怎么做?
提前致谢!
我找到了一个解决方案:
首先,我使用我编写的命令行 -- meshgeometry -- 来获取网格的大小(meshgeometry 可在 https://github.com/r03ert0/meshgeometry 获得)。然后,我使用 bash 生成 meshlabserver
脚本,如下所示:
diag=$(meshgeometry -i $holes_surf -size|cut -d' ' -f 2|awk -F, '{print sqrt(**2+**2+**2)}')
diag5=$(echo $diag|awk '{print /5}');
precision=$(echo $diag|awk '{print *0.005}');
offset=$(echo $diag|awk '{print /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
之后,我可以像这样用我的 script.mlx
文件调用 meshlabserver
:
meshlabserver -i source-mesh.ply -o dest-mesh.ply -s "script.mlx"