First try
This commit is contained in:
parent
75036012bc
commit
46950e5359
3 changed files with 192615 additions and 0 deletions
192517
CE3S1P_Knauf.gcode
Normal file
192517
CE3S1P_Knauf.gcode
Normal file
File diff suppressed because it is too large
Load diff
98
Knauf.scad
Normal file
98
Knauf.scad
Normal file
|
@ -0,0 +1,98 @@
|
|||
// Parameter
|
||||
res=200; // Auflösung
|
||||
du=50; // Durchmesser Kugel
|
||||
a=32; // Rohrdurchmesser innen
|
||||
b=38; // Rohrdurchmesser außen
|
||||
|
||||
//-------------------
|
||||
|
||||
$fn=res;
|
||||
|
||||
difference() {
|
||||
// sphere(d=du);
|
||||
ssphere(r=du/2, n=3);
|
||||
difference() {
|
||||
translate([0,0,-10 ])cylinder(h=50,d=b);
|
||||
translate([0,0,-10.05])cylinder(h=50.05,d=a);
|
||||
}
|
||||
translate([-20,-20,16])cube([40,40,40]);
|
||||
for(i= [0:36:259]) {
|
||||
x = du * sin(i);
|
||||
y = du * cos(i);
|
||||
z = 0;
|
||||
translate([x,y,z]) sphere (2);
|
||||
}
|
||||
}
|
||||
|
||||
function norm(v) = sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
|
||||
function normalize(v) = [v[0]/norm(v), v[1]/norm(v), v[2]/norm(v)];
|
||||
function flatten(vec) = [for (v=vec) for(e=v) e];
|
||||
|
||||
module ssphere(r=1, n=0) {
|
||||
C0 = (1+sqrt(5))/4;
|
||||
pts = [[0.5, 0, C0], [0.5, 0, -C0], [-0.5, 0, C0], [-0.5, 0, -C0], [C0,
|
||||
0.5, 0], [C0, -0.5, 0], [-C0, 0.5, 0], [-C0, -0.5, 0], [0, C0, 0.5], [0, C0,
|
||||
-0.5], [0, -C0, 0.5], [0, -C0, -0.5]];
|
||||
fcs = [[10, 2, 0], [5, 10, 0], [4, 5, 0], [8, 4, 0], [2, 8, 0], [11, 1, 3],
|
||||
[7, 11, 3], [6, 7, 3], [9, 6, 3], [1, 9, 3], [7, 6, 2], [10, 7, 2], [11, 7,
|
||||
10], [5, 11, 10], [1, 11, 5], [4, 1, 5], [9, 1, 4], [8, 9, 4], [6, 9, 8],
|
||||
[2, 6, 8]];
|
||||
npts = [for (v=pts) normalize(v)];
|
||||
subdiv_sphere(npts, fcs, r, n);
|
||||
}
|
||||
|
||||
module subdiv_sphere(pts, fcs, r, n) {
|
||||
if (n>0) {
|
||||
spts = concat(pts, flatten([for (f=fcs) [(pts[f[0]]+pts[f[1]]),
|
||||
(pts[f[1]]+pts[f[2]]), (pts[f[2]]+pts[f[0]])]]));
|
||||
nsfcs = flatten([for (i=[0:len(fcs)-1]) [[fcs[i][0], len(pts)+3*i+0,
|
||||
len(pts)+3*i+2], [len(pts)+3*i+0, len(pts)+3*i+1, len(pts)+3*i+2],
|
||||
[len(pts)+3*i+0, fcs[i][1], len(pts)+3*i+1], [len(pts)+3*i+2,
|
||||
len(pts)+3*i+1, fcs[i][2]]]]);
|
||||
nspts = [for (v=spts) r*normalize(v)];
|
||||
subdiv_sphere(nspts, nsfcs, r, n-1);
|
||||
}
|
||||
else polyhedron(points=pts, faces=fcs);
|
||||
}
|
||||
|
||||
|
||||
// other
|
||||
function spherePF(r=1,n=1,_pts=[],_fcs=[])=
|
||||
(
|
||||
// return [pt, faces]
|
||||
_pts==[]?
|
||||
let(
|
||||
C0 = (1+sqrt(5))/4
|
||||
, pts = [ [0.5,0,C0],[0.5,0,-C0],[-0.5,0,C0],[-0.5,0,-C0]
|
||||
, [C0,0.5,0],[C0,-0.5,0],[-C0,0.5,0],[-C0,-0.5,0]
|
||||
, [0,C0,0.5],[0,C0,-0.5],[0,-C0,0.5],[0,-C0,-0.5]]
|
||||
, fcs = [ [10,2,0],[5,10,0],[4,5,0],[8,4,0],[2,8,0]
|
||||
, [11,1,3],[7,11,3],[6,7,3],[9,6,3],[1,9,3]
|
||||
, [7,6,2],[10,7,2],[11,7,10],[5,11,10],[1,11,5]
|
||||
, [4,1,5],[9,1,4],[8,9,4],[6,9,8],[2,6,8]]
|
||||
, npts = [for (v=pts) v/norm(v) ]
|
||||
)
|
||||
( n==0?[npts, fcs]
|
||||
: spherePF(r=r,n=n-1,_pts=npts,_fcs=fcs)
|
||||
)
|
||||
: let(
|
||||
spts = concat(_pts
|
||||
, [ each for (f=_fcs)
|
||||
[(_pts[f[0]]+_pts[f[1]])
|
||||
,(_pts[f[1]]+_pts[f[2]])
|
||||
,(_pts[f[2]]+_pts[f[0]])
|
||||
]
|
||||
]
|
||||
)
|
||||
, nsfcs = [each for (i=[0:len(_fcs)-1])
|
||||
[ [_fcs[i][0], len(_pts)+3*i+0, len(_pts)+3*i+2]
|
||||
, [len(_pts)+3*i+0, len(_pts)+3*i+1, len(_pts)+3*i+2]
|
||||
, [len(_pts)+3*i+0, _fcs[i][1], len(_pts)+3*i+1]
|
||||
, [len(_pts)+3*i+2, len(_pts)+3*i+1, _fcs[i][2]]
|
||||
]
|
||||
]
|
||||
, nspts = [for (v=spts) r*v/norm(v)]
|
||||
)
|
||||
n==0? [nspts, nsfcs]
|
||||
: spherePF(r=r,n=n-1,_pts=nspts,_fcs=nsfcs)
|
||||
);
|
BIN
Knauf.stl
Normal file
BIN
Knauf.stl
Normal file
Binary file not shown.
Loading…
Reference in a new issue