OpenSCAD mit mehreren Instanzen laufen lassen?
18. December 2019 01:47
Hallo zusammen,

nach seeehr langer Forums Abstinenz mal wieder eine Frage von mir.

Gibt es irgend eine, praktikable, Lösung OpenSCAD tatsächlich in mehreren Instanzen parallel auszuführen?
Klar, ich weiß, ich kann mehrere Instanzen öffnen, aber rendern kann halt immer nur eine Instanz zur Zeit.

Mir ist grob klar warum, aber kann man da nicht irgendwas "tricksen"?

Ich dachte da schon an Virtualisierung, Virtualbox und ab dafür.... Aber geht das nicht auch irgendwie anders?

Zum Hintergrund:
Ich erstelle gerade für ein Projekt eine Bauteilbibliothek, die Teile sollen alle auch als .stl zur Verfügung stehen (Am Ende weit mehr als 200 Teile...) das dauert sonst ewig.

Eine zweite Möglichkeit wäre ein Bashscript (Linux) das die ganze Geschichte, immer noch langsam aber dafür autark, im Hintergrund alleine abfackelt.
Hier fehlt mir aber was OpenSCAD angeht komplett die Erfahrung.

Hat das evtl. schon mal jemand realisiert?

Denkanstöße sind sehr willkommen...

Gruß
Kistenschieber
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
18. December 2019 02:00
Das hier ist eine mögliche Lösung:
[github.com]

Das hilft auch sehr, liefert aber nicht immer gute stl-Dateien:
[www.theiling.de]

Herzl. Grüße

1-mal bearbeitet. Zuletzt am 18.12.19 02:06.
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
18. December 2019 02:17
Hi AlterBastler,

danke für die schnelle Antwort zu früher Stunde ;-)

Das sieht sehr interessant aus und wird definitiv ausprobiert.
Einen Haken hat die Sache aber leider, ich müsste die Quelldateien der Objekte modifizieren.

Das ist zwar kein großes Ding, aber eine der "Richtlinien" die ich mir bei diesem Projekt gesetzt habe ist, dass alle .stl Dateien aus den zur Verfügung gestellten Original Quelldateien erstellt werden.

Einfach um zu vermeiden das hier, ungewollt / versehentlich, Abweichungen generiert werden.
Letztendlich geht es mir um Replizierbarkeit, der Nutzer soll die Möglichkeit haben die exakt gleiche "Datenbasis" zu nutzen wie der Autor der Dateien.
Ob er das nun macht, bleibt dann ihm überlassen...

Aber interessant ist der von dir gezeigte Ansatz schon.

Gruß
Kistenschieber
VDX
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
18. December 2019 03:20
... eventuell kannst du mal versuchen, mehrere OpenScad-Versionen in unterschiedlich benannten Ordnern mit verschiedenen Namen (z.B. OpenScad1.exe, OpenScad2.exe, ...) zu installieren, so daß sich das System so überlisten läßt?


Viktor
--------
Aufruf zum Projekt "Müll-freie Meere" - [reprap.org] -- Deutsche Facebook-Gruppe - [www.facebook.com]

Call for the project "garbage-free seas" - [reprap.org]
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
18. December 2019 04:26
Hi Viktor,

öhm, nö...
.exe is unter Linux nicht...

Selbst wenn du hier verschiedene Versionen gleichzeitig startest, werden die entsprechenden Funktionsaufrufe im Hintergrund an die selben Programbibliotheken weitergereicht.
Das ist zumindest mein Kenntnisstand.

Du kannst das Ding so oft initialisieren wie du willst, es rendert immer nur eine Instanz gleichzeitig.

Das macht eine "Massenbearbeitung" echt langwierig.

Gruß
Kistenschieber
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
20. December 2019 15:08
Moin!

Also hier ist schon mal beschrieben, wie man openSCAD in Batch aufruft:
[forum.openscad.org]

oder noch besser hier:

[en.wikibooks.org]

Du kannst Parameter über die option -D setzen, wenn notwendig und diese im SCAD-Script abfargen und somit die zu rendernden Teile auswählen.

damit hab ich aus einer SCAD-Datei mehere STL-Versionen erstellen können. In der SCAD waren mehere Teile definiert, die per Parameter aktiviert wurden. Somit hatte ich beim interaktiven Aufruf die Gesamtansicht und über den Batchaufruf die einzelnen Teile als STL's gerendert (und dafür Vorschaubilder erzeugt). ist es das was du möchtest ?

