KiCAD and gEDA simply aren't up to the job of dealing with this type of project. i dedicated several months making a huge effort to design a Card in KiCAD, it was... well, it wasn't time wasted: it was "time discovering that KiCAD is so inadequate that its use would *ACTIVELY* prevent and prohibit the completion of the entire goal"
That's very disappointing. I was hoping to fabricate the PCBs for at least the housings. Now, it looks like I have to redo the PCBs in KiCAD. :-( Will you be providing KiCAD files in the future? Being able to use only free software is a highly desirable feature. And, just out of curiosity, in what way, did you find KiCAD inadequate?
you'd be the second person - in the entire world - to be using pyopenscad. yes, really.
No, I don't use pyopenscad per se. But, I am comfortable using text and programming interfaces. I'm not a big fan of using the mouse. So, I have no issue with the CAD designs being available only in pyopenscad.
solidpython was abandoned by its author: fortunately i recognised its potential and rescued it before he went ahead with a radically different (unsuitable) direction, which i don't believe he ever completed. i kept the name "pyopenscad"
the actual code is quite ingenious and very simple: it creates mirror-objects of openscad objects (which as you know, SCAD is just a thin wrapper around libCGAL anyway). when you create a python-based pyopenscad object by calling the function "cube(5,6,3)", that stores in-memory sufficient information to, duh, create a cube of dimensions x=5, y=6, z=3.
however what *actually* happens is, when you call the function that requests generation of openscad output, the *python object tree* is recursively walked, and each python object simply outputs *EQUIVALENT OPENSCAD TEXT* that matches precisely and exactly what the python code asked for.
i have the following in ~/.vimrc so that i can hit the "comma" key: map , ^[:w^M:!python %:t^M^M
by setting up 2 xterms on the left side (one for editing, one to view library routines used *by* that file), and opening openscad on the laptop_model.scad file mostly full-screen to the right, the above macro will *automatically* do a file-save followed by *execution* of that file.
this will get that file (the python program) to execute, generating a new version of laptop_model.scad....
... openscad will *AUTOMATICALLY* notice that and re-render the model.
now, the only thing is: the laptop model is so absolutely massive that even a high-end GPU has severe difficulty rendering it. don't for god's sake try to view the laptop models without OpenGL having been set up. an Intel GPU (950 etc. etc.) is perfectly sufficient.
at the top of the laptop_model file you will see there's a "part-selection" enum that is used further down to select which parts to render.
in the riki200 3D printer i made this much more sophisticated, going with an object-orientated approach, and adding in options to auto-generate the STL files.
however, laptop_model.py is the earlier precursor and i stuck with a function-based approach that made a lot of sense due to the reduced simplicity of the program (the riki200 includes BOM-generation and much more).
let me know how you get on.
Thank you for the detailed explanation. But, for now, my interest is primarily in the PCB designs. I'll be trying out the CAD designs only if I can fabricate the PCB. So, for now, that is a blocker. :-(