Экспортировать STL из командной строки OpenSCAD, вызывая модуль в скрипте?

Учитывая файл. SCAD, содержащий некоторые модули, как я могу выполнить один из этих модулей из командной строки?

пример.Скад

module One() { ... }
module Two() { ... }

render.sh

openscad -q -o one.stl --module One example.scad

Обратите внимание, что здесь нет опции --module, но именно это я и пытаюсь сделать. Обходным путем было бы сделать другой .SCAD-файл , например one.scad, который включает в себя example.scad, и просто вызывает One(); внутри и рендерит этот файл из файла оболочки. Но это не идеально.

, 👍3


3 ответа


Лучший ответ:

1

Опция openscad-D на самом деле может включать произвольный код, а не только определения переменных, поэтому вы можете включить вызов модуля. Вы даже можете использовать /dev/null в Linux или NUL в Windows в качестве входного файла и иметь 100% вашего кода в операторах-D.


,

Возможно, показ того, как работает экспорт STL, принесет пользу ответу., @0scar

Ура! Впервые я был рад увидеть, что -15 от моего ответа было отклонено, потому что новый ответ-такая хорошая новость! :-), @R.. GitHub STOP HELPING ICE


1

OpenSCAD не имеет такой опции в командной строке, но общая идиома, которую я считаю, вы хотите использовать, это have .scad исходные файлы, которые являются модулями, включают в себя вызовы модуля(модулей) на верхнем уровне, управляемые переменными, которые вы можете установить в командной строке или интерфейсе GUI customizer. Любые такие вызовы будут игнорироваться, если файл используется (через директиву use) в другом файле, чтобы они не повредили его статус библиотеки и облегчили предварительный просмотр/тестирование. Так, например, вы могли бы иметь:

wantOne = false;
if (wantOne) One();

а затем установите wantOne в true из командной строки.

,

Спасибо. Я думаю, что это лучше, чем иметь отдельный .scad просто для вызова каждого модуля., @Josh M.


1

Разрабатывая ответ @r-github-stop-helping-ice, я считаю полезным следующий шаблон:

пример.scad
module a() { .. }
module b() { .. }
module c() { .. }

module print(item=0) {
  if (item==1) a();
  if (item==2) b();
  if (item==3) c();
}

item = 0;
print(item);
рендер.sh
#!/bin/bash
for i in {1..3}; do
  openscad -D item=${i} -o item_${i}.stl example.scad
done
,