* org-contrib/babel/languages/ob-doc-scad.org: New file. Add OpenSCAD
documentation for Org Babel.
* org-contrib/babel/languages/images/: Add example images for OpenSCAD
documentation.
---
.../babel/languages/images/basic-sphere.png | Bin 0 -> 19121 bytes
.../babel/languages/images/openscd-logo.png | Bin 0 -> 15268 bytes
.../babel/languages/images/parametric-box.png | Bin 0 -> 6744 bytes
.../languages/images/some-2d-primitives.png | Bin 0 -> 2893 bytes
org-contrib/babel/languages/index.org | 1 +
org-contrib/babel/languages/ob-doc-scad.org | 348 ++++++++++++++++++
6 files changed, 349 insertions(+)
create mode 100644 org-contrib/babel/languages/images/basic-sphere.png
create mode 100644 org-contrib/babel/languages/images/openscd-logo.png
create mode 100644 org-contrib/babel/languages/images/parametric-box.png
create mode 100644 org-contrib/babel/languages/images/some-2d-primitives.png
create mode 100644 org-contrib/babel/languages/ob-doc-scad.org
diff --git a/org-contrib/babel/languages/images/basic-sphere.png
b/org-contrib/babel/languages/images/basic-sphere.png
new file mode 100644
index
0000000000000000000000000000000000000000..747c23615897f9a09be1c78111e850919eab5ebe
GIT binary patch
literal 19121
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
A;Q#;t
literal 0
HcmV?d00001
diff --git a/org-contrib/babel/languages/images/openscd-logo.png
b/org-contrib/babel/languages/images/openscd-logo.png
new file mode 100644
index
0000000000000000000000000000000000000000..c4fc057daafc99eea182c9243942d775f77277f6
GIT binary patch
literal 15268
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
literal 0
HcmV?d00001
diff --git a/org-contrib/babel/languages/images/parametric-box.png
b/org-contrib/babel/languages/images/parametric-box.png
new file mode 100644
index
0000000000000000000000000000000000000000..28a6f1ddf686c8f9042babe21b78ae9b86028beb
GIT binary patch
literal 6744
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
literal 0
HcmV?d00001
diff --git a/org-contrib/babel/languages/images/some-2d-primitives.png
b/org-contrib/babel/languages/images/some-2d-primitives.png
new file mode 100644
index
0000000000000000000000000000000000000000..a3fccce8ab593a54546324b23a1e02d928d15888
GIT binary patch
literal 2893
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
ZNj)VBhxqRH0u6ycAOs_GTsf8)`7cUvQK$d_
literal 0
HcmV?d00001
diff --git a/org-contrib/babel/languages/index.org
b/org-contrib/babel/languages/index.org
index 5d0986fd..6580bfc3 100644
--- a/org-contrib/babel/languages/index.org
+++ b/org-contrib/babel/languages/index.org
@@ -205,6 +205,7 @@ language is identified by Babel.
|-----------+-------------+------------------|
| [[http://asymptote.sourceforge.net/][Asymptote]] | =asymptote= |
[[file:ob-doc-asymptote.org][ob-doc-asymptote]] |
| [[https://haxe.org/][Haxe]] | =haxe= |
[[file:ob-doc-haxe.org][ob-doc-haxe]] |
+| [[https://openscad.org/][OpenSCAD]] | =scad= |
[[file:ob-doc-scad.org][ob-doc-scad]] |
You can find very many Babel language support packages on MELPA with a
suitably configured =M-x list-packages=. In theory, it ought to be
diff --git a/org-contrib/babel/languages/ob-doc-scad.org
b/org-contrib/babel/languages/ob-doc-scad.org
new file mode 100644
index 00000000..d97a032d
--- /dev/null
+++ b/org-contrib/babel/languages/ob-doc-scad.org
@@ -0,0 +1,348 @@
+#+TITLE: OpenSCAD Code Blocks in Org-mode
+#+AUTHOR: François Polito
+#+EMAIL: francois AT polito DOT se
+#+OPTIONS: H:3 num:nil toc:2 \n:nil ::t |:t ^:{} -:t f:t *:t tex:t d:(HIDE)
tags:not-in-toc broken-links:nil
+#+STARTUP: align fold nodlcheck hidestars oddeven lognotestate hideblocks
+#+SEQ_TODO: TODO(t) INPROGRESS(i) WAITING(w@) | DONE(d) CANCELED(c@)
+#+TAGS: Write(w) Update(u) Fix(f) Check(c) noexport(n)
+#+LANGUAGE: en
+#+HTML_LINK_UP: index.html
+#+HTML_LINK_HOME: https://orgmode.org/worg/
+#+EXCLUDE_TAGS: noexport
+
+# This file is released by its authors and contributors under the GNU
+# Free Documentation license v1.3 or later, code examples are released
+# under the GNU General Public License v3 or later.
+
+* Template Checklist [12/12] :noexport:
+ - [X] Revise #+TITLE:
+ - [X] Indicate #+AUTHOR:
+ - [X] Add #+EMAIL:
+ - [X] Revise banner source block [3/3]
+ - [X] Add link to a useful language web site
+ - [X] Replace "Language" with language name
+ - [X] Find a suitable graphic and use it to link to the language web site
+ - [X] Write an [[Introduction]]
+ - [X] Describe [[Requirements and Setup][Requirements and Setup]]
+ - [X] Describe [[Org Mode Features for OpenSCAD Source Code Blocks][Babel
Features for OpenSCAD Code Blocks]]
+ - [X] Describe [[Header Arguments][Header Arguments]]
+ - [X] Describe support for [[Sessions]]
+ - [X] Describe [[Result Types][Result Types]]
+ - [X] Describe [[differences from other supported languages]]
+ - [X] Provide brief [[Examples of Use][Examples of Use]]
+
+* OpenSCAD logo
+
+[[https://openscad.org][file:./images/openscd-logo.png]]
+
+
+* Introduction
+
+OpenSCAD is a solid 3D CAD modeler that uses a scripting language to create 3D
models. Its programmatic nature makes it particularly well-suited for
integration with Org-mode through babel code blocks. This integration allows
you to:
+
+- Embed 3D model definitions directly within your Org documents
+- Generate and preview models without leaving your editing environment
+- Capture OpenSCAD console output for debugging and documentation
+- Create parameterized designs using Org-mode variables
+- Maintain complete design documentation alongside the CAD code
+- Export models in various formats (images or cad files) for visualization or
use in other applications.
+
+Unlike interactive CAD tools, OpenSCAD focuses on precision and parametric
design making it ideal for technical parts, mathematical models, and
3D-printable objects. When combined with Org-mode, it becomes a powerful tool
for creating reproducible, well-documented CAD workflows.
+
+* Requirements and Setup
+** OpenSCAD Installation
+
+First, install OpenSCAD on your system:
+
+- *Linux*: Available in most distribution repositories (e.g., =sudo apt
install openscad=)
+- *macOS*: Available via Homebrew (=brew install openscad=) or direct download
+- *Windows*: Download installer from
[[https://openscad.org/downloads.html][OpenSCAD downloads]]
+
+** Emacs Configuration
+
+Add OpenSCAD support to your babel languages:
+
+#+begin_src emacs-lisp :exports code
+ (org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((scad . t)))
+
+ ;; Optional: Set OpenSCAD executable path if not in system PATH
+ (setq org-babel-openscad-command "openscad")
+#+end_src
+
+* Org Mode Features for OpenSCAD Source Code Blocks
+** Header Arguments
+
+OpenSCAD babel supports several header arguments that map to OpenSCAD
command-line options and rendering parameters:
+
+*** Core Babel Headers
+
+- =:exports= - Control what gets exported (code, results, both, none)
+- =:file= - Export the model in any OpenSCAD supported format.
+- =:cmdline= - Additional command-line arguments for OpenSCAD
+- =:var= - Pass variables from other code blocks to parameterize designs
+
+*** OpenSCAD-Specific Rendering Headers
+
+- =:colorscheme= - Color scheme for rendering (e.g., =Cornfield=, =Sunset=,
=Metallic=, =Starnight=)
+- =:projection= - Projection type: =ortho= (orthographic) or =perspective=
+- =:camera= - Camera position and orientation as
=transx,transy,transz,rotx,roty,rotz,dist=
+- =:view= - View mode: =axes=, =scales=, =edges=, or =plain= (no overlays)
+- =:size= - Render size as =width,height= in pixels (e.g., =300,300=)
+- =:imgsize= - Alternative size parameter =width,height=
+
+** Sessions
+
+OpenSCAD does not support persistent sessions in the traditional babel sense,
as each code block execution starts a new OpenSCAD process. However, you can
use Org-mode variables to maintain parameter consistency across blocks.
+
+** Result Types
+*** Supported by Babel
+
+- *File generation* (stl, off, amf, 3mf, csg, dxf, svg, png, echo, ast, term,
nef3, nefdbg.) via =:file= header
+
+** Differences from Other Supported Languages
+*** Not Directly Supported
+
+- *Console output* (=echo()=, warnings, errors), use shell wrapper for console
capture (see [[Capturing OpenSCAD Console Output][console section]])
+
+* Examples of Use
+** Basic 3D Model Generation
+
+Create a simple cube and export it as a PNG image:
+
+#+begin_example org :exports code
+ #+NAME: basic-sphere
+ #+CAPTION: A simple sphere generated with OpenSCAD
+ #+HEADER: :file ./images/basic-sphere.png
+ #+HEADER: :colorscheme Cornfield
+ #+HEADER: :size 300,300
+ #+begin_src scad :exports results
+ diameter = 10;
+
+ color("Cornfield", 0.5) sphere(s=diameter, $fn=36);
+ #+end_src
+#+end_example
+
+#+RESULTS: basic-cube
+[[file:./images/basic-sphere.png]]
+
+** Primitive 2D shapes
+
+When working with 2D geometries in OpenSCAD, using orthographic projection
with a top-down camera view provides an accurate, undistorted representation of
dimensions. This is particularly important for 2D shapes where precise
measurements matter.
+
+#+begin_example org :exports code
+ #+NAME: square-circle
+ #+CAPTION: Some 2D primitives
+ #+HEADER: :file ./images/some-2d-primitives.png
+ #+HEADER: :colorscheme Cornfield
+ #+HEADER: :projection ortho
+ #+HEADER: :camera 0,0,0,0,0,0,0
+ #+HEADER: :size 300,300
+ #+begin_src scad :exports both
+ side=20; radius=10; offset=12.5;
+ module place_in_quadrant(quadrant) {
+ x = (quadrant==1 || quadrant==4 ? 1 : -1) * offset;
+ y = (quadrant==1 || quadrant==2 ? 1 : -1) * offset;
+ translate([x, y]) children(0);
+ }
+ place_in_quadrant(1) square(side, center=true);
+ place_in_quadrant(2) circle(radius, $fn=30);
+ place_in_quadrant(3) circle(radius, $fn=5);
+ place_in_quadrant(4) circle(radius, $fn=6);
+ #+end_src
+#+end_example
+
+#+RESULTS: square-circle
+[[file:./images/some-2d-primitives.png]]
+
+The =:camera= header supports two different camera modes in OpenSCAD, each
with its own parameter format:
+
+- Gimbal Camera uses the format:
=transx,transy,transz,rotx,roty,rotz,distance=, where:
+
+ - =transx,transy,transz= - Translation (movement) of the object in X, Y, Z
directions
+ - =rotx,roty,rotz= - Rotation around X, Y, Z axes in degrees
+ - =distance= - Distance between camera and object center
+
+- Vector Camera uses the format: =eyex,eyey,eyez,centerx,centery,centerz=,
where:
+
+ - =eyex,eyey,eyez= - Eye (camera) position coordinates
+ - =centerx,centery,centerz= - Center (target) position coordinates
+
+** Organizing Code with Noweb References
+
+Org-mode's noweb syntax allows you to break complex designs into reusable
components and share parameters across multiple code blocks.
+
+*** Define a Reusable Module
+
+Store the box geometry as a reusable module:
+
+#+begin_example org :exports code
+ #+NAME: box-module
+ #+begin_src scad :exports code :results none
+ module box(w, l, h, t) {
+ difference() {
+ cube([w, l, h], center=true);
+ translate([0, 0, t])
+ cube([w-2*t, l-2*t, h], center=true);
+ }
+ }
+ #+end_src
+#+end_example
+
+*** Define Shared Parameters
+
+Store design parameters in a separate block for easy modification:
+
+#+begin_example org :exports code
+ #+NAME: box-params
+ #+begin_src scad :exports code :results none
+ width = 30;
+ length = 20;
+ height = 10;
+ thickness = 2;
+ #+end_src
+#+end_example
+
+*** Combine Components with Noweb
+
+Use =<<block-name>>= syntax to include code from other blocks:
+
+#+begin_example org :exports code
+ #+NAME: parametric-box
+ #+CAPTION: Combining modules and parameters with noweb references
+ #+HEADER: :file ./images/parametric-box.png
+ #+HEADER: :colorscheme Cornfield
+ #+HEADER: :projection ortho
+ #+HEADER: :size 300,300
+ #+begin_src scad :exports both :noweb yes
+ <<box-module>>
+ <<box-params>>
+
+ // Build the box
+ box(width, length, height, thickness);
+ // These echos will NOT appear in results
+ echo("width, length, height, thickness: ", width, length, height,
thickness);
+ echo(version=version());
+ #+end_src
+#+end_example
+
+#+RESULTS: parametric-box
+[[file:./images/parametric-box.png]]
+
+The =echo()= statements are processed by OpenSCAD but not captured by
org-babel.
+
+* capturing OpenSCAD Console Output
+
+Unlike some babel languages, OpenSCAD does not directly support console output
capture through the =:results output= header argument. However, you can capture
OpenSCAD's console output (including =echo()= statements) by wrapping the
OpenSCAD execution in a shell code block.
+
+** Capturing All Console Output Types
+
+#+begin_example org exports code
+ #+NAME: parametric-box-full-output
+ #+CAPTION: Complete output including debug messages and render statistics
+ #+begin_src shell :results output :exports both :noweb yes :wrap results
+ output=$(openscad -o /dev/null --export-format asciistl - <<'EOF' 2>&1
+ <<parametric-box>>
+ EOF
+ )
+
+ echo "=== Debug Information ==="
+ echo "$output" | grep -i echo
+
+ echo
+ echo "=== Render Statistics ==="
+ echo "$output" | grep -v -i echo
+ #+end_src
+#+end_example
+
+#+begin_example org exports code
+ #+RESULTS: parametric-box-full-output
+ #+begin_results
+ === Debug Information ===
+ ECHO: "width, length, height, thickness: ", 30, 20, 10, 2
+ ECHO: version = [2021, 1, 0]
+
+ === Render Statistics ===
+ Geometries in cache: 3
+ Geometry cache size in bytes: 2184
+ CGAL Polyhedrons in cache: 1
+ CGAL cache size in bytes: 23888
+ Total rendering time: 0:00:00.018
+ Top level object is a 3D object:
+ Simple: yes
+ Vertices: 16
+ Halfedges: 48
+ Edges: 24
+ Halffacets: 22
+ Facets: 11
+ Volumes: 2
+ #+end_results
+#+end_example
+
+** Explanation
+
+- The shell code block uses =openscad -o /dev/null= to discard the =.stl=
output
+- =--export-format asciistl= ensures OpenSCAD processes the file
+- =2>&1= redirects both stdout and stderr to capture all output
+- =echo()= statements in OpenSCAD are captured as "ECHO:" lines
+- The exit code shows whether the OpenSCAD code compiled successfully
+
+* OpenSCAD Title Logo
+
+This example demonstrates how to generate an image using an OpenSCAD code
block and place the resulting image anywhere in your Org document using the
=#+RESULTS:= directive. In this case, the logo is generated and displayed at
the top of the page as the title logo.
+
+#+begin_example org :exports code
+ #+NAME: OpenSCAD logo
+ #+CAPTION: OpenSCAD logo
+ #+HEADER: :file ./images/openscd-logo.png
+ #+HEADER: :colorscheme Cornfield
+ #+HEADER: :projection ortho
+ #+HEADER: :camera 0,0,0,60,0,45,0
+ #+HEADER: :view none
+ #+HEADER: :size 300,300
+ #+begin_src scad :export results :result output
+ Logo();
+
+ module Logo(size=50, $fn=100) {
+ hole = size/2;
+ cylinderHeight = size * 1.25;
+
+ difference() {
+ sphere(d=size);
+ cylinder(d=hole, h=cylinderHeight, center=true);
+ #rotate([90, 0, 0]) cylinder(d=hole, h=cylinderHeight,
center=true);
+ rotate([0, 90, 0]) cylinder(d=hole, h=cylinderHeight, center=true);
+ }
+ }
+
+ echo(version=version());
+ #+end_src
+#+end_example
+
+#+begin_example org :exports code
+ #+RESULTS: OpenSCAD logo
+ [[file:./images/openscd-logo.png]]
+#+end_example
+
+See the [[OpenSCAD logo][OpenSCAD logo]] resulting from the above code block.
See the original
[[https://github.com/openscad/openscad/blob/master/examples/Basics/logo.scad][source
code]].
+
+* Troubleshooting
+** OpenSCAD Not Found
+
+If you encounter errors like =openscad: command not found=, ensure OpenSCAD is
installed and the path is set correctly in your [[Emacs configuration]] using
the =org-babel-openscad-command= variable.
+
+** Syntax Errors
+
+OpenSCAD is strict about syntax. Use the console output capture method to
debug errors (see [[Capturing OpenSCAD Console Output][console section]]).
+
+** Performance Issues
+
+Complex models may render slowly. Simplify designs, reduce =$fn= values, or
use smaller =:size= values (e.g., =:size 200,200=) for faster previews.
+
+* Additional Resources
+
+- [[https://orgmode.org/worg/org-contrib/babel/languages.html][Babel Languages
Documentation]]
+- [[https://openscad.org/documentation.html][OpenSCAD Official Documentation]]
+- [[https://openscad.org/cheatsheet/][OpenSCAD Cheat Sheet]]
+
--
2.52.0