week four: three-d scanning and printing
This week, we were set loose on the 3D scanners and printers. I used the Minolta laser scanner to scan a plastic pigeon my friend had sent me. I used Jin Joo's guide, which was detailed and easy to follow, to run the Minolta. I didn't repair my mesh in GeoMagic, so I could have more control over what operations were performed on the mesh.
After scanning, the parts of the model that didn't scan well were the underside and legs of the bird. This inspired me to replace the legs with rocking horse rockers. I made some quick rockers in Rhino, meshed them, and performed a mesh boolean on the rockers and bird. Before printing, the scanned mesh required a lot of clean up, including hole-filling and flipping face orientations.
Closing holes. To select boundary faces, Filters > Selection > Select Border. With a border selection, fill the hole with Filters > Remeshing, simplification, and reconstruction > Close Holes. Not strictly necessary to make the selection, but can help prevent crashes when there are lots of problems with the mesh.
Flipping normals. To see normals, select Render > Show Face Normals. Another useful trick to visualize flipped normals is to use Filters > Normals, Curvatures, and Orientation > Invert Faces Orientation. This makes all corrently oriented faces black, and shows the originally flipped faces in light gray.
If you have a manifold mesh, you can use Filters > Normals, Curvatures, and Orientation > Re-orient all faces coherently to fix flipped normals, but if you used a scanner, you probably don't have a manifold mesh. I don't know of an easy way to flip faces manually in Meshlab, so I use OpenFlipper. After making a face selection, use Face operations > Flip selected face orientation.
Even after all my cleaning, some flipped normals slipped through. Tom showed me some ways he knows to fix them in the printing software, but even we didn't get them all. They can cause printers to do unexpected things, but in this case, the few we let through weren't a problem.
Before I finished repairing the bird model, I wanted to make sure I had something to print. I've been wanting to generalize some code I came across in the open source project other/core. The routine computed a mesh approximation to a sphere using group theory. By looking at the orbits of vectors under the icosahedral and octahedral groups, we can reconstruct the vertices of lots of different polyhedra. Below is a code snippet of the list of polyhedra.
octa_base_vec = {
'cube':[1,1,1],
'cuboctahedron':[1,0,1],
'octahedron':[1,0,0],
'small-rhombicuboctahedron': [1,1,sqrt(2)+1],
'truncated-cube':[1,1,sqrt(2)-1],
'truncated-octahedron':[1,0,2],
}
phi = (1+sqrt(5))/2
icos_base_vec = {
'dodecahedron':[1+phi,1,0],
'icosahedron':[0,1,phi],
'icosidodecahedron':[0,0,1],
'small-rhombicosidodecahedron':[-1,phi,2],
'truncated-dodecahedron':[2,phi,1+phi],
'truncated-icosahedron':[1+2*phi,phi,2]
}
Using this script, I generated geometry for printing using Rhinoscript. Below are a rendering in Rhino and the 3D printed object. While cool, the polyhedra ended up a little too thin and broke during cleaning.
Files: