well, upload file, make payment, wait, done.
Really. STL seems to be the most commonly used file format for 3D printing, and most accept it, but the CAD program I used didn't use STL natively, but it did export STL. I used OpenSCAD because you build the model in a simple programming language that uses functions for primitives (everything in the model is a cylinder) and uses boolean relationships to great a union of shapes or a difference of shapes. This language could use named constants, so I built the model where I could define copal3 = 65 as well as all the other hole sizes, then one line states shutter_size = copal3. Change that line to shutter_size = copal0 and rerender, and I get a board with a differnt size hole.
There are a lot of places to print, but I used treatstock.com. The don't do the printing, but are basically a frontend for a lot of different printers. I uploaded my file, specified a quantity, a material (PETG in my case), a color (black, obviously), and a infill percentage (100%), and listed all the printers that could do what I want, and a price for each. I selected a printer, and completed the payment on Treatstock. They were printed pretty quickly and mailed to me. The printer was in Phoenix and I'm one state over in New Mexico, so they got here pretty quickly.
The first thing I sent was a rough draft of the board for two reasons--one to test fit, and two because I didn't know if my choices in material or design were appropriate. For very complex 3D models, I'm sure there can be issues due to how the object is built in layers. imagine a dagly thing (no not that) being printed. If its only connection to the rest of the object is above the object, it probably would have issues due to being printed in layers. Thats why I did a test print first before ordering a bunch. I had no experience and was willing to sink $15 to see if it would work for me.
Here is what I paid for 9 boards (4x #0, 3x #1, 2x #3)