From 57ed5a8901de27c4a5bd2ab20408253d2a7b7343 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Fri, 3 May 2019 09:18:03 +0800 Subject: [PATCH] add doc --- docs/images/lib-m_cumulate-1.JPG | Bin 0 -> 34458 bytes docs/lib-m_cumulate.md | 30 ++++++++++++++++++++++++++++++ src/m_cumulate.scad | 10 ++++++++++ 3 files changed, 40 insertions(+) create mode 100644 docs/images/lib-m_cumulate-1.JPG create mode 100644 docs/lib-m_cumulate.md diff --git a/docs/images/lib-m_cumulate-1.JPG b/docs/images/lib-m_cumulate-1.JPG new file mode 100644 index 0000000000000000000000000000000000000000..d194c206cdeab73e8dfffe98eb5c2b94a4540725 GIT binary patch literal 34458 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 I; + include ; + include ; + include + + m = m_cumulate([ + m_translation([10, 20, 10]), m_scaling(2), m_rotation(60)] + ); + + multmatrix(m) + cube(1); + + multmatrix(m) + sphere(1); + + +![m_cumulate](images/lib-m_cumulate-1.JPG) + diff --git a/src/m_cumulate.scad b/src/m_cumulate.scad index 7f20767c..e9893b33 100644 --- a/src/m_cumulate.scad +++ b/src/m_cumulate.scad @@ -1,3 +1,13 @@ +/** +* m_cumulate.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_cumulate.html +* +**/ + include <__private__/__m_multiply.scad>; function _m_cumulate(matrice, i) =