Как установить параметры для повторной выборки сетки в скрипте meshlabserver .mlx

Я хотел бы автоматически применить фильтр Uniform Mesh Resampling к набору сеток, каждая из которых имеет разную геометрию. Я получил для этого скрипт.mlx, сохранив вывод из Filters:Show current filter script, Однако параметры в скрипте, похоже, установлены для конкретной геометрии сетки, которую я использовал:

<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 вычислять минимальное и максимальное значения из геометрии каждой из ячеек, которые я обрабатываю. Как я мог это сделать?

Заранее спасибо!

1 ответ

Решение

Я нашел одно решение: во-первых, я использую написанную мной командную строку - meshgeometry - чтобы получить размер сетки (meshgeometry доступна по адресу https://github.com/r03ert0/meshgeometry). Затем я генерирую meshlabserver скрипт, использующий bash, вот так:

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"
Другие вопросы по тегам