CoffeeSCad

CoffeeSCad – Programmieren, nicht Zeichnen!

CoffeeSCad ist ein Open Source Projekt mit dem Ziel ein CAD-Programm der anderen Art bereitzustellen.  Hat man üblicherweise die Möglichkeit auch einmal per Script etwas zu fabrizieren, geht es hier gar nicht ohne. Startet man los sieht man Folgendes:

CoffeeSCad leeres Dokument

Kaum ändert man etwas an dem Code, wird schon neu berechnet. Dieses Verhalten kann bei komplexen Objekten etwas nerven – weil Leistungshungerig – , läßt sich aber auch ausschalten.  Es läuft nämlich im Browser und kann vom GitHub bezogen und selbst gehostet werden. Es soll später auch eine Desktop-Version geben. Für mich interessant ist es, weil es stl-Files exportieren kann.

Als Script-Sprache kommt überigens eine Variante von CoffeeScript zum Einsatz, das direkt in JavaScript übersetzbar. Was ist aber das Besondere an einem Script-Basierten Ansatz?

Parameterei

Ich habe gleich einmal ein CoffeeSCad-Script gebastelt, was etwa 2 Stunden gedauert hat. Es erstellt einen Drehknopf. Dabei kann man Durchmesser, Anzahl der Ausnehmungen und Farbe als Variablen fest setzen und erhält prompt das Ergebnis. Das erneute Berechnen dauert dann nur etwa 3 Sekunden.

coffeescad_knob1

Kleiner und mit weniger Ausnehmungen? coffeescad_knob2

Größer?coffeescad_knob3Oder einmal in einer anderen Farbe? coffeescad_knob4 CoffeeScript gibt einem dabei die Möglichkeit mit z.B. Schleifen automatisiert Objekte zu erstellen oder neu zu Positionieren.

Man lese selbst:


# variablen
ausnehmungen= 12
durchmesser= 36
knobcolor= [0.5,0,0.1]
#
# wir bauen einmal den Basis-Knopf
knobBase= new Cylinder( { r1:durchmesser/2, r2:durchmesser/2-2, h:20, center:[0,0,10] } )
knobBase.color(knobcolor)
assembly.add(knobBase)
knobTop= new Cylinder( { r1:durchmesser/2-2, r2:durchmesser/4, h:3, center:[0,0,21.5] } )
knobTop.color(knobcolor)
knobBase.union(knobTop)
#
# wir generieren einen Cylinder den wir mehrfach ausschneiden
knobCut= new Cylinder( { r1:durchmesser*3.14/(ausnehmungen*3.5), r2:durchmesser*3.14/(ausnehmungen*2.3), h:15, center:[0,0,17] } )
knobCut.color(knobcolor)
knobCut.translate([durchmesser/2-1,0,0])
#
# wir schneiden aus
knobBase.subtract(knobCut)
knobBase.subtract(knobCut.rotate([0,0,360/ausnehmungen])) for test in [1..ausnehmungen]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.