How to use the differential line algorithm to create a decorative tile with CNC

I have finally found a simple way to use the circle packing algorithm to “make something real”: a nice wood tile.
In order to achieve this result, similarly to how we did with Differential line growth: make it real, I added few export functions in our Pack class:
String getSaveName() {
return day()+""+hour()+""+minute()+""+second();
}
void exportDXF() {
String exportName = getSaveName()+".dxf";
PGraphics pg = createGraphics(width, height, DXF, exportName);
pg.beginDraw();
for (int i=0; i<circles.size(); i++) {
Circle p = circles.get(i);
dxfCircle(p.position.x, p.position.y, p.radius, 60, pg);
}
pg.endDraw();
pg.dispose();
pg.endRaw();
println(exportName + " saved.");
}
void dxfCircle(float x, float y, float r, float detail, PGraphics pg) {
float inc = TWO_PI / detail;
float px = x +cos(0)*r/2;
float py = y +sin(0)*r/2;
for (float a=inc; a<TWO_PI; a+=inc) {
float x1 = x +cos(a)*r/2;
float y1 = y +sin(a)*r/2;
pg.line(px, py, x1, y1);
px=x1;
py=y1;
}
}
void exportSVG() {
String exportName = getSaveName()+".svg";
PGraphics pg = createGraphics(width, height, SVG, exportName);
pg.beginDraw();
for (int i=0; i<circles.size(); i++) {
Circle p = circles.get(i);
pg.ellipse(p.position.x, p.position.y, p.radius, p.radius);
}
pg.endDraw();
pg.dispose();
println(exportName + " saved.");
}
void displayCircle(int i) {
circles.get(i).display();
}
In this way, by calling an export method (for example via keyPressed()) I can get a usable dxf of svg file. With that I went to Voxelizer and select the CNC milling workflow for my ZMorph 2SX, set up the g-code and less than an hour later I had this nice-looking tile 😉
