generate first module
This commit is contained in:
parent
e21f07ce0a
commit
bb1b5b23bd
120
corners.c
120
corners.c
@ -13,9 +13,6 @@
|
|||||||
#include "v3.h"
|
#include "v3.h"
|
||||||
#include "stl_3d.h"
|
#include "stl_3d.h"
|
||||||
|
|
||||||
static int debug = 0;
|
|
||||||
static int draw_labels = 0;
|
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
@ -29,118 +26,43 @@ main(void)
|
|||||||
for(int i = 0 ; i < stl->num_vertex ; i++)
|
for(int i = 0 ; i < stl->num_vertex ; i++)
|
||||||
{
|
{
|
||||||
const stl_vertex_t * const v = &stl->vertex[i];
|
const stl_vertex_t * const v = &stl->vertex[i];
|
||||||
|
const v3_t origin = v->p;
|
||||||
|
|
||||||
fprintf(stderr, "%d: %f,%f,%f\n",
|
printf("// vertex %d\n"
|
||||||
i, v->p.p[0], v->p.p[1], v->p.p[2]);
|
"translate([%f,%f,%f]) {\n"
|
||||||
|
"sphere(r=20);\n",
|
||||||
|
i, origin.p[0], origin.p[1], origin.p[2]);
|
||||||
|
|
||||||
|
|
||||||
for (int j = 0 ; j < v->num_face; j++)
|
for (int j = 0 ; j < v->num_face; j++)
|
||||||
{
|
{
|
||||||
const stl_face_t * const f = v->face[j];
|
const stl_face_t * const f = v->face[j];
|
||||||
|
v3_t v1 = v3_sub(f->vertex[0]->p, origin);
|
||||||
|
v3_t v2 = v3_sub(f->vertex[1]->p, origin);
|
||||||
|
v3_t v3 = v3_sub(f->vertex[2]->p, origin);
|
||||||
|
|
||||||
|
printf("%%polyhedron(\n"
|
||||||
|
"points=[\n"
|
||||||
|
"[%f,%f,%f],[%f,%f,%f],[%f,%f,%f],\n"
|
||||||
|
"], faces = [[0,1,2]]);\n",
|
||||||
|
v1.p[0], v1.p[1], v1.p[2],
|
||||||
|
v2.p[0], v2.p[1], v2.p[2],
|
||||||
|
v3.p[0], v3.p[1], v3.p[2]
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
fprintf(stderr, "\t%d: %d:%f,%d:%f,%d:%f\n",
|
fprintf(stderr, "\t%d: %d:%f,%d:%f,%d:%f\n",
|
||||||
f - stl->face,
|
f - stl->face,
|
||||||
f->face[0] ? f->face[0] - stl->face : -1, f->angle[0],
|
f->face[0] ? f->face[0] - stl->face : -1, f->angle[0],
|
||||||
f->face[1] ? f->face[1] - stl->face : -1, f->angle[1],
|
f->face[1] ? f->face[1] - stl->face : -1, f->angle[1],
|
||||||
f->face[2] ? f->face[2] - stl->face : -1, f->angle[2]
|
f->face[2] ? f->face[2] - stl->face : -1, f->angle[2]
|
||||||
);
|
);
|
||||||
}
|
*/
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
if (debug) fprintf(stderr, "---------- triangle %d (%d)\n", i, num_vertex);
|
|
||||||
|
|
||||||
stl_vertex_t * vp[3] = {};
|
|
||||||
|
|
||||||
for (int j = 0 ; j < 3 ; j++)
|
|
||||||
{
|
|
||||||
const v3_t * const p = &stl_faces[i].p[j];
|
|
||||||
vp[j] = stl_vertex_find(vertices, &num_vertex, p);
|
|
||||||
}
|
|
||||||
|
|
||||||
// walk all of other triangles to figure out if
|
|
||||||
// any of the triangles are coplanar and have shared
|
|
||||||
// edges.
|
|
||||||
|
|
||||||
uint8_t coplanar_mask = 0;
|
|
||||||
for (int j = 0 ; j < num_triangles ; j++)
|
|
||||||
{
|
|
||||||
if (j == i)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (debug)
|
|
||||||
fprintf(stderr, "%d: check %d -> %d\n", num_vertex, i, j);
|
|
||||||
|
|
||||||
coplanar_mask |= coplanar_check(
|
|
||||||
&stl_faces[i], &stl_faces[j]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debug)
|
|
||||||
fprintf(stderr, "mask %d\n", coplanar_mask);
|
|
||||||
|
|
||||||
// all three vertices are mapped; generate the
|
|
||||||
// connections
|
|
||||||
for (int j = 0 ; j < 3 ; j++)
|
|
||||||
{
|
|
||||||
stl_vertex_t * const v = vp[j];
|
|
||||||
|
|
||||||
// if the edge from j to j+1 is not coplanar,
|
|
||||||
// add it to the list
|
|
||||||
if ((coplanar_mask & (1 << j)) == 0)
|
|
||||||
{
|
|
||||||
if (debug)
|
|
||||||
fprintf(stderr, "%p: %d insert\n", v, j);
|
|
||||||
stl_edge_insert(v, vp[(j+1) % 3]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(stderr, "%d unique vertices\n", num_vertex);
|
|
||||||
printf("thick=%f;\n"
|
|
||||||
"module connector(len) {\n"
|
|
||||||
" render() difference() {\n"
|
|
||||||
" cylinder(r=thick/2+2, h=2*thick);\n"
|
|
||||||
//" translate([0,0,len/2+2]) cube([thick,thick,2*thick]);\n"
|
|
||||||
" translate([0,0,thick/2+2]) cylinder(r=thick/2, h=2*thick);\n"
|
|
||||||
" }\n"
|
|
||||||
//" %%translate([0,0,len*0.48/2]) cube([thick,thick,len*0.48], center=true);\n"
|
|
||||||
" %%translate([0,0,0]) cylinder(r=thick/2, h=len*0.48);\n"
|
|
||||||
"}\n",
|
|
||||||
thick
|
|
||||||
);
|
|
||||||
|
|
||||||
for (int i = 0 ; i < num_vertex ; i++)
|
|
||||||
{
|
|
||||||
stl_vertex_t * const v = vertices[i];
|
|
||||||
printf("translate([%f,%f,%f]) {\n",
|
|
||||||
v->p.p[0],
|
|
||||||
v->p.p[1],
|
|
||||||
v->p.p[2]
|
|
||||||
);
|
|
||||||
|
|
||||||
printf("sphere(r=%f); // %d %p\n", thick/2+2, i, v);
|
|
||||||
|
|
||||||
for (int j = 0 ; j < v->num_edges ; j++)
|
|
||||||
{
|
|
||||||
stl_vertex_t * const v2 = v->edges[j];
|
|
||||||
const v3_t d = v3_sub(v2->p, v->p);
|
|
||||||
const float len = v3_len(&v2->p, &v->p);
|
|
||||||
|
|
||||||
const float b = acos(d.p[2] / len) * 180/M_PI;
|
|
||||||
const float c = d.p[0] == 0 ? sign(d.p[1]) * 90 : atan2(d.p[1], d.p[0]) * 180/M_PI;
|
|
||||||
//
|
|
||||||
printf("rotate([0,%f,%f]) ", b, c);
|
|
||||||
|
|
||||||
if (do_square)
|
|
||||||
printf("connector(%f);\n", len);
|
|
||||||
else
|
|
||||||
printf(" cylinder(r=1, h=%f); // %p\n",
|
|
||||||
len*.45,
|
|
||||||
v2
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("}\n");
|
printf("}\n");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -16,4 +16,4 @@ module tetrahedron()
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
scale(10) tetrahedron();
|
scale(100) tetrahedron();
|
||||||
|
Loading…
Reference in New Issue
Block a user