Es wird damit immer noch seriell gerendert, aber ich hab die Erfahrung, das das Rendern einer STL mit einer i7-CPU und 16 GB Speicher (allerdings einer einfachen Grafikkarte, die nicht beim Rendern genutzt werden kann) schon lange dauert. Möchte da nicht ausprobieren, wie die Last in die Höhe geht, wenn der PC parallel rendern soll ...

Du könntest aber versuchen, openSCAD unter verschiedenen Usern zu starten, dann sollten eigentlich die Prozesse auch getrennt sein und somit ein paralleles Rendern möglich sein ... käme auf einen Versuch an.

Letzte - und ich meine auch die interessanteste und beste - Möglichkeit: openSCAD (nur Batch! nicht als GUI) unter docker laufen lassen. Das wäre auch insofern interessant, als das du dann ja nur ein Image bauen musst und jede benötigte Instanz zum Rendern dann über einfachen Start eines weiteren Containern mit diesem Image möglich ist. Du solltest dann nur darauf achten, das die Ausgabedateien unterschiedlich heissen oder in verschiedene Ausgabeverzeichnisse laufen (Aufrufparameter beim Containerstart). Wenn da für dich interesant ist, könnte ich mal ein Image und die container-Definitionen zusammenstellen (das Thema klingt interessant!)
Setzt aber eine wirklich leistungsfähige Maschine voraus (welche Eckdaten hat die dir zur Verfügung stehende: CPU, Speicher, Grafikkarte) ? Welches Linux setzt du ein ?

2-mal bearbeitet. Zuletzt am 20.12.19 15:21.


Grüße von der Nordsee
Knut
- - - -
P3Steel toolson MK2 [scheuten.me] - RAMPS 1.4 - TMC2100 - 2x ext. MOSFET - S3D-Hotends (0,3 mm Airbrush + 0,4mm) - Marlin 1.1.9bugfix - Elegoo Mars - RasberryPi 3B (octoprint, pronterface) - unter Ubuntu 18.04.LTE+Win10: Cura 4.2.1 - FreeCAD 0.18 - openSCAD 2019.05
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
21. December 2019 02:54
Hi hotprinter,

auf dem Rechner läuft ne i5-2400 CPU / 16 GB RAM.
GraKa wird von OpenSCAD ja, leider, gar nicht wirklich in Anspruch genommen.

Ach ja, Mint 18.3 64-bit

Die Hardware scheint nicht der Bottleneck zu sein, unter Win10 (Dualboot) läuft Fusion360 recht anständig.

Die Geschichte mit docker hört sich interessant an. Docker läuft mir in letzter Zeit ständig über den Weg, habe ich mich aber noch nicht mit beschäftigt.
Es geht um Virtualisierung oder? Das wäre schon interessant...

Schöne Grüße von einem Rheinländer der jetzt auch lieber an der Nordsee wäre ;-)

Kistenschieber
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
21. December 2019 08:50
Moin!
Naja, das mit der Nordsee überleg dir lieber ... ist naßkalt zur Zeit. Im Sommer ist es besser.

Hab noch ein wenig geforscht - ja, anschienend nutzt openSCAD nur eine CPU und leider da auch nur ein Thread.

Ich weiß ja nicht was du rendern willst ... aber definitiv - mit so einer Ausstattung solltest du auf paralleles Rendern verzichten. Da wäre eher was für "richtige" Server.
Aber der Versuch ist es wert. Vielleicht kann man ja die docker-container auf verschiedene threads verteilen ...

Wie lange dauert es denn, wenn du openSCAD im GUI-Modus aufrufst und das Objekt renderst ? Und beobachte dabei mal den Load des Systems.

Und was willst du per Aufrufparameter anpassen ?

Aber das Ganze können wir ja mal angehen. Ich werd mal ein Image vorbereiten und auch den Aufruf für parallel betriebene Container m it einem per Parameter anpassbaren Objekt.
Ich melde mich wieder, wenn ich was zum Laufen bekommen habe.
Wird aber dieses Jahr nix mehr ...

Gruß

Knut
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
21. December 2019 09:39
Hi Knut,

eilt nicht, die Masse habe ich mittlerweile in Handarbeit erledigt.
Für zukünftige Aktionen ist das aber definitiv interessant.

Die Systemauslastung ist beim rendern natürlich vom Objekt abhängig, aber es ist ja immer nur ein (wechselnder) Kern der bei 100% "herumeiert".
Den RAM bekomme ich nur voll, wenn ich zig (>20) Objekte nacheinander render. Die Daten scheint das System dann im Arbeitsspeicher zu halten, bis die Datei geschlossen wird.

