Toggle navigation
Heuristic42
Blog
Opengl
Meta
Rendering
1
created
May 30 at 5:22
Calling Babel from Django for React+JSX
Sharing my frustrations so you can enjoy them too... :) As...
–
pknowles
edited
May 22 at 18:57
Microsoft Natural Ergonomic 4000 Replacement
![my old natural 4k][1] **They stopped making it!** I'm ac...
–
pknowles
comment
May 22 at 16:00
Prime Mover - Processor (final problem) [Spoilers!]
this should be fixed now
–
pknowles
edited
May 18 at 22:15
Clip Space
Clip space is a linearly dependent vector space between eye s...
–
pknowles
created
May 18 at 21:56
Clip Space
Clip space is a linearly dependent vector space between eye s...
–
pknowles
edited
May 18 at 19:50
Vector Spaces
A number of vector spaces are discussed below and widely used...
–
pknowles
edited
May 18 at 19:43
Projection Matrix
A projection is fundamental to [cameras](/8/rendering/cameras...
–
pknowles
edited
May 18 at 18:32
Matrices
Matrices are 2D arrays of numbers, grouped as such to enable ...
–
pknowles
edited
May 14 at 21:47
DerBard: Custom Split Mechanical Keyboard Prototype
In my last post I talked about a [MS Natural 4K replacement](...
–
pknowles
created
May 14 at 21:46
Matching complex shapes for a custom keyboard in Fusion360
For my [custom mechanical keyboard](/blog/55/derbard-custom-s...
–
pknowles
comment
May 8 at 0:32
Matrices
[deleted]
–
anonymous
comment
May 7 at 23:30
Microsoft Natural Ergonomic 4000 Replacement
Yes indeed :). Thanks for the reminder. I found some time to ...
–
pknowles
created
May 7 at 23:27
DerBard: Custom Split Mechanical Keyboard Prototype
In my last post I talked about a [MS Natural 4K replacement](...
–
pknowles
created
May 7 at 22:32
Anatomy of a custom keyboard
This is my quick summary and background before talking detail...
–
pknowles
comment
Apr 28 at 10:29
Microsoft Natural Ergonomic 4000 Replacement
Any update on this? I'm in the same boat as you are, have bee...
–
anonymous
comment
Mar 5 at 8:16
Matrices
[deleted]
–
anonymous
comment
Jan 4 at 16:45
Microsoft Natural Ergonomic 4000 Replacement
I currently have 3 or 4 Ergo 4Ks and use one almost every day...
–
anonymous
comment
Oct 28 '22
Microsoft Natural Ergonomic 4000 Replacement
Interesting about the Microsoft Ergonomic board! Wish they we...
–
anonymous
comment
Oct 27 '22
Microsoft Natural Ergonomic 4000 Replacement
I'm in the same boat as you. I have 3 Microsoft Ergo 4000s l...
–
anonymous
created
Oct 2 '22
Microsoft Natural Ergonomic 4000 Replacement
![my old natural 4k][1] **They stopped making it!** I'm ac...
–
pknowles
created
Sep 30 '22
PIP and the user directory
This is a quick note about python + pip best practices: ***ne...
–
pknowles
created
Jan 17 '22
Starting KDE plasma wayland with Fedora 35 and nvidia drivers
A quick bit of background: X11 is a compositor and Wayland is...
–
pknowles
comment
Jan 5 '22
Making a real EMF Reader
Wow, It is that famous Ghost buster, isn’t it?. Very unique,...
–
anonymous
edited
Jan 3 '22
Making a real EMF Reader
The game **phasmophobia** by [Kinetic Games](https://kineticg...
–
pknowles
…
View All
Log in
Matching complex shapes for a custom keyboard in Fusion360
leave this field blank to prove your humanity
Article title
*
Article revisions must have a non-empty title
Article body
*
For my [custom mechanical keyboard](/blog/55/derbard-custom-split-mechanical-keyboard-prototype/) I wanted to match the shape of my existing keyboard exactly. ![My old MS Natural 4K][3] I found the photogrammetry software, [Meshroom](https://alicevision.org/#meshroom). Just with my phone I took some photos of my old natural 4k and used Meshroom to create a 3D model of it. The ease of use of this software out of the box is just incredible. Drag in the images, click go and wait. ![Photogrammetry Capture][4] The Meshroom output was a big, a bit noisy and not aligned to any ground plane. I did some cleanup in [blender](https://www.blender.org/). Notably, using [this planefit.py plugin](https://github.com/varkenvarken/blenderaddons/blob/master/planefit.py) ([blog](https://blog.michelanders.nl/2017/12/planefit-blender-add-on-to-fit-plane.html)) to create a ground plane, [snapping](https://blender.stackexchange.com/questions/189774/how-to-align-face-to-face) an "empty" to it, parenting and un-parenting the empty but [keeping the transform](https://blender.stackexchange.com/questions/14232/align-an-object-to-a-specific-face) and zeroing the object's rotation to align it. It turns out this was actually the easy bit. I had designed the key holder already and now I needed to place them in 3D before joining them together. I needed to have the whole layout of all the keys in Fusion360 so I could export a single model and 3D print it. Importing the keyboard mesh from blender was straight forward. I refined the scale, matching measurement some I'd taken from the real keyboard (see the image below). Now the tricky bit is Fusion360 does not really allow interacting with triangle meshes. I couldn't find a way to create any construction objects relative to mesh vertices or faces in order to place my key holders with the align tool. Now, I love Fusion360. It's free, so easy to start using, and having an editable history is a godsend. It can be super frustrating at times when it's slow and buggy --- never ever use [*Copy Paste Bodies*](https://forums.autodesk.com/t5/fusion-360-support/copy-paste-bodies-can-t-resolve-warning/td-p/9023308). One frustrating thing about Fusion360 is the total lack of arbitrary transform support. You can move objects along axes defined by their own edges but there's not always an edge in the direction you want and one node in the history per axis is clunky. It does have an arbitrary x, y, z move tool but editing those in the history is broken as the reference orientation is lost. And don't get me started on accidentally moving a component and getting random "capture component positions" strewn through the history. This would not do for positioning every key individually. <img src="https://lh3.googleusercontent.com/pw/AJFCJaVfsQlbhvlytcGzIBsbdppPYUDkT0f3YdzT5t44TYsR4Kxel6yc4-muYiUh4lqxxamJ6-IyEjDO8541nrc56V0whtwurh9m7qxdTvulsyKzWVqqpRBWiaOhoKIgoDd6RIGhxVp1dlxawcYTMWVoAgjmPQ=w2990-h797-s-no"> My first real attempt was to cut the imported mesh in a few places with a construction planes, then create some silhouette sketches on each cut and *loft* them together. The lofts generated nice curved paths in 3D for each vertex and I made sure to have one for each row of keys. Then used the pattern tool to place key holders along the path. This was so close to what I wanted but I had no control over the key alignment, the rotation about the path. The distance between the paths was also inconsistent and simply dependent on the loft algorithm. <img src="https://lh3.googleusercontent.com/pw/AJFCJaUMxB5Lls5NVr9jYcx91iHHk_ABhNJz7CPQXFV1F3dYBgG39As5F5OGFz7sPlUV9LmuPvIRE3jChPlZGcyc5rB6Nfg3AalgWqyUeCgj01ICL9kek5PI7JHoJumjoJWYigt76miQCyR8V6Wimc15tfXkKw=w3114-h1946-s-no" /> I tried something else. I had a vague idea that I wanted to make some kind of curved plane to match the MS Natural 4K, then place my keyboard layout over it and copy my key holder design to all the keys. I used blender to model some NURB patches, then apply my [keyboard-layout-editor.com](http://www.keyboard-layout-editor.com/) layout as a texture and finally snap some quads at the location of each key. See above. Boy if only I remembered Fusion360 wouldn't be able to do anything useful with these, hey. I was too optimistic. I imported the quads as a mesh. Unlike last attempt I now had precise locations I wanted each key at along with a plane to align to, just no way to get Fusion360 to use them. I played around with, creating paths on construction planes, trying to use pattern on path, but still struggling with alignment. Another important cosideration was this: **The key rows of the MS Natural 4K curve in multiple directions** It's subtle, I could probably do without but I decided I needed this level of control. Creating a path on a plane was not going to work since the path would need to curve away from the plane in some places. Finally I had a Fusion360 epiphany: I would extrude two curved paths and intersect them. <img src="https://lh3.googleusercontent.com/pw/AJFCJaVGC39A5yHz8lCeiO_CMNEdMAk6gKLpLZj4_wMDwhPo84JGQYlJpUh4PFOjfZH5WX8IvWj89xj4fZHUnBK62UEXv54QCRZYTuOTkwwsbVjVb28GiGH_M1PW9zRd_dgDRepZDUNqRYp6LQL5H_UmcYis6A=w3106-h1359-s-no" /> This worked really well. I'm quite proud. I could design the curves from top down and side on, looking at my reference 3D model and the quads I'd made earlier. The path along the intersection would put the keys in the right spots. I made 4 separate extrusions, one for each row, so that I could also use the align tool and set the initial rotation of the key holder for the pattern tool. I'll admit to exaggerated some of the top down curves and increasing the dips under the D and K keys, so I can't truly say the layout is the same as the 4K. [3]: https://img.heuristic42.com/img/86b71fbeecb5.jpg [4]: https://img.heuristic42.com/img/d0dbb0dc35c3.jpg
Toggle Preview
Edit message
*
A description of the changes made
Discard Draft
Save Draft
leave this field blank to prove your humanity
×
Flag
the thing you clicked
for moderator attention.
Reason choice:
Spam, promoting, advertising without disclosure
Rude, inappropriate, generally offensive
Too arrogant or demeaning to others
Other
Reason:
The reason for raising the flag
×
Error
Error failed to load