/** This is a test of spherical embossing for 3-D printing. */ res = 254/inch h = 1 inch r = 1 inch text = "https://triplenine.org" // On an ellipsoid v = callJava["frink.graphics.VoxelArray", "makeSuperellipsoid", [r res, r res, 1.3 r res, 1, 1]] img = qrcode[text, "L"] //img = img.gaussianBlur[2] // This makes it feasible to print without overhang // 2-pixel cube tool for embossing pixelTool = newJava["frink.graphics.VoxelArray", [0,2,0,2,0,2,true]] // Out emboss emboss = v.sphericalEmboss[img, 0,0,0, 180 deg, 90 deg, 0 deg, 70 deg, 0, 254, 0 cm res, 0 cm res, -.2 cm res, 0 cm res, pixelTool, 0, 0, 0] // In emboss emboss2 = v.sphericalEmboss[img, 0,0,0, 0 deg, 90 deg, 0 deg, 70 deg, 0, 254, 0 cm res, 0 cm res, .2 cm res, 0 cm res, pixelTool, 0, 0, 0] v = v.union[emboss] // Add extrusion v.remove[emboss2] // remove carving v.projectX[undef].show["X"] v.projectY[undef].show["Y"] v.projectZ[undef].show["Z"] filename = "QRCodeEgg.obj" print["Writing $filename..."] w = new Writer[filename] w.println[v.toObjFormat["v", 1/(res mm)]] w.close[] println["done."] // Generates a QRcode image using Google Charts API: // http://code.google.com/apis/chart/docs/gallery/qr_codes.html // Generate a QRcode image and return that image. // errorCorrection is a letter consisting of one of the following: // "L" (can correct up to 7% errors) // "M" (can correct up to 15% errors) // "Q" (can correct up to 25% errors) // "H" (can correct up to 30% errors) qrcode[text, errorCorrection="M", width=400, height=400] := { return new image["http://chart.apis.google.com/chart?cht=qr&chs=${width}x${height}&chld=$errorCorrection&chl=" + URLEncode[text, "UTF8"]] }