Übrigens, Nordsee ist doch im Herbst am interessantesten, ich mag's etwas derber ;-)
Irgend wann ziehen wir hoch an die Küste, ist fest eingeplant.

Gruß
Steffen
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
21. December 2019 10:05
Ok,

ich schau mal die Tage, was ich da zusammenbasteln kann und melde mich.
Und wenn ihr hier oben angekommen seid: auch melden ;-)

Gruß

Knut
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
26. December 2019 13:32
Hi Knut,

ich noch Mal...

Kaum denkt man der Drops wäre gelutscht...

Anhängend ein Beispiel an dem man die Problematik ganz gut erkennen kann.

Aus dieser Datei generiert, die dem Nutzer auch als Quelldatei zur Verfügung stehen wird, möchte ich verschiedene Versionen fertig als .stl ebenfalls zum Download bereitstellen.

Das läuft darauf hinaus, das ich das Teil halt immer wieder mit verschiedenen Parametern rendern lasse:

tiny_wheel_typ_a(60,15,5,1);
tiny_wheel_typ_a(60,20,5,1);
tiny_wheel_typ_a(60,25,5,1);
tiny_wheel_typ_a(60,30,5,1);

tiny_wheel_typ_a(60,15,5,0);
tiny_wheel_typ_a(60,20,5,0);
tiny_wheel_typ_a(60,25,5,0);
tiny_wheel_typ_a(60,30,5,0);

tiny_wheel_typ_a(65,15,5,1);
tiny_wheel_typ_a(65,20,5,1);
tiny_wheel_typ_a(65,25,5,1);
tiny_wheel_typ_a(65,30,5,1);

tiny_wheel_typ_a(65,15,5,0);
tiny_wheel_typ_a(65,20,5,0);
tiny_wheel_typ_a(65,25,5,0);
tiny_wheel_typ_a(65,30,5,0);

...

Im Prinzip würde ich das Teil gerne in möglichst vielen unterschiedlichen, vorgerenderten .stl Dateien zur Verfügung stellen.

Dazu muss ich eben jedesmal von Hand die Parameter ändern, das Teil rendern und die .stl speichern....

Wenn ich einen Weg finden würde OpenSCAD im CLI auszuführen und die sich ändernden Parameter aus einer "Konfigurationsdatei" einzulesen (Bei einigen BASH Befehlen ja durchaus möglich) wäre der Käse gerollt...

Nur so zum Verständnis.

Gruß
Steffen
Anhänge:
Öffnen | Download - tiny_wheel_typ_a_xxx_xx_x_x.scad (5.1 KB)
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
26. December 2019 17:00
Als Anregung:
[en.wikibooks.org]
[www.thingiverse.com]

Herzl. Grüße
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
28. December 2019 13:29
Moin!

geht über den -D Parameter von openSCAD
Noch ein wenig Geduld, dann liefere ich dir die docker-Version ...

Bis dahin erstmal guten Rutsch !
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
10. January 2020 01:45
Eigentlich sollte das recht einfach machbar sein.
Ein make-file und, wie hotprinter bereits sagte, der "-D" Parameter sollten Dir weiter helfen

Zitat aus dem (englischen) OpenScad user manual

Constants

In order to pre-define variables, use the -D option. It can be given repeatedly. Each occurrence of -D must be followed by an assignment. Unlike normal OpenSCAD assignments, these assignments don't define variables, but constants, which can not be changed inside the program, and can thus be used to overwrite values defined in the program at export time.

If you want to assign the -D variable to another variable, the -D variable MUST be initialised in the main .scad program

param1=17;       // must be initialised
val=param1;      // param1 passed via -D on cmd-line
echo(val,param1); // outputs 17,17

without the first line, val would be undefined.

The right hand sides can be arbitrary OpenSCAD expressions, including mathematical operations and strings. Be aware that strings have to be enclosed in quotes, which have to be escaped from the shell. To render a model that takes a quality parameter with the value "production", one has to run

openscad -o my_model_production.stl -D 'quality="production"' my_model.scad

When executing OpenSCAD from another process in Unix, the single-quotes shouldn't be used e.g. from within a Java application:

   pb = new ProcessBuilder("/usr/bin/openscad",
     "-o", "my_model_production.stl",
     "-D", "quality=\"production\"",
     "my_model.scad");

On Windows you may need to escape the inner quotes instead:

openscad -o my_model_production.stl -D "quality=\"production\"" my_model.scad

