mirror of https://github.com/vitalif/openscad
add test sample for issue #267
parent
757820fe1c
commit
96903036fd
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* Reported by Justin Charette
|
||||
* Causes a crash in CSGTermNormalizer::normalize() when CSG element count
|
||||
* exceeds limit setting in preferences (verified with default value of 2000).
|
||||
*/
|
||||
|
||||
|
||||
$fn=20;
|
||||
|
||||
/* donut (r1, r2, t) {{{
|
||||
r1 = radius of torus
|
||||
r2 = radius of torus cross section (circle)
|
||||
t = thickness of shell (t == 0 is
|
||||
*/
|
||||
module donut (r1, r2, t=0) {
|
||||
difference() {
|
||||
rotate_extrude( convexity=6 ) {
|
||||
translate([r1, 0, 0]) {
|
||||
circle( r = r2 );
|
||||
}
|
||||
}
|
||||
// (t == 0 ? solid : hollow )
|
||||
if (t > 0) {
|
||||
rotate_extrude( convexity=6 ) {
|
||||
translate([r1, 0, 0]) {
|
||||
circle( r = r2-t );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} //}}}
|
||||
|
||||
/* half donut (r1, r2, t, round) {{{
|
||||
r1 = radius of torus
|
||||
r2 = radius of torus cross section (circle)
|
||||
t = thickness of shell
|
||||
round = trim ends of semi-torus so they are round
|
||||
*/
|
||||
module half_donut (r1, r2, t=1, round=false) {
|
||||
difference() {
|
||||
donut( r1, r2, t );
|
||||
difference() {
|
||||
translate( [0, -((r1+r2)/2+0.5), 0] )
|
||||
scale( [2*(r1+r2)+1, r1+r2+1, 2*r2+1] )
|
||||
square( 1, center=true );
|
||||
if (round) {
|
||||
rotate( 90, [0, 1, 0] )
|
||||
cylinder( 2*(r1+r2)+2, r2, r2, center=true );
|
||||
}
|
||||
}
|
||||
}
|
||||
} //}}}
|
||||
|
||||
/* donut flange (r1, r2, a1, a2, a_step, t, round) {{{
|
||||
r1 = radius of torus
|
||||
r2 = radius of torus cross section (circle)
|
||||
a1 = starting angle of flange rotation
|
||||
a2 = stopping angle of flange rotation
|
||||
a_step = increment size of flange rotation
|
||||
t = thickness of shell (t == 0 is solid, t in (0, r2) is hollow)
|
||||
round = (true/false) to trim ends of semi-torus so they are round
|
||||
*/
|
||||
module donut_flange (r1, r2, a1, a2, a_step=1, t=0, round=false) {
|
||||
difference() {
|
||||
union() {
|
||||
for (a = [a1:a_step:a2]) {
|
||||
rotate( a, [1, 0, 0] )
|
||||
half_donut( r1, r2, round );
|
||||
}
|
||||
}
|
||||
// (t == 0 ? solid : hollow )
|
||||
if (t > 0) {
|
||||
union() {
|
||||
for (a = [a1:a_step:a2]) {
|
||||
rotate( a, [1, 0, 0] )
|
||||
half_donut( r1, r2-t, round );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} //}}}
|
||||
|
||||
donut( 20, 5 );
|
||||
donut_flange( 20, 5, 0, 50, 10, t=1, round=false );
|
||||
|
||||
// vim: set et sw=2 ts=2 sts=2 ai sta sr fdm=marker:
|
Loading…
Reference in New Issue