mirror of https://github.com/vitalif/openscad
Clifford Wolf:
Added spring() to example20 Improved generated linear_extrude + twist 3d grid git-svn-id: http://svn.clifford.at/openscad/trunk@336 b57f626f-c46c-0410-a088-ec61d464b74cstl_dim
parent
e0ca60eef7
commit
5d39aa71dd
|
@ -144,26 +144,56 @@ static void add_slice(PolySet *ps, DxfData::Path *pt, double rot1, double rot2,
|
||||||
double kx2 = pt->points[k]->x * cos(rot2*M_PI/180) + pt->points[k]->y * sin(rot2*M_PI/180);
|
double kx2 = pt->points[k]->x * cos(rot2*M_PI/180) + pt->points[k]->y * sin(rot2*M_PI/180);
|
||||||
double ky2 = pt->points[k]->x * -sin(rot2*M_PI/180) + pt->points[k]->y * cos(rot2*M_PI/180);
|
double ky2 = pt->points[k]->x * -sin(rot2*M_PI/180) + pt->points[k]->y * cos(rot2*M_PI/180);
|
||||||
|
|
||||||
ps->append_poly();
|
double dia1_len_sq = (jy1-ky2)*(jy1-ky2) + (jx1-kx2)*(jx1-kx2);
|
||||||
if (pt->is_inner) {
|
double dia2_len_sq = (jy2-ky1)*(jy2-ky1) + (jx2-kx1)*(jx2-kx1);
|
||||||
ps->append_vertex(kx1, ky1, h1);
|
|
||||||
ps->append_vertex(jx1, jy1, h1);
|
|
||||||
ps->append_vertex(jx2, jy2, h2);
|
|
||||||
} else {
|
|
||||||
ps->insert_vertex(kx1, ky1, h1);
|
|
||||||
ps->insert_vertex(jx1, jy1, h1);
|
|
||||||
ps->insert_vertex(jx2, jy2, h2);
|
|
||||||
}
|
|
||||||
|
|
||||||
ps->append_poly();
|
if (dia1_len_sq > dia2_len_sq)
|
||||||
if (pt->is_inner) {
|
{
|
||||||
ps->append_vertex(kx2, ky2, h2);
|
ps->append_poly();
|
||||||
ps->append_vertex(kx1, ky1, h1);
|
if (pt->is_inner) {
|
||||||
ps->append_vertex(jx2, jy2, h2);
|
ps->append_vertex(kx1, ky1, h1);
|
||||||
} else {
|
ps->append_vertex(jx1, jy1, h1);
|
||||||
ps->insert_vertex(kx2, ky2, h2);
|
ps->append_vertex(jx2, jy2, h2);
|
||||||
ps->insert_vertex(kx1, ky1, h1);
|
} else {
|
||||||
ps->insert_vertex(jx2, jy2, h2);
|
ps->insert_vertex(kx1, ky1, h1);
|
||||||
|
ps->insert_vertex(jx1, jy1, h1);
|
||||||
|
ps->insert_vertex(jx2, jy2, h2);
|
||||||
|
}
|
||||||
|
|
||||||
|
ps->append_poly();
|
||||||
|
if (pt->is_inner) {
|
||||||
|
ps->append_vertex(kx2, ky2, h2);
|
||||||
|
ps->append_vertex(kx1, ky1, h1);
|
||||||
|
ps->append_vertex(jx2, jy2, h2);
|
||||||
|
} else {
|
||||||
|
ps->insert_vertex(kx2, ky2, h2);
|
||||||
|
ps->insert_vertex(kx1, ky1, h1);
|
||||||
|
ps->insert_vertex(jx2, jy2, h2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ps->append_poly();
|
||||||
|
if (pt->is_inner) {
|
||||||
|
ps->append_vertex(kx1, ky1, h1);
|
||||||
|
ps->append_vertex(jx1, jy1, h1);
|
||||||
|
ps->append_vertex(kx2, ky2, h2);
|
||||||
|
} else {
|
||||||
|
ps->insert_vertex(kx1, ky1, h1);
|
||||||
|
ps->insert_vertex(jx1, jy1, h1);
|
||||||
|
ps->insert_vertex(kx2, ky2, h2);
|
||||||
|
}
|
||||||
|
|
||||||
|
ps->append_poly();
|
||||||
|
if (pt->is_inner) {
|
||||||
|
ps->append_vertex(jx2, jy2, h2);
|
||||||
|
ps->append_vertex(kx2, ky2, h2);
|
||||||
|
ps->append_vertex(jx1, jy1, h1);
|
||||||
|
} else {
|
||||||
|
ps->insert_vertex(jx2, jy2, h2);
|
||||||
|
ps->insert_vertex(kx2, ky2, h2);
|
||||||
|
ps->insert_vertex(jx1, jy1, h1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,6 +95,7 @@ static void STDCALL tess_end(void)
|
||||||
|
|
||||||
static void STDCALL tess_error(GLenum errno)
|
static void STDCALL tess_error(GLenum errno)
|
||||||
{
|
{
|
||||||
|
fprintf(stderr, "GLU tesselation error %s", gluErrorString(errno));
|
||||||
PRINTF("GLU tesselation error %s", gluErrorString(errno));
|
PRINTF("GLU tesselation error %s", gluErrorString(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,8 +32,45 @@ module nut(type = 2, r1 = 16, r2 = 21, r3 = 30, s = 6, n = 7, h = 100/5, t = 8/5
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module spring(r1 = 100, r2 = 10, h = 100, hr = 12)
|
||||||
|
{
|
||||||
|
stepsize = 1/16;
|
||||||
|
module segment(i1, i2) {
|
||||||
|
alpha1 = i1 * 360*r2/hr;
|
||||||
|
alpha2 = i2 * 360*r2/hr;
|
||||||
|
len1 = sin(acos(i1*2-1))*r2;
|
||||||
|
len2 = sin(acos(i2*2-1))*r2;
|
||||||
|
if (len1 < 0.01)
|
||||||
|
polygon([
|
||||||
|
[ cos(alpha1)*r1, sin(alpha1)*r1 ],
|
||||||
|
[ cos(alpha2)*(r1-len2), sin(alpha2)*(r1-len2) ],
|
||||||
|
[ cos(alpha2)*(r1+len2), sin(alpha2)*(r1+len2) ]
|
||||||
|
]);
|
||||||
|
if (len2 < 0.01)
|
||||||
|
polygon([
|
||||||
|
[ cos(alpha1)*(r1+len1), sin(alpha1)*(r1+len1) ],
|
||||||
|
[ cos(alpha1)*(r1-len1), sin(alpha1)*(r1-len1) ],
|
||||||
|
[ cos(alpha2)*r1, sin(alpha2)*r1 ],
|
||||||
|
]);
|
||||||
|
if (len1 >= 0.01 && len2 >= 0.01)
|
||||||
|
polygon([
|
||||||
|
[ cos(alpha1)*(r1+len1), sin(alpha1)*(r1+len1) ],
|
||||||
|
[ cos(alpha1)*(r1-len1), sin(alpha1)*(r1-len1) ],
|
||||||
|
[ cos(alpha2)*(r1-len2), sin(alpha2)*(r1-len2) ],
|
||||||
|
[ cos(alpha2)*(r1+len2), sin(alpha2)*(r1+len2) ]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
linear_extrude(height = 100, twist = 180*h/hr,
|
||||||
|
$fn = (hr/r2)/stepsize, convexity = 5) {
|
||||||
|
for (i = [ stepsize : stepsize : 1+stepsize/2 ])
|
||||||
|
segment(i-stepsize, min(i, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
translate([ -30, 0, 0 ])
|
translate([ -30, 0, 0 ])
|
||||||
screw();
|
screw();
|
||||||
|
|
||||||
translate([ 30, 0, 0 ])
|
translate([ 30, 0, 0 ])
|
||||||
nut();
|
nut();
|
||||||
|
|
||||||
|
spring();
|
||||||
|
|
Loading…
Reference in New Issue