1-mal bearbeitet. Zuletzt am 10.01.20 01:45.
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
10. January 2020 15:07
Hi Kistenschieber,

als Überparameter, tiny_wheel_typ_a(65,15,5,0); geht so nicht.

1. module tiny_wheel_typ_a(wdia,wb,adia,aform) in module tiny_wheel_typ_a() ändern

2. tiny_wheel_typ_a(80,20,5,1); in tiny_wheel_typ_a(); ändern

3. diese Variablen neu setzen wdia=80; wb=20; adia=5; aform=1;

dann lassen sich die Variablen auch mit,

z.b h:\openscad-2015.03-2\openscad -o tiny_wheel_typ_a_2.stl -D wdia=60 -D wb=20 -D adia=5 -D aform=1 tiny_wheel_typ_a_2.scad

übergeben.

Unter Win7 kann man das mit Autohotkey mehrfach starten (parallel) mit verschiedenen Parametern.

Sollte wohl mit Linux auch gehen.

1-mal bearbeitet. Zuletzt am 10.01.20 15:08.


Gruß,
Michael

Acrylic I3 / Arduino Mega 2560 R3 / RAMPS 1.4 / 12864 LCD mit Wlan-SD Karte / TMC2100 / MK8 m. Bowden / 5mm DDP (PEI) / Tr8x4 / Mosfet 30A / Marlin-1.1.8 / Repetier-Host. / PrusaSlicer-2.3.0
In Planung, Ultimaker-Kinematic mit Kugellagern und 30X30 Profilen
LCD mit Wlan-SD Karte -- Mein I3 u. leise Y-Achse mit Mittelmotor
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
10. January 2020 18:16
Quote
Printey

z.b h:\openscad-2015.03-2\openscad -o tiny_wheel_typ_a_2.stl -D wdia=60 -D wb=20 -D adia=5 -D aform=1 tiny_wheel_typ_a_2.scad
...
Sollte wohl mit Linux auch gehen.

eigentlich so:

Datei "doit.sh" erstellen (oder anderer Name ;-) ):

#! /bin/bash

function dooc {
  # das & am ende ruft openscad in Subtasks auf, Achtung! nicht zuviele parallele Aufrufe!
  /PFAD-ZU-OPENSCAD-EINSETZEN/openscad -o tiny_wheel_typ_a_2.stl -D wdia=$1 -D wb=$2 -D adia=$3 -D aform=$4 tiny_wheel_typ_a_2.scad &
}

dooc 60 20 5 1 
# letzte Zeile mit weiteren Parametern wiederholen

