Added multiply.scad
This commit is contained in:
parent
3faafdd93e
commit
8113cfface
29
multiply.scad
Normal file
29
multiply.scad
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
* Multiplication along certain curves
|
||||||
|
*
|
||||||
|
* Copyright by Elmo Mäntynen, 2012.
|
||||||
|
* Licenced under LGPL2 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
include <units.scad>
|
||||||
|
|
||||||
|
use <utilities.scad>
|
||||||
|
|
||||||
|
// TODO check that the axis parameter works as intended
|
||||||
|
// Duplicate everything $no of times around an $axis, for $angle/360 rounds
|
||||||
|
module spin(no, angle=360, axis=Z){
|
||||||
|
for (i = [1:no]){
|
||||||
|
rotate(normalized_axis(axis)*angle*no/i) union(){
|
||||||
|
for (i = [0 : $children-1]) child(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Doesn't work currently
|
||||||
|
module duplicate(axis=Z) spin(no=2, axis=axis) child(0);
|
||||||
|
|
||||||
|
module linear_multiply(no, separation, axis=Z){
|
||||||
|
for (i = [0:no-1]){
|
||||||
|
translate(i*separation*axis) child(0);
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,8 +10,13 @@ mm = 1;
|
||||||
cm = 10 * mm;
|
cm = 10 * mm;
|
||||||
dm = 100 * mm;
|
dm = 100 * mm;
|
||||||
m = 1000 * mm;
|
m = 1000 * mm;
|
||||||
|
|
||||||
inch = 25.4 * mm;
|
inch = 25.4 * mm;
|
||||||
|
|
||||||
|
X = [1, 0, 0];
|
||||||
|
Y = [0, 1, 0];
|
||||||
|
Z = [0, 0, 1];
|
||||||
|
|
||||||
M3 = 3*mm;
|
M3 = 3*mm;
|
||||||
M4 = 4*mm;
|
M4 = 4*mm;
|
||||||
M5 = 5*mm;
|
M5 = 5*mm;
|
||||||
|
|
|
@ -15,7 +15,9 @@ 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 normalized(a) = a / (max(distance([0,0,0], a), 0.00001));
|
||||||
|
|
||||||
|
function normalized_axis(a) = a == "x" ? [1, 0, 0]:
|
||||||
|
a == "y" ? [0, 1, 0]:
|
||||||
|
a == "z" ? [0, 0, 1]: normalized(a);
|
||||||
|
|
||||||
function angleOfNormalizedVector(n) = [0, -atan2(n[2], length2([n[0], n[1]])), atan2(n[1], n[0]) ];
|
function angleOfNormalizedVector(n) = [0, -atan2(n[2], length2([n[0], n[1]])), atan2(n[1], n[0]) ];
|
||||||
|
|
||||||
|
@ -23,16 +25,6 @@ function angle(v) = angleOfNormalizedVector(normalized(v));
|
||||||
|
|
||||||
function angleBetweenTwoPoints(a, b) = angle(normalized(b-a));
|
function angleBetweenTwoPoints(a, b) = angle(normalized(b-a));
|
||||||
|
|
||||||
// TODO check that the axis parameter works as intended
|
|
||||||
// Duplicate everything $no of times around an $axis, for $angle/360 rounds
|
|
||||||
module spin(no, angle=360, axis=[0, 0, 1]){
|
|
||||||
for (i = [1:no]){
|
|
||||||
rotate(normalized(axis)*angle*no/i) union(){
|
|
||||||
for (i = [0 : $children-1]) child(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CENTER = 0;
|
CENTER = 0;
|
||||||
LEFT = -0.5;
|
LEFT = -0.5;
|
||||||
|
|
Loading…
Reference in a new issue