From 486890c7509e3c033355764a5680bf0e875ee988 Mon Sep 17 00:00:00 2001 From: Elmom Date: Mon, 26 Jul 2010 13:13:31 +0300 Subject: [PATCH] Added utilities.scad from http://github.com/zzorn/FunRap --- README | 1 + utilities.scad | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 utilities.scad diff --git a/README b/README index c9aafec..396b898 100644 --- a/README +++ b/README @@ -29,5 +29,6 @@ Utils: * constants.scad: mathematical constants * curves.scad: mathematical functions defining curves * units.scad: easy metric units +* utilities: geometric funtions and misc. useful stuff You are welcome to fork this project in github and request pulls. I will try to accomodate the community as much as possible in this. diff --git a/utilities.scad b/utilities.scad new file mode 100644 index 0000000..fe85c31 --- /dev/null +++ b/utilities.scad @@ -0,0 +1,58 @@ +/* + * Utility functions. + * + * Originally by Hans Häggström, 2010. + * Dual licenced under Creative Commons Attribution-Share Alike 3.0 and LGPL2 or later + */ + + + +function distance(a, b) = sqrt( (a[0] - b[0])*(a[0] - b[0]) + + (a[1] - b[1])*(a[1] - b[1]) + + (a[2] - b[2])*(a[2] - b[2]) ); + +function length2(a) = sqrt( a[0]*a[0] + a[1]*a[1] ); + +function normalized(a) = a / (max(distance([0,0,0], a), 0.00001)); + + + +function angleOfNormalizedVector(n) = [0, -atan2(n[2], length2([n[0], n[1]])), atan2(n[1], n[0]) ]; + +function angle(v) = angleOfNormalizedVector(normalized(v)); + +function angleBetweenTwoPoints(a, b) = angle(normalized(b-a)); + + +CENTER = 0; +LEFT = -0.5; +RIGHT = 0.5; +TOP = 0.5; +BOTTOM = -0.5; + +FlatCap =0; +ExtendedCap =0.5; +CutCap =-0.5; + + +module fromTo(from=[0,0,0], to=[1*m,0,0], size=[1*cm, 1*cm], align=[CENTER, CENTER], material=[0.5, 0.5, 0.5], name="", endExtras=[0,0], endCaps=[FlatCap, FlatCap], rotation=[0,0,0], printString=true) { + + angle = angleBetweenTwoPoints(from, to); + length = distance(from, to) + endCaps[0]*size[0] + endCaps[1]*size[0] + endExtras[0] + endExtras[1]; + + if (length > 0) { + if (printString) echo(str(" " ,name, " ", size[0], "mm x ", size[1], "mm, length ",length,"mm")); + + color(material) + translate(from) + rotate(angle) + translate( [ -endCaps[0]*size[0] - endExtras[0], size[0]*(-0.5-align[0]), size[1]*(-0.5+align[1]) ] ) + rotate(rotation) + scale([length, size[0], size[1]]) child(); + } +} + +module part(name) { + echo(""); + echo(str(name, ":")); +}