und dann noch mit "chmod 750 doit.sh" ausführbar machen.
Danach in einer bash-Session mit ./doit.sh aufrufen.
(hab das nicht weiter getestet, wenn's nicht klappt, bitte melden)

An der docker-Lösung konnte ich noch nicht weiter arbeiten, sorry ...

Gruß. Knut
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
13. January 2020 07:41
Ey, ihr seid der Wahnsinn...

So viel und vor allem hilfreiche (!) Resonanz hätte ich wirklich nicht mal annähernd erwartet!

Vielen lieben, herzlichen Dank!

Der letzte Vorschlag von Knut sieht seeehr vielversprechend aus.

So bald ich die Gelegenheit habe, probiere ich das aus und melde mich dann.

Ihr seid klasse, danke noch Mal!

Gruß
Steffen
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
13. January 2020 09:52
Ich glaube ich werde einfach langsam alt...

Was mache ich falsch?
Nachfolgend die für den Test stark vereinfachte Datei:
test.scad:
a=10;
b=10;
c=10;

cube([a,b,c]);

Datei test.sh:
#! /bin/bash

function dooc {
  # das & am ende ruft openscad in Subtasks auf, Achtung! nicht zuviele parallele Aufrufe!
  /usr/bin/openscad -o /home/user/test.stl -D a=$1 -D b=$2 -D c=$3 -D test.scad &
}

dooc 10 10 10 
dooc 10 20 20 
dooc 10 30 40 
dooc 20 30 45 
dooc 30 60 10 

# letzte Zeile mit weiteren Parametern wiederholen

Aufruf:
bash test.sh

Ausgabe:
Usage: /usr/bin/openscad [ -o output_file [ -d deps_file ] ]\
                         [ -m make_command ] [ -D var=val [..] ] \
                         [ --help ] print this help message and exit \
                         [ --version ] [ --info ] \
                         [ --camera=translatex,y,z,rotx,y,z,dist | \
                           --camera=eyex,y,z,centerx,y,z ] \
                         [ --autocenter ] \
                         [ --viewall ] \
                         [ --imgsize=width,height ] [ --projection=(o)rtho|(p)ersp] \
                         [ --render | --preview[=throwntogether] ] \
                         [ --colorscheme=[Cornfield|Sunset|Metallic|Starnight|BeforeDawn|Nature|DeepOcean] ] \
                         [ --csglimit=num ]\
                         filename

(Der Programmaufruf funktioniert, Anwendung startet unter dem angegebenen Pfad)

Die Ausgabe erhalte ich auch 5x, entsprechend den Aufrufen in der .sh

Aber sonst passiert nix...

("user" im Dateipfad ist natürlich ein Platzhalter den ich für's Forum eingesetzt habe...)

Wo habe ich da jetzt den Knoten im Hirn?
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
13. January 2020 11:40
Hi Kistenschieber,

ist da vielleicht ein -D zuviel ??

@@ /usr/bin/openscad -o /home/user/test.stl -D a=$1 -D b=$2 -D c=$3 -D test.scad &

@@ /usr/bin/openscad -o /home/user/test.stl -D a=$1 -D b=$2 -D c=$3 test.scad &

Ach hatte ich vergessen, wenn man nur eine Ausgabedatei (Name) hat, gibt es nur eine, die letzte.

1-mal bearbeitet. Zuletzt am 13.01.20 11:47.


Gruß,
Michael

Acrylic I3 / Arduino Mega 2560 R3 / RAMPS 1.4 / 12864 LCD mit Wlan-SD Karte / TMC2100 / MK8 m. Bowden / 5mm DDP (PEI) / Tr8x4 / Mosfet 30A / Marlin-1.1.8 / Repetier-Host. / PrusaSlicer-2.3.0
In Planung, Ultimaker-Kinematic mit Kugellagern und 30X30 Profilen
LCD mit Wlan-SD Karte -- Mein I3 u. leise Y-Achse mit Mittelmotor
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
13. January 2020 11:53
Öh...

Ja, war eins zuviel eye rolling smiley

Hab's geändert, aber ändert nix...

Quote

Ach hatte ich vergessen, wenn man nur eine Ausgabedatei (Name) hat, gibt es nur eine, die letzte.

Äh, wie jetzt? Sorry ich verstehe nur Bahnhof?
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
15. January 2020 17:21
Moin!

Versuchs bitte mal auf der Kommandozeile mit

/PFADZUOC/openscad -o test.stl -D a=10 -D b=20 -D c=30 test.scad

Also bei mir funktioniert das tadellos. In Windows und TUX. Welche openscad-Version verwendest du ?
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
15. January 2020 17:28
Quote
Kistenschieber
Öh...

Ja, war eins zuviel eye rolling smiley

Hab's geändert, aber ändert nix...

Quote

Ach hatte ich vergessen, wenn man nur eine Ausgabedatei (Name) hat, gibt es nur eine, die letzte.

Äh, wie jetzt? Sorry ich verstehe nur Bahnhof?

Ahhhhrg, sorry, mein Fehler ! Klar ! in der Funktion werden die Daten immer in die gleiche Ausgabedatei ausgegeben.
Ok, kleine Änderung:

~~~
#! /bin/bash

function dooc {
# das & am ende ruft openscad in Subtasks auf, Achtung! nicht zuviele parallele Aufrufe!
/usr/bin/openscad -o /home/user/test-$1-$2-$3.stl -D a=$1 -D b=$2 -D c=$3 test.scad &
}

dooc 10 10 10
dooc 10 20 20
# USW
# letzte Zeile mit weiteren Parametern wiederholen
~~~

oder einfach einen 4. Parameter übergeben (fortlaufene Nummer o.ä) und den für den Namen der Ausgabedatei verwenden ...
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
16. January 2020 08:35
Moin Knut,

ein Nordlicht das sich so hervorragend mit OpenSCAD UND Linux auskennt muss ich kennen lernen...

Das nächste Mal wenn ich nördlich von Bremen unterwegs bin, müssen wir uns auf eine Tasse Jever zusammen setzen...

Hat funktioniert, du hast was gut bei mir!

Ein herzliches Danke aus dem, gerade mal, sonnigen Ratingen.

Gruß
Steffen

PS: Ein fettes Danke natürlich auch an alle anderen, ihr seid super!

1-mal bearbeitet. Zuletzt am 16.01.20 08:48.
Re: OpenSCAD mit mehreren Instanzen laufen lassen?
17. January 2020 12:27
Gern geschehen!
In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicke hier, um Dich einzuloggen