All right, good morning and welcome back.
This is the open hardware dev room.
Our next talk is from Morgan, whose bio reads Morgan.
So I know nothing about Morgan, except that Morgan is the author of the key connect add-on.
So we are keeping with the theme of e-cad slash m-cad integration without further ado,
take it away, Morgan.
Good morning, everybody.
As I said, my name is Morgan.
Long time hacker at large, all sorts of background is all over the place.
I'm a long time free-cad user.
I've been using free-cad for at least a decade now.
Professionally, I used to be the lead exhibitor for a space and science museum.
We used free-cad for most of our most of the design.
Designed and I used the cam workbench to program CNC uprun the small CNC shop.
Also using free-cad for design and cam.
Alabama Industries, this is mine and my partner's company.
We're an independent exhibit fabrication company.
Again, we use free-cad for all of our design and CNC.
We also use the Cicad Cicad for circuit boards, custom stuff in a lot of our designs.
One of our kind of off-the-cuff designs that we've done is kind of a promotional call the
bar back version two.
Probably the most complex design of done in free-cad.
Huge assemblies, circuit board, integrated into it, into the design, a lot of moving parts.
Fabricated, in fact, again, this is completely free-cad pushing the cam workbench to its
limits with some of this stuff.
This is from Robo Exodica last year, which was fun event, highly recommended.
I'm also a longtime Cicad user, not EE by any means, I'm just a hobbyist.
Maker, if you will, got really into the designing badge scene, the badge life scene, in which
I designed the Cuccophony.
This is a design that kind of drove me mad, I didn't touch Cicad for almost a year after
this.
This project was so difficult, and trying to get it across the finish line for Deathcon,
I don't know, 2018.
It was incredibly difficult, because this design had become so complicated, the 3D structure
was built in free-cad, and then trying to do the circuit layout while pushing DXF files
back and forth.
I got to this point, in the end, I'm trying to do panelization, and I'm so terrified to
touch anything, because one wrong week somewhere and just things were blowing up all over
the place.
It was a really, really, really painful process, and this project never got completed because
of that.
There was a couple more things, one more revision would have gotten a lot done, but it just
wasn't happening with the state of the process.
So that prompted me to start trying to build tooling to assist with this, so I had some
one off Python scripts that would take a footprint that was a bridge connector, and it
would draw lines in between them, it would put the mouse bites in there, it worked, do a
degree, but it was all very, very one-off and very custom, so it didn't have broad enough
support for some of the other projects that I had coming up in the pipeline.
In fact, I regret not getting pictures on here, because I was starting to dabble in moving
part PCBs.
I've made mechanical sliders, I've made rotary purely out of PCBs, no 3D printed parts,
no nothing, but entirely, mechanical parts entirely in PCB.
So some of my next designs were going to be that complex, and my tooling just wasn't
having it.
So I'd started on what would have been connected to my 3rd attempt at making some
making a tool that fits my needs.
The first time around, I was trying to use KaiKat step up, if anyone has actually used
that in Greekad, it has its own KaiKat file parser, so it's doing all of its own parsing,
drawing the geometry, and bringing it in to free CAD.
It can push back, but it's the same thing, it writes its own files, so it's highly dependent
on keeping up to date with KaiKat, and sometimes falls behind in that, but then additionally
it has a specific workflow designed, and it doesn't lend itself well to be embedded
into something else.
So I'm trying to create a bigger workbench around it, so I need something that was more
embeddable, if you will.
Something I can use as a module, not just use as the tool it was intended for.
Let's see, so I introduced this project, KaiKat last March, I'd been about 3 months into
it at that 4 months into it at that point with the release of KaiKat version 9, and having
a stable API, it gave me a good foundation to start moving forward with.
So yet it's the recap of it, it was just general introduction, just kind of the high level
of the background of why I started down this pathway, a roadmap, I was trying to release
this, the version 1 last August, but life and everything else happened, so didn't have
as much time to work on the second half of last year that I had wanted, but progress did
pick up around that time and put a lot more in the second half of last year, got a lot
of the major bugs and a lot of the usability features, figured out and really started
pushing the core of the code to try to get something really stable moving forward.
Around that same time Auguster September, I applied for a free CAD project association
grant.
I did get a briefed of it for it in December, but my general proposal was to commit
100 hours this year to working on this project, started basically starting with getting
the version 1.0 released, that's kind of around the corner, yeah except committed 100 hours,
I've already started on the contract just a few weeks ago, I really started getting on
it and Ernst, committing 10 to 10 hours a week, sort of part of it, broken it up into
three distinct working phases, and a big part of it is I want to try to live stream as
much of it as possible.
I've already done two of them so far and after I'm back from vacation, I'm going to,
you know, two live streams and I had to take a break, so you know, need a vacation.
So I'll be getting back to that in three weeks or something and then it went actually
interested, Thursday, it's 9 a.m. Pacific time, UTC minus 8. And so with a lot of the
base stuff kind of looking good, version 1, I hope to have my mid-market the latest, depends
just kind of how things go jumping back into it, after I'm, after I'm back home, I can
say there's three different phases of how I decided to break up the development. A lot of
it was said is really getting the core infrastructure solidified, so then I've got a good
base to move forward on, kind of the whole project, despite there's a lot of different
parts of it, they all look very similar under the hood, it's take Kai-Kai-Ka-Giammetry
and produce free CAD, geometry out, vice versa. So getting a really good base, base
class system has been really important, I would want to get that looking good from the
get-go, so so far I'm pretty happy with it. Documentation, just kind of getting started
that's getting some improvement now and it's going to be a big part of the 1.0 release.
I hadn't really been doing that the start because the direction was kind of all over
the place. With that user feedback isn't quite there, so that'll be something that's
going to be improved on. Translation support, free CAD is using the QT under the hood, which
has good translation support built in. There's stubs throughout the code now, I want
to get everything with translation support from the get-go. Project files need some cleanup,
despite the fact that I've been professional Python developer for a decade, not actually
that good at releasing modules, I've never actually pushed anything to PIP, so there's a
little bit of work to do around that, if anyone is very familiar with that, holler at me.
And once those kind of things are underway and especially once the project files are cleaned
up, we'll push 1.0 to the add-ons. Again, this is the goal for this is a month from now.
The pretty sure I can pull that. Then start pushing into some of the bigger parts of this,
the phase 2, improving the hierarchy of the parts to boards relationship, but there's
more to it than that. It's just effectively getting everything relatively positioned correctly.
There's different ways of thinking about this. Like, you know, guy CAD, we all design in the
center of the document, despite the fact that 0-0 is over there, free CAD is 0-0 is in the
center everywhere, so there's options of how an individual user wants to handle that.
And particularly once you start looking at, I've got multi-document support here, but
multi-bored support, obviously, I'm doing big stupid things like this. So I want to be
able to work on all of these boards in one document or in multiple documents and be able
to easily assemble them together in the manufacturerable panel at the same time, I may
be able to actually do a 3D assembly because that's my goal. There's a lot of useful
stuff for other people. My goal is to be able to do weird 3D PCBs. As of now, I only support
polygons, which I suspect most people in Kikater are not using yet. There's somewhat
new. I think a lot of people are just going to be using discrete line segments, not 100% sure
there, but I look back and most of my projects have discrete line segments until just a couple
years ago. Internal cutouts and stuff aren't supported yet, so you know, bounding box detection
needs to get done, line segment ordering needs to get done. Those two are pretty closely
related, so I hope they'll come through similar times. And the note of like island support
and bounding box detection, hopefully be starting on prior to the phase two. Some of
this stuff might actually even make it into the 1.0 release. Then the phase 3, improving
the part-to-vort association, that's this sort of repetition, the same thing. There's
a lot of new wants going on. Sorry, so this is for multi-board, so one of the hang-ups
now is that parts are just sort of parts. So if you had multiple boards in your Kikater
project, all the ports just sort of parts get imported together. So better support on these
parts belong to this board, so that'll make a particularly one multi-document support comes
through. That'll, that'll be critical to, you know, keep everything straight. All ready,
there's a little bit of roadbapping going on, because I just want to keep ahead of, I know
this code isn't the best right now. The free CAD, free CAD scriptable object state PI is kind of
interesting. It's complex and it's under documented, so I'm learning a lot the more I dive into
there's also some short coming in the Senate that part of this is, you know, I want to submit
bugs and hopefully even patches to free CAD to overcome some of the shortcomings that I'm having
to work around. Test coverage, there's already a little bit of testing, but I really want to make
sure by the end of the grant process that I have good test coverage going forward. I'm hoping
that, you know, other people will be contributing by that time, so having a good testing,
even just work I did two weeks ago. I realized last night I introduced, introduced the bug,
so trying to get, yeah, more consistency there, exploring CAD side add-ons, that's kind of
something I want to start experimenting with, because there are some shortcomings in the
KaiKat API, in particular one of the issues that I've seen and I think it's going to continue
to be an issue is there's no way of passing events. So one of the things that I see that I would
like is like if you click on a part in either side, I would like highlighting free CAD to KaiKat,
this is possible, but it's not possible the other direction, and the bug I submitted on that seems
like it's not going to be available in the near future in the API directly. So I want to explore
doing a KaiKat side add-on that is going more into the UI layer, so seeing if we can actually
start capturing some of those events. Yeah, so that'll take me through the grant and I think
I'm committed to the grant to about April or May, so I'm hoping that most of the stuff will be
early started in a good shape by the time that comes around. What else have we got here?
Yeah, coming up next, plan for the version 3 rewrite, because it will probably be
probably a necessary. And then it's really going to be starting to add features onto the base
that's already been created when I gave the talk at KaiKat, KaiKat, got a lot of feedback on features
that people would want somewhere already on my radar, others weren't. Test fixtures generators,
so just one click that of nails, fixtures, like that's almost a given given. You can set up a second
object and as your board changes, it will just always be up to date. So that's one of the goals.
And it brings one of the things I really see being beneficial in multi-document support is you've got
your main project, you've got the KaiKat interface that's just outputting your band nails to a
completely separate file in the background. And with the upcoming issue, the eventual release of
KaiKat version 10, there's going to be one huge benefit in there that the KaiKat CLI is going to
incorporate API support. And this is going to be the basis for most of the multi-document,
where then you can just for every document that you have, it's just going to launch
KaiKat CLI in the background. So you can have as many documents as you want at that point.
And you won't, you won't even need the interface. If you're only doing, if you're only doing
the MCAD side, you can tweak your heart's desire, you don't even need KaiKat running.
Automatic closure creations, this could be done in a handful of different ways on the free
CAD side, down to like the simplest of just creating a 3D bounding box. You know, you tell
it what offset that you want and it's just going to give you a solid. That's a bounding box
of your model. You can Boolean negative out of whatever you want. Simple enclosures ready to go.
Panelization, that's going to be just a huge part of it. I'm going to do my best to
utilize KaiKat. If anyone's used that, KaiKat is a really, really good panelization tool. So I want
to utilize that. And starting point, just using it as it's intended is really straightforward.
The real hackery that I want to get to is this again. Being able to use
use KaiKat to take different panels and panelize them together. I've dug into their code a little
bit and it looks, it's in the realm of doable. So just how much hacking it will take.
Support for other e-cats. The way I'm designing things now, I'm trying to keep the import
disynchronization, the sink in sink out. I'm trying to keep very modular because I wanted to keep
in mind in the future of supporting other things. And then the prior talk is really, really interesting
IDX support, that is something that could fit within this quite well. A whole bunch of other stuff.
There's the code is all hosted on codeburg. I should put them on slide. Code is all on code
burg. So go look at the issues, go report something. What do we got? I'm going to do a live
demo. I fixed a bug while I was sitting over there too. What did you do too? The one I
introduced last week. They got a one. One by test PCBs. Okay, look at that. Hey, there's a 3D viewer
they can't do anything with except for export steps. So for a high level, people are not so
familiar with free CAD. It uses a system of workbench which is add-ons, specific workbench for
kind of specific workflows. And that's how we've been developing this. There will be all those
tools that I've talked about, panelization and bed of nails. So this will be different parts of the
workbench itself. And again, this is the way that the KaiKad V9 API works. It's a live API. So
it's communicating directly with your running instance. So step files take a little bit along.
The actual parser and the loader is extremely quick. It's the loading the step files that
actually took most of that time. So yeah, there we go. We have a PCB imported and we can go
click all the way down. Auto-constraining is already in there and there's different options that
you can do for auto-constraining. So you know, it's constrained lines. It's connected all the
vertexes together. So try to keep things clean and tidy and then this is even just a good way
if you want good constraints in KaiKad. Just load your PCB over, add all of your constraints,
and then you can push every time you push back, those constraints will just be there.
Dimension all are all sorts of stuff. So, and that's not pretty enough. Let's go real art.
And then, hey, there we go. That's not that. So yeah, it does work. And then that was dumb though.
So then we can pull it back over. So that's the bidirectional support. A lot of the focus recently
has really just been around board outlines. It is pulling, as it is pulling in parts right now,
but it's just any major changes and I want it trust that. But as the sketch and the board outlines
have really been informing the basis of everything at the moment. As that work is kind of nearing
satisfactory completeness. I'm going to start revisiting the other stuff. There's already
base work on traces and graphics and stuff. But again, I want, as I said at the beginning, I want
to get those base classes really saddled. And then I'll start revisiting those parts of it.
So yeah, a lot of cool stuff in the pipeline. Huge thanks to the FPA for helping me work on this.
I had a really tough financial year last year. So having the grant come through was a big deal.
And I've done any how. You didn't even need to hold that sign up. So questions.
All right.
Hi. You mentioned like cases and enclosures and things like that. And I've used the both
Kai-Kad and Fee-Kad independently, but I'm also a big open S-Kad user, especially for
like iterating on cases, motor mounts, things where you can just like script something,
get a dozen different versions. As an STL, I exported out in front of it. And I just pick from,
you know, so any plans for earth thoughts about, you know, up in S-Kad integration.
We'll just off the top of my head using the OpenF-Kad work badge in free-Kad.
You could just do a Boolean. So like the example I gave, if we could create,
automatically create a 3D bounding box that takes all your components into consideration as well,
make a solid out of that. You could just do a Boolean negative on whatever your,
OpenS-Kad output is. And again, like it would be something that
you could just continually update and the Boolean would just be correct along with it.
So yeah, that would be one easy way off the top of my head. Beyond that,
I don't know enough OpenS-Kad to see exactly how it would be integrated into that itself.
Okay, what's just fine? Because I don't really know all that much about, I don't know as much
about Fee-Kad either, so. So it does have an OpenS-Kad work badge, and it puts free-Kad solids.
So then, yeah, Boolean operations would work right out of that. Okay.
Other questions? You got lots of time. Oh, here's a, surely a tough one from Climit.
Don't make me fall off the stage. No, no. Yeah, so what are you missing in terms of
functionality in free-Kad and Kee-Kad that would make your life much easier?
It's really just that synchronization of multiple parts.
And then also to be able to, to be able to view the same parts in different ways. So like,
when I designed the cacophony, I designed it like this. It was in 3D, like 13 panels
in this 3D form. And then I would have to break them all down flat. I had a second view where there were
clones of all the same parts, but then they were laid flat. And then what I was missing was that ability to,
I want a one-click third view that's the bridges, the panelization parts that bring everything together.
That was always the goal of this. And then just everything else to get to that point is useful for other people.
That, for me, that was the big, just kind of missing feature.
Lots of ugly Python scripts to attempt to address it.
Give me a work out here.
Okay.
Hi, great work. Thanks for, thanks first of all.
What happens if you changed the border of the board in Kee-Kad and imported back?
And what does it do to top a naming problem, like introducing new edges and that kind of stuff?
It would be really pedantic and I've been avoiding trying to say this for a long time.
And I think you and I and a lot of free KAD people should be on the same page.
Top of topological naming solution. The problem is a name by reference.
Yeah, good luck.
I mean, you know what a sticky problem that is. So it's a name by reference by name problem.
So if your names are going to be changing, you're going to have, you're just going to have the
problems that come along with that.
So do you recommend them to just update it in free KAD? Or, you know, is there, so it's not fully
bidirectional, perhaps? Maybe it's better to change it in free KAD?
Yeah, and it depends on what your, what you're doing in the long run.
Like, what your workflow looks like and what your goals look like.
But for me, I would probably, my workflow kind of looks like I'm going to do my very first rough
pass in KAD. And then everything else is going to be done in free KAD. And it will just be a push
process after that. Board outlines one way parts the other way is almost certainly how I would
be approaching it. And then I don't think I'm like trying to picture away where I would be
a situation in which I would be doing reference by name on to my PCB. Because again, I would
use something like doing a 3D bounding box and a bullion. So then you don't have to do a geometric
reference. You've just got this object that that references your entire part. And that's just
my free KAD workflow in general. I avoid geometric references as much as possible.
More questions? All right. Oh, no. I should have put two names in there.
If you have, like, if you're working on a project, I've worked on a project where I had a really
fixed constraint there, we have for an enclosure. Is there any way and then endlessly sort of
swapping components in my KAD? Is there a way for there to be like a collision warning that
pops up that doesn't sort of update your, it just tells you that new component is going to
Yeah, that I don't know the answer to that. But that is in my features list already. That was one of
the suggestions that I got at Kicon as well. Is, yeah, just straight up collision detection.
Yeah, yeah. I'm sure it's achievable. I just haven't quite looked into what it would take.
And there's probably a handful different ways to approach it. Super nice feature.
But yeah, it's on the features list for sure.
All right. Thank you very much, Morgan. Yep. Oh, it's big y'all.
And if you want to check out the company, I've got both the 3D and