LuaCAD is een tool voor parametrisch ontwerpen die Lua 5.4 integreert in een Rust-engine. Het maakt gebruik van Constructive Solid Geometry (CSG) via Manifold of OpenSCAD om 2D- en 3D-modellen te genereren.
Belangrijkste kenmerken:
- Lua-voordelen: Biedt een krachtigere, snellere en consistentere syntaxis dan OpenSCAD, inclusief operator-overloading voor natuurlijke CSG-operaties (zoals
a + b).
- Tools: Beschikbaar als een CLI-tool (
luacad) voor conversies en rendering, en als een GUI-applicatie (luacad-studio) voor live 3D-previews.
- Functionaliteit: Ondersteunt de import van mesh-formaten, SVG en DXF, en biedt geavanceerde functies voor het creëren van 3D-tekst.
- BOSL2: Bevat een herimplementatie van de Belfry OpenSCAD Library v2, waardoor complexe vormen kunnen worden gemaakt zonder externe software.
- Exportmogelijkheden: Modellen kunnen worden geëxporteerd naar diverse formaten, waaronder STL, 3MF, OBJ, PLY, OFF, AMF en SCAD.
LuaCAD
LuaCAD integreert Lua 5.4 in een Rust-engine die CSG-operaties (Constructive Solid Geometry) direct evalueert via Manifold, of OpenSCAD-code genereert voor externe rendering.
Waarom Lua?
Lua heeft een vergelijkbare syntaxis als de OpenSCAD-taal, maar biedt diverse voordelen:
- Krachtiger
- Consistenter
- Sneller
- Gemakkelijker in te bedden
- Operator-overloading voor een natuurlijke CSG-syntaxis (bijvoorbeeld:
a + b, a - b, a * b)
Lua wordt reeds gebruikt in andere CAD-software, zoals LibreCAD en Autodesk Netfabb.
Voorbeeld
LuaCAD:
my_cube = cube { size = { 1, 2, 3 } }
function my_sphere(radius)
return sphere({ r = radius }):translate(5, 0, 0)
end
model = my_cube + my_sphere(2)
render(model)
Equivalent in OpenSCAD:
module my_cube() {
cube(size=[1,2,3]);
}
module my_sphere(radius) {
translate([5,0,0]) sphere(r = radius);
}
union() {
my_cube();
my_sphere(2);
}
Aan de slag
Je kunt LuaCAD installeren via de volgende commando's:
- CLI voor het uitvoeren en converteren van LuaCAD-scripts:
cargo install luacad
- GUI desktop-app met live 3D-preview:
cargo install luacad-studio
Installatie vanuit broncode
Dit vereist Rust:
git clone https://github.com/ad-si/LuaCAD.git
cd LuaCAD
make install
Beide crates bevatten hun C/C++ afhankelijkheden, waardoor er geen systeembibliotheken geïnstalleerd hoeven te worden. Er moet echter wel een C++ compiler en CMake beschikbaar zijn om ze te kunnen bouwen.
luacad bouwt Manifold en Clipper2; luacad-studio bouwt daarnaast OpenCSG, waarvoor OpenGL development headers nodig zijn (op Debian/Ubuntu: libgl1-mesa-dev, libx11-dev, libxcb1-dev, libxkbcommon-dev, libxrandr-dev, libwayland-dev).
Gebruik van de CLI
De volgende commando's zijn beschikbaar:
luacad convert model.lua output.3mf — Converteer naar 3MF
luacad convert model.lua output.stl — Converteer naar STL
luacad convert model.lua output.scad — Exporteer als OpenSCAD
luacad watch model.lua output.3mf — Automatisch opnieuw bouwen bij wijzigingen in het bestand
luacad render model.lua preview.png — Render naar een PNG-afbeelding
luacad info model.lua — Print het aantal driehoeken en de bounding box
luacad lint model.lua — Linting met selene (ondersteunt ook directorien)
luacad run model.lua — Uitvoeren (alleen zij-effecten)
De functies convert en watch leiden het formaat af uit de extensie van het uitvoerbestand. Dit kan worden overschreven met --format <fmt>. Met --via-openscad wordt de export overgedragen aan een geïnstalleerd OpenSCAD-binary in plaats van het mesh te bouwen met Manifold.
BOSL2
LuaCAD biedt volledige ondersteuning voor de Belfry OpenSCAD Library v2, die is geherimplementeerd in LuaCAD zelf. Hierdoor kan het renderen, previewen en exporteren naar een mesh gebeuren zonder dat OpenSCAD of BOSL2 geïnstalleerd hoeft te zijn:
bosl.cuboid { {40, 40, 40}, rounding = 2 }
bosl.regular_prism { 5, r = 10, h = 25 }
bosl.spur_gear { circ_pitch = 5, teeth = 20, thickness = 5 }
Bij export naar .scad wordt de BOSL2-aanroep zelf geschreven, waardoor het geëxporteerde bestand net zo kort blijft als het script dat het produceerde.
Tekst en Imports
De functie text() zet een systeemlettertype om in een schets en text3d() extrudeert dit in één stap. Hierdoor wordt tekst echte geometrie in plaats van enkel SCAD-output:
render(text("LuaCAD", { size = 12, halign = "center" }):linear_extrude(2))
De functie import() leest elk mesh-formaat dat LuaCAD kan schrijven en retourneert een "solid" die getransformeerd en gecombineerd kan worden zoals elk ander primitief. SVG- en DXF-bestanden retourneren in plaats daarvan een 2D-schets die klaar is om geëxtrudeerd te worden.
Ondersteunde exportformaten
- SCAD - OpenSCAD-formaat
- 3MF - 3D Manufacturing Format
- STL - Standard Triangle Language voor 3D-printen
- OBJ - Wavefront 3D-objectformaat
- PLY - Polygon File Format
- OFF - Object File Format
- AMF - Additive Manufacturing File Format
Elke waarde die je script retourneert, wordt een eigen 3MF-object, zodat slicers deze kunnen laden als individueel verplaatsbare delen. Gebruik :name(…) om te bepalen hoe deze verschijnen in de objectlijst. De overige formaten kunnen geen aparte objecten representeren en voegen daarom alles samen tot één enkele mesh.
LuaCAD
LuaCAD integreert Lua 5.4 in een Rust-engine die CSG-operaties (Constructive Solid Geometry) direct evalueert via Manifold, of OpenSCAD-code genereert voor externe rendering.
Waarom Lua?
Lua heeft een vergelijkbare syntaxis als de OpenSCAD-taal, maar biedt diverse voordelen:
- Krachtiger
- Consistenter
- Sneller
- Gemakkelijker in te bedden
- Operator-overloading voor een natuurlijke CSG-syntaxis (bijvoorbeeld:
a + b, a - b, a * b)
Lua wordt reeds gebruikt in andere CAD-software, zoals LibreCAD en Autodesk Netfabb.
Voorbeeld
LuaCAD:
my_cube = cube { size = { 1, 2, 3 } }
function my_sphere(radius)
return sphere({ r = radius }):translate(5, 0, 0)
end
model = my_cube + my_sphere(2)
render(model)
Equivalent in OpenSCAD:
module my_cube() {
cube(size=[1,2,3]);
}
module my_sphere(radius) {
translate([5,0,0]) sphere(r = radius);
}
union() {
my_cube();
my_sphere(2);
}
Aan de slag
Je kunt LuaCAD installeren via de volgende commando's:
- CLI voor het uitvoeren en converteren van LuaCAD-scripts:
cargo install luacad
- GUI desktop-app met live 3D-preview:
cargo install luacad-studio
Installatie vanuit broncode
Dit vereist Rust:
git clone https://github.com/ad-si/LuaCAD.git
cd LuaCAD
make install
Beide crates bevatten hun C/C++ afhankelijkheden, waardoor er geen systeembibliotheken geïnstalleerd hoeven te worden. Er moet echter wel een C++ compiler en CMake beschikbaar zijn om ze te kunnen bouwen.
luacad bouwt Manifold en Clipper2; luacad-studio bouwt daarnaast OpenCSG, waarvoor OpenGL development headers nodig zijn (op Debian/Ubuntu: libgl1-mesa-dev, libx11-dev, libxcb1-dev, libxkbcommon-dev, libxrandr-dev, libwayland-dev).
Gebruik van de CLI
De volgende commando's zijn beschikbaar:
luacad convert model.lua output.3mf — Converteer naar 3MF
luacad convert model.lua output.stl — Converteer naar STL
luacad convert model.lua output.scad — Exporteer als OpenSCAD
luacad watch model.lua output.3mf — Automatisch opnieuw bouwen bij wijzigingen in het bestand
luacad render model.lua preview.png — Render naar een PNG-afbeelding
luacad info model.lua — Print het aantal driehoeken en de bounding box
luacad lint model.lua — Linting met selene (ondersteunt ook directorien)
luacad run model.lua — Uitvoeren (alleen zij-effecten)
De functies convert en watch leiden het formaat af uit de extensie van het uitvoerbestand. Dit kan worden overschreven met --format <fmt>. Met --via-openscad wordt de export overgedragen aan een geïnstalleerd OpenSCAD-binary in plaats van het mesh te bouwen met Manifold.
BOSL2
LuaCAD biedt volledige ondersteuning voor de Belfry OpenSCAD Library v2, die is geherimplementeerd in LuaCAD zelf. Hierdoor kan het renderen, previewen en exporteren naar een mesh gebeuren zonder dat OpenSCAD of BOSL2 geïnstalleerd hoeft te zijn:
bosl.cuboid { {40, 40, 40}, rounding = 2 }
bosl.regular_prism { 5, r = 10, h = 25 }
bosl.spur_gear { circ_pitch = 5, teeth = 20, thickness = 5 }
Bij export naar .scad wordt de BOSL2-aanroep zelf geschreven, waardoor het geëxporteerde bestand net zo kort blijft als het script dat het produceerde.
Tekst en Imports
De functie text() zet een systeemlettertype om in een schets en text3d() extrudeert dit in één stap. Hierdoor wordt tekst echte geometrie in plaats van enkel SCAD-output:
render(text("LuaCAD", { size = 12, halign = "center" }):linear_extrude(2))
De functie import() leest elk mesh-formaat dat LuaCAD kan schrijven en retourneert een "solid" die getransformeerd en gecombineerd kan worden zoals elk ander primitief. SVG- en DXF-bestanden retourneren in plaats daarvan een 2D-schets die klaar is om geëxtrudeerd te worden.
Ondersteunde exportformaten
- SCAD - OpenSCAD-formaat
- 3MF - 3D Manufacturing Format
- STL - Standard Triangle Language voor 3D-printen
- OBJ - Wavefront 3D-objectformaat
- PLY - Polygon File Format
- OFF - Object File Format
- AMF - Additive Manufacturing File Format
Elke waarde die je script retourneert, wordt een eigen 3MF-object, zodat slicers deze kunnen laden als individueel verplaatsbare delen. Gebruik :name(…) om te bepalen hoe deze verschijnen in de objectlijst. De overige formaten kunnen geen aparte objecten representeren en voegen daarom alles samen tot één enkele mesh.