diff --git a/README.md b/README.md index fb3171c..a753a22 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ In case you have use for those models thankfully to Github you can preview all m | Model | Source | Version | Title | | ----- | ------ | ------- | ----- | +| [`cable-holder.stl`](cable-holder.stl) | [`cable-holder.jscad`](cable-holder.jscad) | 0.1.0 | Cable holder for velcro tape | | [`change-holder.stl`](change-holder.stl) | [`change-holder.jscad`](change-holder.jscad) | 0.1.1 | Spare-Change holder | | [`eink_2-13_case.stl`](eink_2-13_case.stl) | [`eink_2-13_case.jscad`](eink_2-13_case.jscad) | 0.1.1 | Case for [2.13" Lilygo eink display](https://www.aliexpress.com/item/4000626947976.html) | | [`pir-holder.stl`](pir-holder.stl) | [`pir-holder.jscad`](pir-holder.jscad) | 0.1.1 | PIR holder | diff --git a/cable-holder.jscad b/cable-holder.jscad new file mode 100644 index 0000000..d211e67 --- /dev/null +++ b/cable-holder.jscad @@ -0,0 +1,20 @@ +/* + * title : Cable holder for velcro tape + * author : Knut Ahlers + * revision : 0.1.0 + */ + +/* exported main */ +function main () { + return difference( + union( + cube({ size: [55, 21, 2] }), + cube({ size: [2, 21, 3] }).translate([0, 0, 2]), + cube({ size: [2, 21, 3] }).translate([53, 0, 2]), + cube({ size: [2, 21, 3] }).translate([26.5, 0, 2]) + ), + cube({ size: [55, 17, 1.2] }).translate([0, 2, 1.8]) + ) +} + +// vim: set ft=javascript: diff --git a/cable-holder.stl b/cable-holder.stl new file mode 100644 index 0000000..05ae8ea --- /dev/null +++ b/cable-holder.stl @@ -0,0 +1,1066 @@ +solid csg.js +facet normal 0 -1 0 +outer loop +vertex 55 0 0 +vertex 55 0 1.7999999999999998 +vertex 55 0 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 0 0 +vertex 55 0 2 +vertex 53 0 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 0 0 +vertex 53 0 2 +vertex 28.5 0 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 0 0 +vertex 28.5 0 2 +vertex 26.5 0 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 0 0 +vertex 26.5 0 2 +vertex 2 0 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 0 0 +vertex 2 0 2 +vertex 0 0 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 0 0 +vertex 0 0 2 +vertex 0 0 1.7999999999999998 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 0 0 +vertex 0 0 1.7999999999999998 +vertex 0 0 0 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 2 0 2 +vertex 2 0 3 +vertex 2 0 5 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 2 0 2 +vertex 2 0 5 +vertex 0 0 5 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 2 0 2 +vertex 0 0 5 +vertex 0 0 3 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 2 0 2 +vertex 0 0 3 +vertex 0 0 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 28.5 0 2 +vertex 28.5 0 3 +vertex 28.5 0 5 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 28.5 0 2 +vertex 28.5 0 5 +vertex 26.5 0 5 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 28.5 0 2 +vertex 26.5 0 5 +vertex 26.5 0 3 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 28.5 0 2 +vertex 26.5 0 3 +vertex 26.5 0 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 0 2 +vertex 55 0 3 +vertex 55 0 5 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 0 2 +vertex 55 0 5 +vertex 53 0 5 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 0 2 +vertex 53 0 5 +vertex 53 0 3 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 0 2 +vertex 53 0 3 +vertex 53 0 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 5 +vertex 2 21 3 +vertex 2 21 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 5 +vertex 2 21 2 +vertex 0 21 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 5 +vertex 0 21 2 +vertex 0 21 3 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 5 +vertex 0 21 3 +vertex 0 21 5 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 28.5 21 5 +vertex 28.5 21 3 +vertex 28.5 21 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 28.5 21 5 +vertex 28.5 21 2 +vertex 26.5 21 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 28.5 21 5 +vertex 26.5 21 2 +vertex 26.5 21 3 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 28.5 21 5 +vertex 26.5 21 3 +vertex 26.5 21 5 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 55 21 5 +vertex 55 21 3 +vertex 55 21 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 55 21 5 +vertex 55 21 2 +vertex 53 21 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 55 21 5 +vertex 53 21 2 +vertex 53 21 3 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 55 21 5 +vertex 53 21 3 +vertex 53 21 5 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 2 +vertex 26.5 21 2 +vertex 28.5 21 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 2 +vertex 28.5 21 2 +vertex 53 21 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 2 +vertex 53 21 2 +vertex 55 21 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 2 +vertex 55 21 2 +vertex 55 21 1.7999999999999998 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 2 +vertex 55 21 1.7999999999999998 +vertex 55 21 0 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 2 +vertex 55 21 0 +vertex 0 21 0 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 2 +vertex 0 21 0 +vertex 0 21 1.7999999999999998 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 21 2 +vertex 0 21 1.7999999999999998 +vertex 0 21 2 +endloop +endfacet +facet normal 0 0 -1 +outer loop +vertex 0 0 0 +vertex 0 21 0 +vertex 55 21 0 +endloop +endfacet +facet normal 0 0 -1 +outer loop +vertex 0 0 0 +vertex 55 21 0 +vertex 55 0 0 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 2 0 5 +vertex 2 21 5 +vertex 0 21 5 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 2 0 5 +vertex 0 21 5 +vertex 0 0 5 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 28.5 0 5 +vertex 28.5 21 5 +vertex 26.5 21 5 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 28.5 0 5 +vertex 26.5 21 5 +vertex 26.5 0 5 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 55 0 5 +vertex 55 21 5 +vertex 53 21 5 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 55 0 5 +vertex 53 21 5 +vertex 53 0 5 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 55 2 1.8 +vertex 55 19 1.8 +vertex 0 19 1.8 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 55 2 1.8 +vertex 0 19 1.8 +vertex 0 2 1.8 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 2 3 +vertex 2 2 2 +vertex 0 2 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 2 3 +vertex 0 2 2 +vertex 0 2 3 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 28.5 2 3 +vertex 28.5 2 2 +vertex 26.5 2 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 28.5 2 3 +vertex 26.5 2 2 +vertex 26.499999999999996 2 3 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 55 2 3 +vertex 55 2 2 +vertex 53 2 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 55 2 3 +vertex 53 2 2 +vertex 53 2 3 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 2 2 +vertex 26.5 2 2 +vertex 28.5 2 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 2 2 +vertex 28.5 2 2 +vertex 53 2 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 2 2 +vertex 53 2 2 +vertex 55 2 2 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 2 2 +vertex 55 2 2 +vertex 55 2 1.8 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 2 2 +vertex 55 2 1.8 +vertex 0 2 1.8 +endloop +endfacet +facet normal 0 1 0 +outer loop +vertex 2 2 2 +vertex 0 2 1.8 +vertex 0 2 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 19 1.8 +vertex 55 19 2 +vertex 53 19 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 19 1.8 +vertex 53 19 2 +vertex 28.5 19 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 19 1.8 +vertex 28.5 19 2 +vertex 26.499999999999996 19 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 19 1.8 +vertex 26.499999999999996 19 2 +vertex 2 19 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 19 1.8 +vertex 2 19 2 +vertex 0 19 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 19 1.8 +vertex 0 19 2 +vertex 0 19 1.8 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 2 19 2 +vertex 2 19 3 +vertex 0 19 3 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 2 19 2 +vertex 0 19 3 +vertex 0 19 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 28.5 19 2 +vertex 28.5 19 3 +vertex 26.5 19 3 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 28.5 19 2 +vertex 26.5 19 3 +vertex 26.499999999999996 19 2 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 19 2 +vertex 55 19 3 +vertex 53 19 3 +endloop +endfacet +facet normal 0 -1 0 +outer loop +vertex 55 19 2 +vertex 53 19 3 +vertex 53 19 2 +endloop +endfacet +facet normal 0 0 -1 +outer loop +vertex 2 19 3 +vertex 2 2 3 +vertex 0 2 3 +endloop +endfacet +facet normal 0 0 -1 +outer loop +vertex 2 19 3 +vertex 0 2 3 +vertex 0 19 3 +endloop +endfacet +facet normal 0 0 -1 +outer loop +vertex 28.5 19 3 +vertex 28.5 2 3 +vertex 26.499999999999996 2 3 +endloop +endfacet +facet normal 0 0 -1 +outer loop +vertex 28.5 19 3 +vertex 26.499999999999996 2 3 +vertex 26.5 19 3 +endloop +endfacet +facet normal 0 0 -1 +outer loop +vertex 55 19 3 +vertex 55 2 3 +vertex 53 2 3 +endloop +endfacet +facet normal 0 0 -1 +outer loop +vertex 55 19 3 +vertex 53 2 3 +vertex 53 19 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 21 5 +vertex 0 21 3 +vertex 0 19 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 21 5 +vertex 0 19 3 +vertex 0 2 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 21 5 +vertex 0 2 3 +vertex 0 0 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 21 5 +vertex 0 0 3 +vertex 0 0 5 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 2 3 +vertex 0 2 2 +vertex 0 2 1.8 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 2 3 +vertex 0 2 1.8 +vertex 0 0 1.7999999999999998 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 2 3 +vertex 0 0 1.7999999999999998 +vertex 0 0 2 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 2 3 +vertex 0 0 2 +vertex 0 0 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 21 3 +vertex 0 21 2 +vertex 0 21 1.7999999999999998 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 21 3 +vertex 0 21 1.7999999999999998 +vertex 0 19 1.8 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 21 3 +vertex 0 19 1.8 +vertex 0 19 2 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 21 3 +vertex 0 19 2 +vertex 0 19 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 2 1.8 +vertex 0 19 1.8 +vertex 0 21 1.7999999999999998 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 2 1.8 +vertex 0 21 1.7999999999999998 +vertex 0 21 0 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 2 1.8 +vertex 0 21 0 +vertex 0 0 0 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 0 2 1.8 +vertex 0 0 0 +vertex 0 0 1.7999999999999998 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 21 0 +vertex 55 21 1.7999999999999998 +vertex 55 19 1.8 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 21 0 +vertex 55 19 1.8 +vertex 55 2 1.8 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 21 0 +vertex 55 2 1.8 +vertex 55 0 1.7999999999999998 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 21 0 +vertex 55 0 1.7999999999999998 +vertex 55 0 0 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 2 1.8 +vertex 55 2 2 +vertex 55 2 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 2 1.8 +vertex 55 2 3 +vertex 55 0 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 2 1.8 +vertex 55 0 3 +vertex 55 0 2 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 2 1.8 +vertex 55 0 2 +vertex 55 0 1.7999999999999998 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 21 1.7999999999999998 +vertex 55 21 2 +vertex 55 21 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 21 1.7999999999999998 +vertex 55 21 3 +vertex 55 19 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 21 1.7999999999999998 +vertex 55 19 3 +vertex 55 19 2 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 21 1.7999999999999998 +vertex 55 19 2 +vertex 55 19 1.8 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 2 3 +vertex 55 19 3 +vertex 55 21 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 2 3 +vertex 55 21 3 +vertex 55 21 5 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 2 3 +vertex 55 21 5 +vertex 55 0 5 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 55 2 3 +vertex 55 0 5 +vertex 55 0 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 2 2 2 +vertex 2 2 3 +vertex 2 0 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 2 2 2 +vertex 2 0 3 +vertex 2 0 2 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 2 21 2 +vertex 2 21 3 +vertex 2 19 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 2 21 2 +vertex 2 19 3 +vertex 2 19 2 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 2 2 3 +vertex 2 19 3 +vertex 2 21 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 2 2 3 +vertex 2 21 3 +vertex 2 21 5 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 2 2 3 +vertex 2 21 5 +vertex 2 0 5 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 2 2 3 +vertex 2 0 5 +vertex 2 0 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 53 21 5 +vertex 53 21 3 +vertex 53 19 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 53 21 5 +vertex 53 19 3 +vertex 53 2 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 53 21 5 +vertex 53 2 3 +vertex 53 0 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 53 21 5 +vertex 53 0 3 +vertex 53 0 5 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 53 2 3 +vertex 53 2 2 +vertex 53 0 2 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 53 2 3 +vertex 53 0 2 +vertex 53 0 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 53 21 3 +vertex 53 21 2 +vertex 53 19 2 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 53 21 3 +vertex 53 19 2 +vertex 53 19 3 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 26.5 0 2 +vertex 26.5 2 2 +vertex 2 2 2 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 26.5 0 2 +vertex 2 2 2 +vertex 2 0 2 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 53 0 2 +vertex 53 2 2 +vertex 28.5 2 2 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 53 0 2 +vertex 28.5 2 2 +vertex 28.5 0 2 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 26.499999999999996 19 2 +vertex 26.5 21 2 +vertex 2 21 2 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 26.499999999999996 19 2 +vertex 2 21 2 +vertex 2 19 2 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 53 19 2 +vertex 53 21 2 +vertex 28.5 21 2 +endloop +endfacet +facet normal 0 0 1 +outer loop +vertex 53 19 2 +vertex 28.5 21 2 +vertex 28.5 19 2 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 26.5 21 5 +vertex 26.5 21 3 +vertex 26.5 19 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 26.5 21 5 +vertex 26.5 19 3 +vertex 26.499999999999996 2 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 26.5 21 5 +vertex 26.499999999999996 2 3 +vertex 26.5 0 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 26.5 21 5 +vertex 26.5 0 3 +vertex 26.5 0 5 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 26.499999999999996 2 3 +vertex 26.5 2 2 +vertex 26.5 0 2 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 26.499999999999996 2 3 +vertex 26.5 0 2 +vertex 26.5 0 3 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 26.5 21 3 +vertex 26.5 21 2 +vertex 26.499999999999996 19 2 +endloop +endfacet +facet normal -1 0 0 +outer loop +vertex 26.5 21 3 +vertex 26.499999999999996 19 2 +vertex 26.5 19 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 28.5 2 2 +vertex 28.5 2 3 +vertex 28.5 0 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 28.5 2 2 +vertex 28.5 0 3 +vertex 28.5 0 2 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 28.5 21 2 +vertex 28.5 21 3 +vertex 28.5 19 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 28.5 21 2 +vertex 28.5 19 3 +vertex 28.5 19 2 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 28.5 2 3 +vertex 28.5 19 3 +vertex 28.5 21 3 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 28.5 2 3 +vertex 28.5 21 3 +vertex 28.5 21 5 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 28.5 2 3 +vertex 28.5 21 5 +vertex 28.5 0 5 +endloop +endfacet +facet normal 1 0 0 +outer loop +vertex 28.5 2 3 +vertex 28.5 0 5 +vertex 28.5 0 3 +endloop +endfacet +endsolid csg.js